diff --git a/twidere.component.common/src/main/java/org/mariotaku/twidere/TwidereConstants.java b/twidere.component.common/src/main/java/org/mariotaku/twidere/TwidereConstants.java index b767383e1..af34d0ba0 100644 --- a/twidere.component.common/src/main/java/org/mariotaku/twidere/TwidereConstants.java +++ b/twidere.component.common/src/main/java/org/mariotaku/twidere/TwidereConstants.java @@ -29,228 +29,226 @@ import org.mariotaku.twidere.constant.SharedPreferenceConstants; */ public interface TwidereConstants extends SharedPreferenceConstants, IntentConstants { - public static final String TWIDERE_APP_NAME = "Twidere"; - public static final String TWIDERE_PACKAGE_NAME = "org.mariotaku.twidere"; - public static final String TWIDERE_PROJECT_URL = "https://github.com/mariotaku/twidere"; - public static final String TWIDERE_PROJECT_EMAIL = "twidere.project@gmail.com"; + String TWIDERE_APP_NAME = "Twidere"; + String TWIDERE_PACKAGE_NAME = "org.mariotaku.twidere"; + String TWIDERE_PROJECT_URL = "https://github.com/mariotaku/twidere"; + 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"; - public static final String USER_COLOR_PREFERENCES_NAME = "user_colors"; - public static final String HOST_MAPPING_PREFERENCES_NAME = "host_mapping"; - public static final String MESSAGE_DRAFTS_PREFERENCES_NAME = "message_drafts"; - public static final String SHARED_PREFERENCES_NAME = "preferences"; - public static final String PERMISSION_PREFERENCES_NAME = "app_permissions"; - public static final String SILENT_NOTIFICATIONS_PREFERENCE_NAME = "silent_notifications"; - public static final String TIMELINE_POSITIONS_PREFERENCES_NAME = "timeline_positions"; - public static final String ACCOUNT_PREFERENCES_NAME_PREFIX = "account_preferences_"; - public static final String KEYBOARD_SHORTCUTS_PREFERENCES_NAME = "keyboard_shortcuts_preferences"; + String USER_NICKNAME_PREFERENCES_NAME = "user_nicknames"; + String USER_COLOR_PREFERENCES_NAME = "user_colors"; + String HOST_MAPPING_PREFERENCES_NAME = "host_mapping"; + String MESSAGE_DRAFTS_PREFERENCES_NAME = "message_drafts"; + String SHARED_PREFERENCES_NAME = "preferences"; + String PERMISSION_PREFERENCES_NAME = "app_permissions"; + String SILENT_NOTIFICATIONS_PREFERENCE_NAME = "silent_notifications"; + String TIMELINE_POSITIONS_PREFERENCES_NAME = "timeline_positions"; + String ACCOUNT_PREFERENCES_NAME_PREFIX = "account_preferences_"; + String KEYBOARD_SHORTCUTS_PREFERENCES_NAME = "keyboard_shortcuts_preferences"; - public static final String TWITTER_CONSUMER_KEY = "uAFVpMhBntJutfVj6abfA"; - public static final String TWITTER_CONSUMER_SECRET = "JARXkJTfxo0F8MyctYy9bUmrLISjo8vXAHsZHYuk2E"; - public static final String TWITTER_CONSUMER_KEY_2 = "UyaS0xmUQXKiJ48vZP4dXQ"; - public static final String TWITTER_CONSUMER_SECRET_2 = "QlYVMWA751Dl5yNve41CNEN46GV4nxk57FmLeAXAV0"; - public static final String TWITTER_CONSUMER_KEY_3 = "YljS7Zmbw3JkouhZkxCINAsn6"; - public static final String TWITTER_CONSUMER_SECRET_3 = "AYrXN6eAJ3Luf9o5zS4Flq2bSBhrB6A9eioI8JENRx8HMh9YuS"; + String TWITTER_CONSUMER_KEY_LEGACY = "uAFVpMhBntJutfVj6abfA"; + String TWITTER_CONSUMER_SECRET_LEGACY = "JARXkJTfxo0F8MyctYy9bUmrLISjo8vXAHsZHYuk2E"; + String TWITTER_CONSUMER_KEY = "YVROlQkXFvkPfH3jcFaR4A"; + String TWITTER_CONSUMER_SECRET = "0UnEHDq5IzVK9nstiz2nWOtG5rOMM5JkUpATfM78Do"; - public static final String SCHEME_HTTP = "http"; - public static final String SCHEME_HTTPS = "https"; - public static final String SCHEME_CONTENT = "content"; - public static final String SCHEME_TWIDERE = "twidere"; + String SCHEME_HTTP = "http"; + String SCHEME_HTTPS = "https"; + String SCHEME_CONTENT = "content"; + String SCHEME_TWIDERE = "twidere"; - public static final String PROTOCOL_HTTP = SCHEME_HTTP + "://"; - public static final String PROTOCOL_HTTPS = SCHEME_HTTPS + "://"; - public static final String PROTOCOL_CONTENT = SCHEME_CONTENT + "://"; - public static final String PROTOCOL_TWIDERE = SCHEME_TWIDERE + "://"; + String PROTOCOL_HTTP = SCHEME_HTTP + "://"; + String PROTOCOL_HTTPS = SCHEME_HTTPS + "://"; + String PROTOCOL_CONTENT = SCHEME_CONTENT + "://"; + String PROTOCOL_TWIDERE = SCHEME_TWIDERE + "://"; - public static final String AUTHORITY_USER = "user"; - public static final String AUTHORITY_HOME = "home"; - public static final String AUTHORITY_MENTIONS = "mentions"; - public static final String AUTHORITY_DIRECT_MESSAGES = "direct_messages"; - public static final String AUTHORITY_USERS = "users"; - public static final String AUTHORITY_USER_TIMELINE = "user_timeline"; - public static final String AUTHORITY_USER_MEDIA_TIMELINE = "user_media_timeline"; - public static final String AUTHORITY_USER_FAVORITES = "user_favorites"; - public static final String AUTHORITY_USER_FOLLOWERS = "user_followers"; - public static final String AUTHORITY_USER_FRIENDS = "user_friends"; - public static final String AUTHORITY_USER_BLOCKS = "user_blocks"; - public static final String AUTHORITY_STATUS = "status"; - public static final String AUTHORITY_STATUSES = "statuses"; - public static final String AUTHORITY_DIRECT_MESSAGES_CONVERSATION = "direct_messages_conversation"; - public static final String AUTHORITY_SEARCH = "search"; - public static final String AUTHORITY_MAP = "map"; - public static final String AUTHORITY_USER_LIST = "user_list"; - public static final String AUTHORITY_USER_LIST_TIMELINE = "user_list_timeline"; - public static final String AUTHORITY_USER_LIST_MEMBERS = "user_list_members"; - public static final String AUTHORITY_USER_LIST_SUBSCRIBERS = "user_list_subscribers"; - public static final String AUTHORITY_USER_LIST_MEMBERSHIPS = "user_list_memberships"; - public static final String AUTHORITY_USER_LISTS = "user_lists"; - public static final String AUTHORITY_USERS_RETWEETED_STATUS = "users_retweeted_status"; - public static final String AUTHORITY_SAVED_SEARCHES = "saved_searches"; - public static final String AUTHORITY_SEARCH_USERS = "search_users"; - public static final String AUTHORITY_SEARCH_TWEETS = "search_tweets"; - public static final String AUTHORITY_TRENDS = "trends"; - public static final String AUTHORITY_USER_MENTIONS = "user_mentions"; - public static final String AUTHORITY_ACTIVITIES_ABOUT_ME = "activities_about_me"; - public static final String AUTHORITY_ACTIVITIES_BY_FRIENDS = "activities_by_friends"; - public static final String AUTHORITY_INCOMING_FRIENDSHIPS = "incoming_friendships"; - public static final String AUTHORITY_STATUS_RETWEETERS = "status_retweeters"; - public static final String AUTHORITY_STATUS_FAVORITERS = "status_favoriters"; - public static final String AUTHORITY_STATUS_REPLIES = "status_replies"; - public static final String AUTHORITY_RETWEETS_OF_ME = "retweets_of_me"; - public static final String AUTHORITY_MUTES_USERS = "mutes_users"; - public static final String AUTHORITY_NOTIFICATIONS = "notifications"; - public static final String AUTHORITY_ACCOUNTS = "accounts"; - public static final String AUTHORITY_DRAFTS = "drafts"; - public static final String AUTHORITY_FILTERS = "filters"; - public static final String AUTHORITY_PROFILE_EDITOR = "profile_editor"; + String AUTHORITY_USER = "user"; + String AUTHORITY_HOME = "home"; + String AUTHORITY_MENTIONS = "mentions"; + String AUTHORITY_DIRECT_MESSAGES = "direct_messages"; + String AUTHORITY_USERS = "users"; + String AUTHORITY_USER_TIMELINE = "user_timeline"; + String AUTHORITY_USER_MEDIA_TIMELINE = "user_media_timeline"; + String AUTHORITY_USER_FAVORITES = "user_favorites"; + String AUTHORITY_USER_FOLLOWERS = "user_followers"; + String AUTHORITY_USER_FRIENDS = "user_friends"; + String AUTHORITY_USER_BLOCKS = "user_blocks"; + String AUTHORITY_STATUS = "status"; + String AUTHORITY_STATUSES = "statuses"; + String AUTHORITY_DIRECT_MESSAGES_CONVERSATION = "direct_messages_conversation"; + String AUTHORITY_SEARCH = "search"; + String AUTHORITY_MAP = "map"; + String AUTHORITY_USER_LIST = "user_list"; + String AUTHORITY_USER_LIST_TIMELINE = "user_list_timeline"; + String AUTHORITY_USER_LIST_MEMBERS = "user_list_members"; + String AUTHORITY_USER_LIST_SUBSCRIBERS = "user_list_subscribers"; + String AUTHORITY_USER_LIST_MEMBERSHIPS = "user_list_memberships"; + String AUTHORITY_USER_LISTS = "user_lists"; + String AUTHORITY_USERS_RETWEETED_STATUS = "users_retweeted_status"; + String AUTHORITY_SAVED_SEARCHES = "saved_searches"; + String AUTHORITY_SEARCH_USERS = "search_users"; + String AUTHORITY_SEARCH_TWEETS = "search_tweets"; + String AUTHORITY_TRENDS = "trends"; + String AUTHORITY_USER_MENTIONS = "user_mentions"; + String AUTHORITY_ACTIVITIES_ABOUT_ME = "activities_about_me"; + String AUTHORITY_ACTIVITIES_BY_FRIENDS = "activities_by_friends"; + String AUTHORITY_INCOMING_FRIENDSHIPS = "incoming_friendships"; + String AUTHORITY_STATUS_RETWEETERS = "status_retweeters"; + String AUTHORITY_STATUS_FAVORITERS = "status_favoriters"; + String AUTHORITY_STATUS_REPLIES = "status_replies"; + String AUTHORITY_RETWEETS_OF_ME = "retweets_of_me"; + String AUTHORITY_MUTES_USERS = "mutes_users"; + String AUTHORITY_NOTIFICATIONS = "notifications"; + String AUTHORITY_ACCOUNTS = "accounts"; + String AUTHORITY_DRAFTS = "drafts"; + String AUTHORITY_FILTERS = "filters"; + String AUTHORITY_PROFILE_EDITOR = "profile_editor"; - public static final String QUERY_PARAM_ACCOUNT_ID = "account_id"; - public static final String QUERY_PARAM_ACCOUNT_IDS = "account_ids"; - public static final String QUERY_PARAM_ACCOUNT_NAME = "account_name"; - public static final String QUERY_PARAM_STATUS_ID = "status_id"; - public static final String QUERY_PARAM_USER_ID = "user_id"; - public static final String QUERY_PARAM_LIST_ID = "list_id"; - public static final String QUERY_PARAM_SCREEN_NAME = "screen_name"; - public static final String QUERY_PARAM_LIST_NAME = "list_name"; - public static final String QUERY_PARAM_QUERY = "query"; - public static final String QUERY_PARAM_TYPE = "type"; - public static final String QUERY_PARAM_VALUE_USERS = "users"; - public static final String QUERY_PARAM_VALUE_TWEETS = "tweets"; - public static final String QUERY_PARAM_NOTIFY = "notify"; - public static final String QUERY_PARAM_LAT = "lat"; - public static final String QUERY_PARAM_LNG = "lng"; - public static final String QUERY_PARAM_URL = "url"; - public static final String QUERY_PARAM_NAME = "name"; - public static final String QUERY_PARAM_FINISH_ONLY = "finish_only"; - public static final String QUERY_PARAM_NEW_ITEMS_COUNT = "new_items_count"; - public static final String QUERY_PARAM_RECIPIENT_ID = "recipient_id"; - public static final String QUERY_PARAM_READ_POSITION = "param_read_position"; - public static final String QUERY_PARAM_READ_POSITIONS = "param_read_positions"; + String QUERY_PARAM_ACCOUNT_ID = "account_id"; + String QUERY_PARAM_ACCOUNT_IDS = "account_ids"; + String QUERY_PARAM_ACCOUNT_NAME = "account_name"; + String QUERY_PARAM_STATUS_ID = "status_id"; + String QUERY_PARAM_USER_ID = "user_id"; + String QUERY_PARAM_LIST_ID = "list_id"; + String QUERY_PARAM_SCREEN_NAME = "screen_name"; + String QUERY_PARAM_LIST_NAME = "list_name"; + String QUERY_PARAM_QUERY = "query"; + String QUERY_PARAM_TYPE = "type"; + String QUERY_PARAM_VALUE_USERS = "users"; + String QUERY_PARAM_VALUE_TWEETS = "tweets"; + String QUERY_PARAM_NOTIFY = "notify"; + String QUERY_PARAM_LAT = "lat"; + String QUERY_PARAM_LNG = "lng"; + String QUERY_PARAM_URL = "url"; + String QUERY_PARAM_NAME = "name"; + String QUERY_PARAM_FINISH_ONLY = "finish_only"; + String QUERY_PARAM_NEW_ITEMS_COUNT = "new_items_count"; + String QUERY_PARAM_RECIPIENT_ID = "recipient_id"; + String QUERY_PARAM_READ_POSITION = "param_read_position"; + 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"; - public static final String OAUTH_CALLBACK_URL = PROTOCOL_TWIDERE + "com.twitter.oauth/"; + String OAUTH_CALLBACK_OOB = "oob"; + String OAUTH_CALLBACK_URL = PROTOCOL_TWIDERE + "com.twitter.oauth/"; - public static final int REQUEST_TAKE_PHOTO = 1; - public static final int REQUEST_PICK_IMAGE = 2; - public static final int REQUEST_SELECT_ACCOUNT = 3; - public static final int REQUEST_COMPOSE = 4; - public static final int REQUEST_EDIT_API = 5; - public static final int REQUEST_BROWSER_SIGN_IN = 6; - public static final int REQUEST_SET_COLOR = 7; - public static final int REQUEST_SAVE_FILE = 8; - public static final int REQUEST_EDIT_IMAGE = 9; - public static final int REQUEST_EXTENSION_COMPOSE = 10; - public static final int REQUEST_ADD_TAB = 11; - public static final int REQUEST_EDIT_TAB = 12; - public static final int REQUEST_PICK_FILE = 13; - public static final int REQUEST_PICK_DIRECTORY = 14; - public static final int REQUEST_ADD_TO_LIST = 15; - public static final int REQUEST_SELECT_USER = 16; - public static final int REQUEST_SELECT_USER_LIST = 17; - public static final int REQUEST_PICK_ACTIVITY = 18; - public static final int REQUEST_SETTINGS = 19; - public static final int REQUEST_OPEN_DOCUMENT = 20; - public static final int REQUEST_SWIPEBACK_ACTIVITY = 101; + int REQUEST_TAKE_PHOTO = 1; + int REQUEST_PICK_IMAGE = 2; + int REQUEST_SELECT_ACCOUNT = 3; + int REQUEST_COMPOSE = 4; + int REQUEST_EDIT_API = 5; + int REQUEST_BROWSER_SIGN_IN = 6; + int REQUEST_SET_COLOR = 7; + int REQUEST_SAVE_FILE = 8; + int REQUEST_EDIT_IMAGE = 9; + int REQUEST_EXTENSION_COMPOSE = 10; + int REQUEST_ADD_TAB = 11; + int REQUEST_EDIT_TAB = 12; + int REQUEST_PICK_FILE = 13; + int REQUEST_PICK_DIRECTORY = 14; + int REQUEST_ADD_TO_LIST = 15; + int REQUEST_SELECT_USER = 16; + int REQUEST_SELECT_USER_LIST = 17; + int REQUEST_PICK_ACTIVITY = 18; + int REQUEST_SETTINGS = 19; + int REQUEST_OPEN_DOCUMENT = 20; + int REQUEST_SWIPEBACK_ACTIVITY = 101; - public static final int TABLE_ID_ACCOUNTS = 1; - public static final int TABLE_ID_STATUSES = 12; - public static final int TABLE_ID_MENTIONS = 13; - public static final int TABLE_ID_DIRECT_MESSAGES = 21; - public static final int TABLE_ID_DIRECT_MESSAGES_INBOX = 22; - public static final int TABLE_ID_DIRECT_MESSAGES_OUTBOX = 23; - public static final int TABLE_ID_DIRECT_MESSAGES_CONVERSATION = 24; - public static final int TABLE_ID_DIRECT_MESSAGES_CONVERSATION_SCREEN_NAME = 25; - public static final int TABLE_ID_DIRECT_MESSAGES_CONVERSATIONS_ENTRIES = 26; - public static final int TABLE_ID_FILTERED_USERS = 31; - public static final int TABLE_ID_FILTERED_KEYWORDS = 32; - public static final int TABLE_ID_FILTERED_SOURCES = 33; - public static final int TABLE_ID_FILTERED_LINKS = 34; - public static final int TABLE_ID_TRENDS_LOCAL = 41; - public static final int TABLE_ID_SAVED_SEARCHES = 42; - public static final int TABLE_ID_SEARCH_HISTORY = 43; - public static final int TABLE_ID_DRAFTS = 51; - public static final int TABLE_ID_TABS = 52; - public static final int TABLE_ID_CACHED_USERS = 61; - public static final int TABLE_ID_CACHED_STATUSES = 62; - public static final int TABLE_ID_CACHED_HASHTAGS = 63; - public static final int TABLE_ID_CACHED_RELATIONSHIPS = 64; - public static final int VIRTUAL_TABLE_ID_DATABASE_READY = 100; - public static final int VIRTUAL_TABLE_ID_NOTIFICATIONS = 101; - public static final int VIRTUAL_TABLE_ID_PREFERENCES = 102; - public static final int VIRTUAL_TABLE_ID_ALL_PREFERENCES = 103; - public static final int VIRTUAL_TABLE_ID_PERMISSIONS = 104; - public static final int VIRTUAL_TABLE_ID_DNS = 105; - public static final int VIRTUAL_TABLE_ID_CACHED_IMAGES = 106; - public static final int VIRTUAL_TABLE_ID_CACHE_FILES = 107; - public static final int VIRTUAL_TABLE_ID_UNREAD_COUNTS = 108; - public static final int VIRTUAL_TABLE_ID_UNREAD_COUNTS_BY_TYPE = 109; - public static final int VIRTUAL_TABLE_ID_CACHED_USERS_WITH_RELATIONSHIP = 121; - public static final int VIRTUAL_TABLE_ID_CACHED_USERS_WITH_SCORE = 122; - public static final int VIRTUAL_TABLE_ID_DRAFTS_UNSENT = 131; + int TABLE_ID_ACCOUNTS = 1; + int TABLE_ID_STATUSES = 12; + int TABLE_ID_MENTIONS = 13; + int TABLE_ID_DIRECT_MESSAGES = 21; + int TABLE_ID_DIRECT_MESSAGES_INBOX = 22; + int TABLE_ID_DIRECT_MESSAGES_OUTBOX = 23; + int TABLE_ID_DIRECT_MESSAGES_CONVERSATION = 24; + int TABLE_ID_DIRECT_MESSAGES_CONVERSATION_SCREEN_NAME = 25; + int TABLE_ID_DIRECT_MESSAGES_CONVERSATIONS_ENTRIES = 26; + int TABLE_ID_FILTERED_USERS = 31; + int TABLE_ID_FILTERED_KEYWORDS = 32; + int TABLE_ID_FILTERED_SOURCES = 33; + int TABLE_ID_FILTERED_LINKS = 34; + int TABLE_ID_TRENDS_LOCAL = 41; + int TABLE_ID_SAVED_SEARCHES = 42; + int TABLE_ID_SEARCH_HISTORY = 43; + int TABLE_ID_DRAFTS = 51; + int TABLE_ID_TABS = 52; + int TABLE_ID_CACHED_USERS = 61; + int TABLE_ID_CACHED_STATUSES = 62; + int TABLE_ID_CACHED_HASHTAGS = 63; + int TABLE_ID_CACHED_RELATIONSHIPS = 64; + int VIRTUAL_TABLE_ID_DATABASE_READY = 100; + int VIRTUAL_TABLE_ID_NOTIFICATIONS = 101; + int VIRTUAL_TABLE_ID_PREFERENCES = 102; + int VIRTUAL_TABLE_ID_ALL_PREFERENCES = 103; + int VIRTUAL_TABLE_ID_PERMISSIONS = 104; + int VIRTUAL_TABLE_ID_DNS = 105; + int VIRTUAL_TABLE_ID_CACHED_IMAGES = 106; + int VIRTUAL_TABLE_ID_CACHE_FILES = 107; + int VIRTUAL_TABLE_ID_UNREAD_COUNTS = 108; + int VIRTUAL_TABLE_ID_UNREAD_COUNTS_BY_TYPE = 109; + int VIRTUAL_TABLE_ID_CACHED_USERS_WITH_RELATIONSHIP = 121; + int VIRTUAL_TABLE_ID_CACHED_USERS_WITH_SCORE = 122; + int VIRTUAL_TABLE_ID_DRAFTS_UNSENT = 131; - public static final int NOTIFICATION_ID_HOME_TIMELINE = 1; - public static final int NOTIFICATION_ID_MENTIONS_TIMELINE = 2; - public static final int NOTIFICATION_ID_DIRECT_MESSAGES = 3; - public static final int NOTIFICATION_ID_DRAFTS = 4; - public static final int NOTIFICATION_ID_DATA_PROFILING = 5; - public static final int NOTIFICATION_ID_UPDATE_STATUS = 101; - public static final int NOTIFICATION_ID_SEND_DIRECT_MESSAGE = 102; + int NOTIFICATION_ID_HOME_TIMELINE = 1; + int NOTIFICATION_ID_MENTIONS_TIMELINE = 2; + int NOTIFICATION_ID_DIRECT_MESSAGES = 3; + int NOTIFICATION_ID_DRAFTS = 4; + int NOTIFICATION_ID_DATA_PROFILING = 5; + int NOTIFICATION_ID_UPDATE_STATUS = 101; + 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"; - public static final String TASK_TAG_GET_MENTIONS = "get_mentions"; - public static final 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"; - public static final String TASK_TAG_GET_TRENDS = "get_trends"; - public static final String TASK_TAG_STORE_TRENDS = "store_trends"; + String TASK_TAG_GET_HOME_TIMELINE = "get_home_tomeline"; + String TASK_TAG_GET_MENTIONS = "get_mentions"; + String TASK_TAG_GET_SENT_DIRECT_MESSAGES = "get_sent_direct_messages"; + String TASK_TAG_GET_RECEIVED_DIRECT_MESSAGES = "get_received_direct_messages"; + String TASK_TAG_GET_TRENDS = "get_trends"; + String TASK_TAG_STORE_TRENDS = "store_trends"; - public static final String SERVICE_COMMAND_REFRESH_ALL = "refresh_all"; - public static final String SERVICE_COMMAND_GET_HOME_TIMELINE = "get_home_timeline"; - public static final String SERVICE_COMMAND_GET_MENTIONS = "get_mentions"; - public static final 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_REFRESH_ALL = "refresh_all"; + String SERVICE_COMMAND_GET_HOME_TIMELINE = "get_home_timeline"; + String SERVICE_COMMAND_GET_MENTIONS = "get_mentions"; + String SERVICE_COMMAND_GET_SENT_DIRECT_MESSAGES = "get_sent_direct_messages"; + String SERVICE_COMMAND_GET_RECEIVED_DIRECT_MESSAGES = "get_received_direct_messages"; - public static final String METADATA_KEY_EXTENSION = "org.mariotaku.twidere.extension"; - public static final String METADATA_KEY_EXTENSION_PERMISSIONS = "org.mariotaku.twidere.extension.permissions"; - public static final String METADATA_KEY_EXTENSION_SETTINGS = "org.mariotaku.twidere.extension.settings"; - public static final 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 = "org.mariotaku.twidere.extension"; + String METADATA_KEY_EXTENSION_PERMISSIONS = "org.mariotaku.twidere.extension.permissions"; + String METADATA_KEY_EXTENSION_SETTINGS = "org.mariotaku.twidere.extension.settings"; + String METADATA_KEY_EXTENSION_ICON = "org.mariotaku.twidere.extension.icon"; + String METADATA_KEY_EXTENSION_USE_JSON = "org.mariotaku.twidere.extension.use_json"; - public static final char SEPARATOR_PERMISSION = '|'; - public static final String SEPARATOR_PERMISSION_REGEX = "\\" + SEPARATOR_PERMISSION; + char SEPARATOR_PERMISSION = '|'; + String SEPARATOR_PERMISSION_REGEX = "\\" + SEPARATOR_PERMISSION; - public static final String PERMISSION_DENIED = "denied"; - public static final String PERMISSION_REFRESH = "refresh"; - public static final String PERMISSION_READ = "read"; - public static final String PERMISSION_WRITE = "write"; - public static final String PERMISSION_DIRECT_MESSAGES = "direct_messages"; - public static final String PERMISSION_ACCOUNTS = "accounts"; - public static final String PERMISSION_PREFERENCES = "preferences"; + String PERMISSION_DENIED = "denied"; + String PERMISSION_REFRESH = "refresh"; + String PERMISSION_READ = "read"; + String PERMISSION_WRITE = "write"; + String PERMISSION_DIRECT_MESSAGES = "direct_messages"; + String PERMISSION_ACCOUNTS = "accounts"; + String PERMISSION_PREFERENCES = "preferences"; - public static final String TAB_TYPE_HOME_TIMELINE = "home_timeline"; - public static final String TAB_TYPE_MENTIONS_TIMELINE = "mentions_timeline"; - public static final String TAB_TYPE_TRENDS_SUGGESTIONS = "trends_suggestions"; - public static final String TAB_TYPE_DIRECT_MESSAGES = "direct_messages"; - public static final String TAB_TYPE_FAVORITES = "favorites"; - public static final String TAB_TYPE_USER_TIMELINE = "user_timeline"; - public static final String TAB_TYPE_SEARCH_STATUSES = "search_statuses"; - public static final String TAB_TYPE_LIST_TIMELINE = "list_timeline"; - public static final String TAB_TYPE_ACTIVITIES_ABOUT_ME = "activities_about_me"; - public static final String TAB_TYPE_ACTIVITIES_BY_FRIENDS = "activities_by_friends"; - public static final String TAB_TYPE_RETWEETS_OF_ME = "retweets_of_me"; + String TAB_TYPE_HOME_TIMELINE = "home_timeline"; + String TAB_TYPE_MENTIONS_TIMELINE = "mentions_timeline"; + String TAB_TYPE_TRENDS_SUGGESTIONS = "trends_suggestions"; + String TAB_TYPE_DIRECT_MESSAGES = "direct_messages"; + String TAB_TYPE_FAVORITES = "favorites"; + String TAB_TYPE_USER_TIMELINE = "user_timeline"; + String TAB_TYPE_SEARCH_STATUSES = "search_statuses"; + String TAB_TYPE_LIST_TIMELINE = "list_timeline"; + String TAB_TYPE_ACTIVITIES_ABOUT_ME = "activities_about_me"; + String TAB_TYPE_ACTIVITIES_BY_FRIENDS = "activities_by_friends"; + String TAB_TYPE_RETWEETS_OF_ME = "retweets_of_me"; - public static final int TAB_CODE_HOME_TIMELINE = 1; - public static final int TAB_CODE_MENTIONS_TIMELINE = 2; - public static final int TAB_CODE_DIRECT_MESSAGES = 4; + int TAB_CODE_HOME_TIMELINE = 1; + int TAB_CODE_MENTIONS_TIMELINE = 2; + int TAB_CODE_DIRECT_MESSAGES = 4; - public static final int TWITTER_MAX_IMAGE_SIZE = 3145728; - public static final int TWITTER_MAX_IMAGE_WIDTH = 1024; - public static final int TWITTER_MAX_IMAGE_HEIGHT = 2048; + int TWITTER_MAX_IMAGE_SIZE = 3145728; + int TWITTER_MAX_IMAGE_WIDTH = 1024; + int TWITTER_MAX_IMAGE_HEIGHT = 2048; } diff --git a/twidere.component.common/src/main/java/org/mariotaku/twidere/constant/SharedPreferenceConstants.java b/twidere.component.common/src/main/java/org/mariotaku/twidere/constant/SharedPreferenceConstants.java index e4711c9f3..4b6aef789 100644 --- a/twidere.component.common/src/main/java/org/mariotaku/twidere/constant/SharedPreferenceConstants.java +++ b/twidere.component.common/src/main/java/org/mariotaku/twidere/constant/SharedPreferenceConstants.java @@ -250,9 +250,9 @@ public interface SharedPreferenceConstants { String KEY_NO_VERSION_SUFFIX = "no_version_suffix"; @Preference(type = INT, hasDefault = true, defaultInt = Accounts.AUTH_TYPE_OAUTH) 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"; - @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_SETTINGS_WIZARD_COMPLETED = "settings_wizard_completed"; @Preference(type = BOOLEAN, hasDefault = true, defaultBoolean = true) diff --git a/twidere.component.twitter4j/src/main/java/org/mariotaku/simplerestapi/RestClient.java b/twidere.component.twitter4j/src/main/java/org/mariotaku/simplerestapi/RestClient.java index afd1cb979..86a0ff779 100644 --- a/twidere.component.twitter4j/src/main/java/org/mariotaku/simplerestapi/RestClient.java +++ b/twidere.component.twitter4j/src/main/java/org/mariotaku/simplerestapi/RestClient.java @@ -15,4 +15,5 @@ public interface RestClient { Converter getConverter(); Authorization getAuthorization(); + } diff --git a/twidere.component.twitter4j/src/main/java/org/mariotaku/simplerestapi/http/RestHttpClient.java b/twidere.component.twitter4j/src/main/java/org/mariotaku/simplerestapi/http/RestHttpClient.java index 3218cfd8c..4c4a619db 100644 --- a/twidere.component.twitter4j/src/main/java/org/mariotaku/simplerestapi/http/RestHttpClient.java +++ b/twidere.component.twitter4j/src/main/java/org/mariotaku/simplerestapi/http/RestHttpClient.java @@ -1,5 +1,7 @@ package org.mariotaku.simplerestapi.http; +import android.support.annotation.NonNull; + import java.io.IOException; /** @@ -7,6 +9,7 @@ import java.io.IOException; */ public interface RestHttpClient { + @NonNull RestResponse execute(RestRequest request) throws IOException; } diff --git a/twidere.component.twitter4j/src/main/java/org/mariotaku/simplerestapi/http/RestRequest.java b/twidere.component.twitter4j/src/main/java/org/mariotaku/simplerestapi/http/RestRequest.java index 6520b38fe..9dc8bd11e 100644 --- a/twidere.component.twitter4j/src/main/java/org/mariotaku/simplerestapi/http/RestRequest.java +++ b/twidere.component.twitter4j/src/main/java/org/mariotaku/simplerestapi/http/RestRequest.java @@ -14,7 +14,7 @@ import java.util.List; /** * Created by mariotaku on 15/2/7. */ -public class RestRequest { +public final class RestRequest { private final String method; private final String url; @@ -104,6 +104,7 @@ public class RestRequest { RestRequest create(@NonNull Endpoint endpoint, @NonNull RestMethodInfo info, @Nullable Authorization authorization); } + public static final class DefaultFactory implements Factory { @Override diff --git a/twidere.component.twitter4j/src/main/java/twitter4j/TwitterFactory.java b/twidere.component.twitter4j/src/main/java/twitter4j/TwitterFactory.java index c8bc07731..cca3f7915 100644 --- a/twidere.component.twitter4j/src/main/java/twitter4j/TwitterFactory.java +++ b/twidere.component.twitter4j/src/main/java/twitter4j/TwitterFactory.java @@ -70,13 +70,6 @@ public final class TwitterFactory { private final Configuration conf; - /** - * Creates a TwitterFactory with the root configuration. - */ - public TwitterFactory() { - this(ConfigurationContext.getInstance()); - } - /** * Creates a TwitterFactory with the given configuration. * diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/APIEditorActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/support/APIEditorActivity.java index d8e10884c..7edd87db0 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/APIEditorActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/support/APIEditorActivity.java @@ -154,8 +154,8 @@ public class APIEditorActivity extends BaseSupportDialogActivity implements Twit 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 prefNoVersionSuffix = pref.getBoolean(KEY_NO_VERSION_SUFFIX, false); - final String prefConsumerKey = getNonEmptyString(pref, KEY_CONSUMER_KEY, TWITTER_CONSUMER_KEY_3); - final String prefConsumerSecret = getNonEmptyString(pref, KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET_3); + final String prefConsumerKey = getNonEmptyString(pref, KEY_CONSUMER_KEY, TWITTER_CONSUMER_KEY); + final String prefConsumerSecret = getNonEmptyString(pref, KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET); if (savedInstanceState != null) { apiUrlFormat = trim(savedInstanceState.getString(Accounts.API_URL_FORMAT, prefApiUrlFormat)); authType = savedInstanceState.getInt(Accounts.AUTH_TYPE, prefAuthType); diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/BrowserSignInActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/support/BrowserSignInActivity.java index d95edbad6..a97fa0c96 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/BrowserSignInActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/support/BrowserSignInActivity.java @@ -234,9 +234,9 @@ public class BrowserSignInActivity extends BaseSupportDialogActivity implements 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 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, - TWITTER_CONSUMER_SECRET_3); + TWITTER_CONSUMER_SECRET); cb.setHostAddressResolverFactory(new TwidereHostResolverFactory(mApplication)); Utils.setClientUserAgent(mActivity, consumerKey, consumerSecret, cb); cb.setRestBaseURL(DEFAULT_REST_BASE_URL); diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/SignInActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/support/SignInActivity.java index 00ed184d3..ac627756a 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/SignInActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/support/SignInActivity.java @@ -397,8 +397,8 @@ public class SignInActivity extends BaseAppCompatActivity implements TwitterCons cb.setSigningUploadBaseURL(DEFAULT_SIGNING_UPLOAD_BASE_URL); } if (isEmpty(mConsumerKey) || isEmpty(mConsumerSecret)) { - cb.setOAuthConsumerKey(TWITTER_CONSUMER_KEY_3); - cb.setOAuthConsumerSecret(TWITTER_CONSUMER_SECRET_3); + cb.setOAuthConsumerKey(TWITTER_CONSUMER_KEY); + cb.setOAuthConsumerSecret(TWITTER_CONSUMER_SECRET); } else { cb.setOAuthConsumerKey(mConsumerKey); 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 boolean sameOAuthSigningUrl = mPreferences.getBoolean(KEY_SAME_OAUTH_SIGNING_URL, 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 consumerSecret = getNonEmptyString(mPreferences, KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET_3); + final String consumerKey = getNonEmptyString(mPreferences, KEY_CONSUMER_KEY, TWITTER_CONSUMER_KEY); + final String consumerSecret = getNonEmptyString(mPreferences, KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET); if (isEmpty(mAPIUrlFormat) || defaultApiChanged) { mAPIUrlFormat = apiUrlFormat; } diff --git a/twidere/src/main/java/org/mariotaku/twidere/preference/DefaultAPIPreference.java b/twidere/src/main/java/org/mariotaku/twidere/preference/DefaultAPIPreference.java index 6b109c255..390595379 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/preference/DefaultAPIPreference.java +++ b/twidere/src/main/java/org/mariotaku/twidere/preference/DefaultAPIPreference.java @@ -102,8 +102,8 @@ public class DefaultAPIPreference extends DialogPreference implements Constants, 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 noVersionSuffix = pref.getBoolean(KEY_NO_VERSION_SUFFIX, false); - final String consumerKey = getNonEmptyString(pref, KEY_CONSUMER_KEY, TWITTER_CONSUMER_KEY_3); - final String consumerSecret = getNonEmptyString(pref, KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET_3); + final String consumerKey = getNonEmptyString(pref, KEY_CONSUMER_KEY, TWITTER_CONSUMER_KEY); + final String consumerSecret = getNonEmptyString(pref, KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET); 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 int prefAuthType = pref.getInt(KEY_AUTH_TYPE, Accounts.AUTH_TYPE_OAUTH); final boolean prefSameOAuthSigningUrl = pref.getBoolean(KEY_API_URL_FORMAT, false); - final String prefConsumerKey = getNonEmptyString(pref, KEY_CONSUMER_KEY, TWITTER_CONSUMER_KEY_3); - final String prefConsumerSecret = getNonEmptyString(pref, KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET_3); + final String prefConsumerKey = getNonEmptyString(pref, KEY_CONSUMER_KEY, TWITTER_CONSUMER_KEY); + final String prefConsumerSecret = getNonEmptyString(pref, KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET); final String apiUrlFormat = trim(savedInstanceState.getString(Accounts.API_URL_FORMAT, prefApiUrlFormat)); final int authType = savedInstanceState.getInt(Accounts.AUTH_TYPE, prefAuthType); final boolean sameOAuthSigningUrl = savedInstanceState.getBoolean(Accounts.SAME_OAUTH_SIGNING_URL, diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/TwitterAPIUtils.java b/twidere/src/main/java/org/mariotaku/twidere/util/TwitterAPIUtils.java index 4874255bb..ae76f15ef 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/TwitterAPIUtils.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/TwitterAPIUtils.java @@ -2,10 +2,16 @@ package org.mariotaku.twidere.util; import android.content.Context; import android.content.SharedPreferences; +import android.net.SSLCertificateSocketFactory; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.text.TextUtils; 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.RestHttpClient; import org.mariotaku.simplerestapi.http.RestRequest; @@ -24,26 +30,30 @@ import org.mariotaku.twidere.provider.TwidereDataStore; import org.mariotaku.twidere.util.net.TwidereHostResolverFactory; import java.io.IOException; +import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.Proxy; import java.net.SocketAddress; +import java.net.UnknownHostException; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.TimeUnit; import twitter4j.Twitter; import twitter4j.TwitterConstants; import twitter4j.TwitterFactory; import twitter4j.conf.Configuration; import twitter4j.conf.ConfigurationBuilder; -import twitter4j.http.HostAddressResolverFactory; +import twitter4j.http.HostAddressResolver; import static android.text.TextUtils.isEmpty; /** * 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, final String signUrl, final Authorization auth, final List> additionalHeaders) @@ -53,7 +63,7 @@ public class TwitterAPIUtils { RestResponse resp; RestRequest req = new RestRequest.Builder().method(GET.METHOD).url(url).headers(additionalHeaders).build(); resp = client.execute(req); - while (resp != null && Utils.isRedirected(resp.getStatus())) { + while (Utils.isRedirected(resp.getStatus())) { final String requestUrl = resp.getHeader("Location"); if (requestUrl == null) return null; if (urls.contains(requestUrl)) throw new IOException("Too many redirects"); @@ -82,8 +92,8 @@ public class TwitterAPIUtils { @Nullable public static Twitter getTwitterInstance(final Context context, final long accountId, - final boolean includeEntities, - final boolean includeRetweets) { + final boolean includeEntities, + final boolean includeRetweets) { return getTwitterInstance(context, accountId, includeEntities, includeRetweets, Twitter.class); } @@ -101,7 +111,7 @@ public class TwitterAPIUtils { private static Configuration getConfiguration(Context context, boolean includeEntities, boolean includeRetweets, ParcelableAccount.ParcelableCredentials credentials) { final TwidereApplication app = TwidereApplication.getInstance(context); 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 ignoreSslError = prefs.getBoolean(SharedPreferenceConstants.KEY_IGNORE_SSL_ERROR, false); final boolean enableProxy = prefs.getBoolean(SharedPreferenceConstants.KEY_ENABLE_PROXY, false); @@ -109,7 +119,7 @@ public class TwitterAPIUtils { // versions final ConfigurationBuilder cb = new ConfigurationBuilder(); cb.setHostAddressResolverFactory(new TwidereHostResolverFactory(app)); - cb.setHttpConnectionTimeout(connection_timeout); + cb.setHttpConnectionTimeout(connectionTimeout); cb.setGZIPEnabled(enableGzip); cb.setIgnoreSSLError(ignoreSslError); cb.setIncludeCards(true); @@ -153,8 +163,12 @@ public class TwitterAPIUtils { switch (credentials.auth_type) { case TwidereDataStore.Accounts.AUTH_TYPE_OAUTH: case TwidereDataStore.Accounts.AUTH_TYPE_XAUTH: { - return new OAuthAuthorization(credentials.consumer_key, credentials.consumer_secret, - new OAuthToken(credentials.oauth_token, credentials.oauth_token_secret)); + final String consumerKey = TextUtils.isEmpty(credentials.consumer_key) ? + 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: { final String screenName = credentials.screen_name; @@ -168,44 +182,52 @@ public class TwitterAPIUtils { 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) { if (context == null) return null; - final SharedPreferences prefs = context.getSharedPreferences(TwidereConstants.SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); - final int timeoutMillis = prefs.getInt(SharedPreferenceConstants.KEY_CONNECTION_TIMEOUT, 10000) * 1000; - final Proxy proxy = Utils.getProxy(context); - final String userAgent = TwidereApplication.getInstance(context).getDefaultUserAgent(); - final HostAddressResolverFactory resolverFactory = new TwidereHostResolverFactory( - TwidereApplication.getInstance(context)); - return getHttpClient(context, timeoutMillis, true, proxy, resolverFactory, userAgent, false); + final SharedPreferencesWrapper prefs = SharedPreferencesWrapper.getInstance(context, SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); + //TODO set user agent + TwidereApplication.getInstance(context).getDefaultUserAgent(); + return createHttpClient(context, prefs); } - public static RestHttpClient getImageLoaderHttpClient(final Context context) { - if (context == null) return null; - final SharedPreferences prefs = context.getSharedPreferences(TwidereConstants.SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); - final int timeoutMillis = prefs.getInt(SharedPreferenceConstants.KEY_CONNECTION_TIMEOUT, 10000) * 1000; - final Proxy proxy = Utils.getProxy(context); - final String userAgent = TwidereApplication.getInstance(context).getDefaultUserAgent(); - final HostAddressResolverFactory resolverFactory = new TwidereHostResolverFactory( - TwidereApplication.getInstance(context)); - return getHttpClient(context, timeoutMillis, true, proxy, resolverFactory, userAgent, false); + public static RestHttpClient createHttpClient(final Context context, final SharedPreferencesWrapper prefs) { + final int connectionTimeout = prefs.getInt(KEY_CONNECTION_TIMEOUT, 10); + final boolean ignoreSslError = prefs.getBoolean(KEY_IGNORE_SSL_ERROR, false); + final boolean enableProxy = prefs.getBoolean(KEY_ENABLE_PROXY, false); + + final OkHttpClient client = new OkHttpClient(); + client.setConnectTimeout(connectionTimeout, TimeUnit.SECONDS); + if (ignoreSslError) { + 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; } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/Utils.java b/twidere/src/main/java/org/mariotaku/twidere/util/Utils.java index 5a4542afe..33ec45717 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/Utils.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/Utils.java @@ -232,9 +232,6 @@ import java.io.InputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.lang.reflect.Field; -import java.net.InetSocketAddress; -import java.net.Proxy; -import java.net.SocketAddress; import java.net.URLEncoder; import java.nio.charset.Charset; import java.text.NumberFormat; @@ -2093,20 +2090,6 @@ public final class Utils implements Constants, TwitterConstants { 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) { if (context == null) return null; 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 // key for older // versions - final String prefConsumerKey = prefs.getString(KEY_CONSUMER_KEY, TWITTER_CONSUMER_KEY); - final String prefConsumerSecret = prefs.getString(KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET); + final String prefConsumerKey = prefs.getString(KEY_CONSUMER_KEY, TWITTER_CONSUMER_KEY_LEGACY); + final String prefConsumerSecret = prefs.getString(KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET_LEGACY); final ConfigurationBuilder cb = new ConfigurationBuilder(); if (!isEmpty(account.api_url_format)) { 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.setOAuthConsumerSecret(prefConsumerSecret); } else { - cb.setOAuthConsumerKey(TWITTER_CONSUMER_KEY); - cb.setOAuthConsumerSecret(TWITTER_CONSUMER_SECRET); + cb.setOAuthConsumerKey(TWITTER_CONSUMER_KEY_LEGACY); + cb.setOAuthConsumerSecret(TWITTER_CONSUMER_SECRET_LEGACY); } final Configuration conf = cb.build(); 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 // key for older // versions - final String prefConsumerKey = prefs.getString(KEY_CONSUMER_KEY, TWITTER_CONSUMER_KEY); - final String prefConsumerSecret = prefs.getString(KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET); + final String prefConsumerKey = prefs.getString(KEY_CONSUMER_KEY, TWITTER_CONSUMER_KEY_LEGACY); + final String prefConsumerSecret = prefs.getString(KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET_LEGACY); final ConfigurationBuilder cb = new ConfigurationBuilder(); final String apiUrlFormat = c.getString(c.getColumnIndex(Accounts.API_URL_FORMAT)); 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.setOAuthConsumerSecret(prefConsumerSecret); } else { - cb.setOAuthConsumerKey(TWITTER_CONSUMER_KEY); - cb.setOAuthConsumerSecret(TWITTER_CONSUMER_SECRET); + cb.setOAuthConsumerKey(TWITTER_CONSUMER_KEY_LEGACY); + cb.setOAuthConsumerSecret(TWITTER_CONSUMER_SECRET_LEGACY); } final Configuration conf = cb.build(); final String token = c.getString(c.getColumnIndexOrThrow(Accounts.OAUTH_TOKEN)); diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/content/TwidereSQLiteOpenHelper.java b/twidere/src/main/java/org/mariotaku/twidere/util/content/TwidereSQLiteOpenHelper.java index a6d626ca9..9b1f4f8c2 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/content/TwidereSQLiteOpenHelper.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/content/TwidereSQLiteOpenHelper.java @@ -201,8 +201,8 @@ public final class TwidereSQLiteOpenHelper extends SQLiteOpenHelper implements C .getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); // Here I use old consumer key/secret because it's default key for // older versions - final String pref_consumer_key = prefs.getString(KEY_CONSUMER_KEY, TWITTER_CONSUMER_KEY); - final String pref_consumer_secret = prefs.getString(KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET); + 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_LEGACY); values.put(Accounts.CONSUMER_KEY, trim(pref_consumer_key)); values.put(Accounts.CONSUMER_SECRET, trim(pref_consumer_secret)); db.update(Accounts.TABLE_NAME, values, null, null); diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/imageloader/TwidereImageDownloader.java b/twidere/src/main/java/org/mariotaku/twidere/util/imageloader/TwidereImageDownloader.java index 0934826eb..c47b12ef7 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/imageloader/TwidereImageDownloader.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/imageloader/TwidereImageDownloader.java @@ -44,6 +44,8 @@ import org.mariotaku.twidere.model.ParcelableAccount.ParcelableCredentials; import org.mariotaku.twidere.model.ParcelableMedia; import org.mariotaku.twidere.util.MediaPreviewUtils; 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 java.io.IOException; @@ -54,13 +56,6 @@ import java.util.Locale; 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 { private final Context mContext; @@ -85,7 +80,7 @@ public class TwidereImageDownloader extends BaseImageDownloader implements Const } public void reloadConnectivitySettings() { - mClient = getImageLoaderHttpClient(mContext); + mClient = TwitterAPIUtils.getDefaultHttpClient(mContext); mFastImageLoading = mPreferences.getBoolean(KEY_FAST_IMAGE_LOADING); if (mUseThumbor && mPreferences.getBoolean(KEY_THUMBOR_ENABLED)) { final String address = mPreferences.getString(KEY_THUMBOR_ADDRESS, null); @@ -112,7 +107,7 @@ public class TwidereImageDownloader extends BaseImageDownloader implements Const try { final String mediaUrl = media != null ? media.media_url : uriString; if (isTwitterProfileImage(uriString)) { - final String replaced = getTwitterProfileImageOfSize(mediaUrl, mTwitterProfileImageSize); + final String replaced = Utils.getTwitterProfileImageOfSize(mediaUrl, mTwitterProfileImageSize); return getStreamFromNetworkInternal(replaced, extras); } else return getStreamFromNetworkInternal(mediaUrl, extras); @@ -120,7 +115,7 @@ public class TwidereImageDownloader extends BaseImageDownloader implements Const final int statusCode = e.getStatusCode(); if (statusCode != -1 && isTwitterProfileImage(uriString) && !uriString.contains("_normal.")) { try { - return getStreamFromNetworkInternal(getNormalTwitterProfileImage(uriString), extras); + return getStreamFromNetworkInternal(Utils.getNormalTwitterProfileImage(uriString), extras); } catch (final TwitterException ignored) { } } @@ -159,7 +154,7 @@ public class TwidereImageDownloader extends BaseImageDownloader implements Const if (isTwitterAuthRequired(uri) && extras instanceof AccountExtra) { final AccountExtra accountExtra = (AccountExtra) extras; account = ParcelableAccount.getCredentials(mContext, accountExtra.account_id); - auth = getTwitterAuthorization(mContext, accountExtra.account_id); + auth = Utils.getTwitterAuthorization(mContext, accountExtra.account_id); } else { account = 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) { 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(); 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) { 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) { diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/net/TwidereHostAddressResolver.java b/twidere/src/main/java/org/mariotaku/twidere/util/net/TwidereHostAddressResolver.java index 5d5739182..68a39be58 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/net/TwidereHostAddressResolver.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/net/TwidereHostAddressResolver.java @@ -23,6 +23,7 @@ import android.content.Context; import android.content.SharedPreferences; import android.support.annotation.NonNull; import android.util.Log; +import android.util.LruCache; import org.apache.http.conn.util.InetAddressUtils; import org.mariotaku.twidere.Constants; @@ -46,14 +47,11 @@ import java.net.InetAddress; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Arrays; -import java.util.LinkedHashMap; import java.util.Map.Entry; import java.util.regex.Pattern; import twitter4j.http.HostAddressResolver; -import static android.text.TextUtils.isEmpty; - public class TwidereHostAddressResolver implements Constants, HostAddressResolver { 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 HostsFileParser mSystemHosts = new HostsFileParser(); - private final HostCache mHostCache = new HostCache(512); - private final boolean mLocalMappingOnly; + private final LruCache mHostCache = new LruCache<>(512); private final String mDnsAddress; private Resolver mDns; 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); mPreferences = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); final String address = mPreferences.getString(KEY_DNS_SERVER, DEFAULT_DNS_SERVER_ADDRESS); mDnsAddress = isValidIpAddress(address) ? address : DEFAULT_DNS_SERVER_ADDRESS; - mLocalMappingOnly = localOnly; } @SuppressWarnings("unused") @@ -91,15 +83,16 @@ public class TwidereHostAddressResolver implements Constants, HostAddressResolve return resolveInternal(host, host); } + @NonNull private InetAddress[] resolveInternal(String originalHost, String host) throws IOException { if (isValidIpAddress(host)) return fromAddressString(originalHost, host); // First, I'll try to load address cached. - if (mHostCache.containsKey(host)) { - final InetAddress[] hostAddr = mHostCache.get(host); + final InetAddress[] cachedHostAddr = mHostCache.get(host); + if (cachedHostAddr != null) { 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. // 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) { - if (isEmpty(address)) return false; return InetAddressUtils.isIPv4Address(address) || InetAddressUtils.isIPv6Address(address); } - private static class HostCache extends LinkedHashMap { - - 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); - } - } }