diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/AccentActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/AccentActivity.java index bdee78ea0..da56522dc 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/AccentActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/AccentActivity.java @@ -1,8 +1,8 @@ package org.mariotaku.twidere.activity; import android.app.Activity; +import android.content.Context; import android.content.res.Resources; -import android.support.v4.app.FragmentActivity; import com.negusoft.holoaccent.AccentHelper; import com.negusoft.holoaccent.AccentResources; @@ -15,8 +15,14 @@ import com.negusoft.holoaccent.AccentResources; */ public class AccentActivity extends Activity { - private final AccentHelper mAccentHelper = new AccentHelper(getOverrideAccentColor(), - getOverrideAccentColorDark(), getOverrideAccentColorActionBar(), new MyInitListener()); + private AccentHelper mAccentHelper; + + @Override + protected void attachBaseContext(Context newBase) { + super.attachBaseContext(newBase); + mAccentHelper = new AccentHelper(getOverrideAccentColor(), + getOverrideAccentColorDark(), getOverrideAccentColorActionBar(), new MyInitListener()); + } @Override public Resources getResources() { diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/BaseActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/BaseActivity.java index ccfff77a4..c306d6d04 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/BaseActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/BaseActivity.java @@ -39,7 +39,7 @@ public class BaseActivity extends BaseThemedActivity implements Constants { } @Override - public int getThemeColor() { + public int getOverrideAccentColor() { return ThemeUtils.getUserThemeColor(this); } diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/BasePreferenceActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/BasePreferenceActivity.java index e2c93ee50..06b7dde0d 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/BasePreferenceActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/BasePreferenceActivity.java @@ -99,7 +99,7 @@ public abstract class BasePreferenceActivity extends PreferenceActivity implemen } @Override - public int getThemeColor() { + public int getOverrideAccentColor() { return 0; } diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/BaseThemedActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/BaseThemedActivity.java index 888ec392d..cfea24c4d 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/BaseThemedActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/BaseThemedActivity.java @@ -93,7 +93,7 @@ public abstract class BaseThemedActivity extends AccentActivity implements IThem } @Override - public abstract int getThemeColor(); + public abstract int getOverrideAccentColor(); @Override public String getThemeFontFamily() { @@ -134,7 +134,7 @@ public abstract class BaseThemedActivity extends AccentActivity implements IThem } protected final boolean isThemeChanged() { - return getThemeResourceId() != mCurrentThemeResource || getThemeColor() != mCurrentThemeColor + return getThemeResourceId() != mCurrentThemeResource || getOverrideAccentColor() != mCurrentThemeColor || !CompareUtils.objectEquals(getThemeFontFamily(), mCurrentThemeFontFamily) || getThemeBackgroundAlpha() != mCurrentThemeBackgroundAlpha; } @@ -178,7 +178,7 @@ public abstract class BaseThemedActivity extends AccentActivity implements IThem private final void setTheme() { mCurrentThemeResource = getThemeResourceId(); - mCurrentThemeColor = getThemeColor(); + mCurrentThemeColor = getOverrideAccentColor(); mCurrentThemeFontFamily = getThemeFontFamily(); mCurrentThemeBackgroundAlpha = getThemeBackgroundAlpha(); ThemeUtils.notifyStatusBarColorChanged(this, mCurrentThemeResource, mCurrentThemeColor, diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/SettingsActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/SettingsActivity.java index 0b63dd3c0..63b5b55c7 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/SettingsActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/SettingsActivity.java @@ -51,248 +51,249 @@ import java.util.List; public class SettingsActivity extends BasePreferenceActivity { - private static long HEADER_ID_RESTORE_ICON = 1001; + private static long HEADER_ID_RESTORE_ICON = 1001; - private SharedPreferences mPreferences; - private PackageManager mPackageManager; + private SharedPreferences mPreferences; + private PackageManager mPackageManager; - private HeaderAdapter mAdapter; + private HeaderAdapter mAdapter; - private int mCurrentThemeColor, mCurrentThemeBackgroundAlpha; - private boolean mCompactCards, mPlainListStyle; + private int mCurrentThemeColor, mCurrentThemeBackgroundAlpha; + private boolean mCompactCards, mPlainListStyle; - private String mCurrentThemeFontFamily; + private String mCurrentThemeFontFamily; - private boolean mCurrentIsDarkDrawerEnabled; + private boolean mCurrentIsDarkDrawerEnabled; - @Override - public void finish() { - if (shouldNotifyThemeChange()) { - final Intent data = new Intent(); - data.putExtra(EXTRA_RESTART_ACTIVITY, true); - setResult(RESULT_OK, data); - } - super.finish(); - } + @Override + public void finish() { + if (shouldNotifyThemeChange()) { + final Intent data = new Intent(); + data.putExtra(EXTRA_RESTART_ACTIVITY, true); + setResult(RESULT_OK, data); + } + super.finish(); + } - public HeaderAdapter getHeaderAdapter() { - if (mAdapter != null) return mAdapter; - return mAdapter = new HeaderAdapter(ThemeUtils.getThemedContextForActionIcons(this, getThemeResourceId())); - } + public HeaderAdapter getHeaderAdapter() { + if (mAdapter != null) return mAdapter; + return mAdapter = new HeaderAdapter(ThemeUtils.getThemedContextForActionIcons(this, getThemeResourceId())); + } - @Override - public void onBuildHeaders(final List
target) { - loadHeadersFromResource(R.xml.settings_headers, target); - final HeaderAdapter adapter = getHeaderAdapter(); - adapter.clear(); - adapter.addAll(target); - final ComponentName main = new ComponentName(this, MainActivity.class); - if (mPackageManager.getComponentEnabledSetting(main) == PackageManager.COMPONENT_ENABLED_STATE_DISABLED) { - final Header restoreIconHeader = new Header(); - restoreIconHeader.titleRes = R.string.want_old_icon_back; - restoreIconHeader.title = getString(restoreIconHeader.titleRes); - restoreIconHeader.id = HEADER_ID_RESTORE_ICON; - restoreIconHeader.intent = getIntent(); - adapter.add(restoreIconHeader); - } - } + @Override + public void onBuildHeaders(final List
target) { + loadHeadersFromResource(R.xml.settings_headers, target); + final HeaderAdapter adapter = getHeaderAdapter(); + adapter.clear(); + adapter.addAll(target); + final ComponentName main = new ComponentName(this, MainActivity.class); + if (mPackageManager.getComponentEnabledSetting(main) == PackageManager.COMPONENT_ENABLED_STATE_DISABLED) { + final Header restoreIconHeader = new Header(); + restoreIconHeader.titleRes = R.string.want_old_icon_back; + restoreIconHeader.title = getString(restoreIconHeader.titleRes); + restoreIconHeader.id = HEADER_ID_RESTORE_ICON; + restoreIconHeader.intent = getIntent(); + adapter.add(restoreIconHeader); + } + } - @Override - public boolean onCreateOptionsMenu(final Menu menu, final TwidereMenuInflater inflater) { - if (getIntent().getStringExtra(EXTRA_SHOW_FRAGMENT) != null) return false; - inflater.inflate(R.menu.menu_settings, menu); - return true; - } + @Override + public boolean onCreateOptionsMenu(final Menu menu, final TwidereMenuInflater inflater) { + if (getIntent().getStringExtra(EXTRA_SHOW_FRAGMENT) != null) return false; + inflater.inflate(R.menu.menu_settings, menu); + return true; + } - @Override - public void onHeaderClick(final Header header, final int position) { - if (header.id == HEADER_ID_RESTORE_ICON) { - final ComponentName main = new ComponentName(this, MainActivity.class); - final ComponentName main2 = new ComponentName(this, MainHondaJOJOActivity.class); - mPackageManager.setComponentEnabledSetting(main, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, - PackageManager.DONT_KILL_APP); - mPackageManager.setComponentEnabledSetting(main2, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, - PackageManager.DONT_KILL_APP); - Toast.makeText(this, R.string.icon_restored_message, Toast.LENGTH_SHORT).show(); - finish(); - return; - } - super.onHeaderClick(header, position); - } + @Override + public void onHeaderClick(final Header header, final int position) { + if (header.id == HEADER_ID_RESTORE_ICON) { + final ComponentName main = new ComponentName(this, MainActivity.class); + final ComponentName main2 = new ComponentName(this, MainHondaJOJOActivity.class); + mPackageManager.setComponentEnabledSetting(main, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, + PackageManager.DONT_KILL_APP); + mPackageManager.setComponentEnabledSetting(main2, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, + PackageManager.DONT_KILL_APP); + Toast.makeText(this, R.string.icon_restored_message, Toast.LENGTH_SHORT).show(); + finish(); + return; + } + super.onHeaderClick(header, position); + } - @Override - public boolean onOptionsItemSelected(final MenuItem item) { - switch (item.getItemId()) { - case MENU_HOME: { - onBackPressed(); - return true; - } - case MENU_IMPORT_SETTINGS: { - final Intent intent = new Intent(this, DataImportActivity.class); - startActivity(intent); - return true; - } - case MENU_EXPORT_SETTINGS: { - final Intent intent = new Intent(this, DataExportActivity.class); - startActivity(intent); - return true; - } - } - return super.onOptionsItemSelected(item); - } + @Override + public boolean onOptionsItemSelected(final MenuItem item) { + switch (item.getItemId()) { + case MENU_HOME: { + onBackPressed(); + return true; + } + case MENU_IMPORT_SETTINGS: { + final Intent intent = new Intent(this, DataImportActivity.class); + startActivity(intent); + return true; + } + case MENU_EXPORT_SETTINGS: { + final Intent intent = new Intent(this, DataExportActivity.class); + startActivity(intent); + return true; + } + } + return super.onOptionsItemSelected(item); + } - @Override - public void setListAdapter(final ListAdapter adapter) { - if (adapter == null) { - super.setListAdapter(null); - } else { - super.setListAdapter(getHeaderAdapter()); - } - } + @Override + public void setListAdapter(final ListAdapter adapter) { + if (adapter == null) { + super.setListAdapter(null); + } else { + super.setListAdapter(getHeaderAdapter()); + } + } - @Override - public void switchToHeader(final Header header) { - if (header == null || header.fragment == null && header.intent == null) return; - super.switchToHeader(header); - } + @Override + public void switchToHeader(final Header header) { + if (header == null || header.fragment == null && header.intent == null) return; + super.switchToHeader(header); + } - @Override - public void switchToHeader(final String fragmentName, final Bundle args) { - if (fragmentName == null) return; - super.switchToHeader(fragmentName, args); - } + @Override + public void switchToHeader(final String fragmentName, final Bundle args) { + if (fragmentName == null) return; + super.switchToHeader(fragmentName, args); + } - @Override - protected boolean isValidFragment(final String fragmentName) { - final Class cls; - try { - cls = Class.forName(fragmentName); - } catch (final ClassNotFoundException e) { - return false; - } - return Fragment.class.isAssignableFrom(cls); - } + @Override + protected boolean isValidFragment(final String fragmentName) { + final Class cls; + try { + cls = Class.forName(fragmentName); + } catch (final ClassNotFoundException e) { + return false; + } + return Fragment.class.isAssignableFrom(cls); + } - @Override - protected void onCreate(final Bundle savedInstanceState) { - mPackageManager = getPackageManager(); - mPreferences = getSharedPreferences(SHARED_PREFERENCES_NAME, MODE_PRIVATE); - mCompactCards = mPreferences.getBoolean(KEY_COMPACT_CARDS, false); - mPlainListStyle = mPreferences.getBoolean(KEY_PLAIN_LIST_STYLE, false); - mCurrentThemeColor = getThemeColor(); - mCurrentThemeFontFamily = getThemeFontFamily(); - mCurrentThemeBackgroundAlpha = getThemeBackgroundAlpha(); - mCurrentIsDarkDrawerEnabled = isDarkDrawerEnabled(); - super.onCreate(savedInstanceState); - setIntent(getIntent().addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)); - final ActionBar actionBar = getActionBar(); - actionBar.setDisplayHomeAsUpEnabled(true); - if (savedInstanceState != null) { - invalidateHeaders(); - } - } + @Override + protected void onCreate(final Bundle savedInstanceState) { + mPackageManager = getPackageManager(); + mPreferences = getSharedPreferences(SHARED_PREFERENCES_NAME, MODE_PRIVATE); + mCompactCards = mPreferences.getBoolean(KEY_COMPACT_CARDS, false); + mPlainListStyle = mPreferences.getBoolean(KEY_PLAIN_LIST_STYLE, false); + mCurrentThemeColor = getOverrideAccentColor(); + mCurrentThemeFontFamily = getThemeFontFamily(); + mCurrentThemeBackgroundAlpha = getThemeBackgroundAlpha(); + mCurrentIsDarkDrawerEnabled = isDarkDrawerEnabled(); + super.onCreate(savedInstanceState); + setIntent(getIntent().addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)); + final ActionBar actionBar = getActionBar(); + actionBar.setDisplayHomeAsUpEnabled(true); + if (savedInstanceState != null) { + invalidateHeaders(); + } + } - private boolean shouldNotifyThemeChange() { - return mCompactCards != mPreferences.getBoolean(KEY_COMPACT_CARDS, false) - || mPlainListStyle != mPreferences.getBoolean(KEY_PLAIN_LIST_STYLE, false) - || getThemeResourceId() != getCurrentThemeResourceId() || getThemeColor() != mCurrentThemeColor - || !CompareUtils.objectEquals(getThemeFontFamily(), mCurrentThemeFontFamily) - || getThemeBackgroundAlpha() != mCurrentThemeBackgroundAlpha - || isDarkDrawerEnabled() != mCurrentIsDarkDrawerEnabled; - } + private boolean shouldNotifyThemeChange() { + return mCompactCards != mPreferences.getBoolean(KEY_COMPACT_CARDS, false) + || mPlainListStyle != mPreferences.getBoolean(KEY_PLAIN_LIST_STYLE, false) + || getThemeResourceId() != getCurrentThemeResourceId() + || ThemeUtils.getUserThemeColor(this) != mCurrentThemeColor + || !CompareUtils.objectEquals(getThemeFontFamily(), mCurrentThemeFontFamily) + || getThemeBackgroundAlpha() != mCurrentThemeBackgroundAlpha + || isDarkDrawerEnabled() != mCurrentIsDarkDrawerEnabled; + } - private static class HeaderAdapter extends ArrayAdapter
{ + private static class HeaderAdapter extends ArrayAdapter
{ - static final int HEADER_TYPE_CATEGORY = 0; - static final int HEADER_TYPE_NORMAL = 1; + static final int HEADER_TYPE_CATEGORY = 0; + static final int HEADER_TYPE_NORMAL = 1; - private final Context mContext; - private final Resources mResources; + private final Context mContext; + private final Resources mResources; - public HeaderAdapter(final Context context) { - super(context, R.layout.list_item_preference_header); - mContext = context; - mResources = context.getResources(); - } + public HeaderAdapter(final Context context) { + super(context, R.layout.list_item_preference_header); + mContext = context; + mResources = context.getResources(); + } - @Override - public boolean areAllItemsEnabled() { - return false; - } + @Override + public boolean areAllItemsEnabled() { + return false; + } - @Override - public int getItemViewType(final int position) { - final Header header = getItem(position); - return getHeaderType(header); - } + @Override + public int getItemViewType(final int position) { + final Header header = getItem(position); + return getHeaderType(header); + } - @Override - public View getView(final int position, final View convertView, final ViewGroup parent) { - final Header header = getItem(position); - final int viewType = getHeaderType(header); - final View view; - switch (viewType) { - case HEADER_TYPE_CATEGORY: { - view = new TextView(mContext, null, android.R.attr.listSeparatorTextViewStyle); - ((TextView) view).setText(header.getTitle(mResources)); - break; - } - default: { - final boolean viewChanged = convertView != null - && !(convertView.getTag() instanceof HeaderViewHolder); - view = super.getView(position, viewChanged ? null : convertView, parent); - final HeaderViewHolder holder; - final Object tag = view.getTag(); - if (tag instanceof HeaderViewHolder) { - holder = (HeaderViewHolder) tag; - } else { - holder = new HeaderViewHolder(view); - view.setTag(holder); - } - final CharSequence title = header.getTitle(mResources); - holder.title.setText(title); - final CharSequence summary = header.getSummary(mResources); - if (!TextUtils.isEmpty(summary)) { - holder.summary.setVisibility(View.VISIBLE); - holder.summary.setText(summary); - } else { - holder.summary.setVisibility(View.GONE); - } - if (header.iconRes != 0) { - holder.icon.setImageDrawable(mResources.getDrawable(header.iconRes)); - } else { - holder.icon.setImageDrawable(null); - } - break; - } - } - return view; - } + @Override + public View getView(final int position, final View convertView, final ViewGroup parent) { + final Header header = getItem(position); + final int viewType = getHeaderType(header); + final View view; + switch (viewType) { + case HEADER_TYPE_CATEGORY: { + view = new TextView(mContext, null, android.R.attr.listSeparatorTextViewStyle); + ((TextView) view).setText(header.getTitle(mResources)); + break; + } + default: { + final boolean viewChanged = convertView != null + && !(convertView.getTag() instanceof HeaderViewHolder); + view = super.getView(position, viewChanged ? null : convertView, parent); + final HeaderViewHolder holder; + final Object tag = view.getTag(); + if (tag instanceof HeaderViewHolder) { + holder = (HeaderViewHolder) tag; + } else { + holder = new HeaderViewHolder(view); + view.setTag(holder); + } + final CharSequence title = header.getTitle(mResources); + holder.title.setText(title); + final CharSequence summary = header.getSummary(mResources); + if (!TextUtils.isEmpty(summary)) { + holder.summary.setVisibility(View.VISIBLE); + holder.summary.setText(summary); + } else { + holder.summary.setVisibility(View.GONE); + } + if (header.iconRes != 0) { + holder.icon.setImageDrawable(mResources.getDrawable(header.iconRes)); + } else { + holder.icon.setImageDrawable(null); + } + break; + } + } + return view; + } - @Override - public boolean isEnabled(final int position) { - return getItemViewType(position) != HEADER_TYPE_CATEGORY; - } + @Override + public boolean isEnabled(final int position) { + return getItemViewType(position) != HEADER_TYPE_CATEGORY; + } - private static int getHeaderType(final Header header) { - if (header.fragment == null && header.intent == null) - return HEADER_TYPE_CATEGORY; - else - return HEADER_TYPE_NORMAL; - } + private static int getHeaderType(final Header header) { + if (header.fragment == null && header.intent == null) + return HEADER_TYPE_CATEGORY; + else + return HEADER_TYPE_NORMAL; + } - private static class HeaderViewHolder extends ViewHolder { - private final TextView title, summary; - private final ImageView icon; + private static class HeaderViewHolder extends ViewHolder { + private final TextView title, summary; + private final ImageView icon; - HeaderViewHolder(final View view) { - super(view); - title = (TextView) findViewById(android.R.id.title); - summary = (TextView) findViewById(android.R.id.summary); - icon = (ImageView) findViewById(android.R.id.icon); - } - } + HeaderViewHolder(final View view) { + super(view); + title = (TextView) findViewById(android.R.id.title); + summary = (TextView) findViewById(android.R.id.summary); + icon = (ImageView) findViewById(android.R.id.icon); + } + } - } + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/TwitterLinkHandlerActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/TwitterLinkHandlerActivity.java index 5492b2de1..2755f5a3b 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/TwitterLinkHandlerActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/TwitterLinkHandlerActivity.java @@ -1,7 +1,5 @@ package org.mariotaku.twidere.activity; -import static org.mariotaku.twidere.util.Utils.getDefaultAccountId; - import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; @@ -20,174 +18,219 @@ import org.mariotaku.twidere.util.Utils; import java.util.List; +import static org.mariotaku.twidere.util.Utils.getDefaultAccountId; + public class TwitterLinkHandlerActivity extends Activity implements Constants { - public static final String[] TWITTER_RESERVED_PATHS = { "about", "account", "accounts", "activity", "all", - "announcements", "anywhere", "api_rules", "api_terms", "apirules", "apps", "auth", "badges", "blog", - "business", "buttons", "contacts", "devices", "direct_messages", "download", "downloads", - "edit_announcements", "faq", "favorites", "find_sources", "find_users", "followers", "following", - "friend_request", "friendrequest", "friends", "goodies", "help", "home", "im_account", "inbox", - "invitations", "invite", "jobs", "list", "login", "logo", "logout", "me", "mentions", "messages", - "mockview", "newtwitter", "notifications", "nudge", "oauth", "phoenix_search", "positions", "privacy", - "public_timeline", "related_tweets", "replies", "retweeted_of_mine", "retweets", "retweets_by_others", - "rules", "saved_searches", "search", "sent", "settings", "share", "signup", "signin", "similar_to", - "statistics", "terms", "tos", "translate", "trends", "tweetbutton", "twttr", "update_discoverability", - "users", "welcome", "who_to_follow", "widgets", "zendesk_auth", "media_signup" }; + public static final String[] TWITTER_RESERVED_PATHS = {"about", "account", "accounts", "activity", "all", + "announcements", "anywhere", "api_rules", "api_terms", "apirules", "apps", "auth", "badges", "blog", + "business", "buttons", "contacts", "devices", "direct_messages", "download", "downloads", + "edit_announcements", "faq", "favorites", "find_sources", "find_users", "followers", "following", + "friend_request", "friendrequest", "friends", "goodies", "help", "home", "im_account", "inbox", + "invitations", "invite", "jobs", "list", "login", "logo", "logout", "me", "mentions", "messages", + "mockview", "newtwitter", "notifications", "nudge", "oauth", "phoenix_search", "positions", "privacy", + "public_timeline", "related_tweets", "replies", "retweeted_of_mine", "retweets", "retweets_by_others", + "rules", "saved_searches", "search", "sent", "settings", "share", "signup", "signin", "similar_to", + "statistics", "terms", "tos", "translate", "trends", "tweetbutton", "twttr", "update_discoverability", + "users", "welcome", "who_to_follow", "widgets", "zendesk_auth", "media_signup"}; - private static final UriMatcher URI_MATCHER = new UriMatcher(UriMatcher.NO_MATCH); + private static final UriMatcher URI_MATCHER = new UriMatcher(UriMatcher.NO_MATCH); - private static final String AUTHORITY_TWITTER_COM = "twitter.com"; + private static final String AUTHORITY_TWITTER_COM = "twitter.com"; - private static final int URI_CODE_TWITTER_STATUS = 1; - private static final int URI_CODE_TWITTER_USER = 2; - private static final int URI_CODE_TWITTER_USER_FOLLOWING = 11; - private static final int URI_CODE_TWITTER_USER_FOLLOWERS = 12; - private static final int URI_CODE_TWITTER_USER_FAVORITES = 13; - private static final int URI_CODE_TWITTER_INTENT_TWEET = 101; - private static final int URI_CODE_TWITTER_REDIRECT = 201; + private static final int URI_CODE_TWITTER_STATUS = 1; + private static final int URI_CODE_TWITTER_USER = 2; + private static final int URI_CODE_TWITTER_USER_FOLLOWING = 11; + private static final int URI_CODE_TWITTER_USER_FOLLOWERS = 12; + private static final int URI_CODE_TWITTER_USER_FAVORITES = 13; + private static final int URI_CODE_TWITTER_USER_LIST = 14; + private static final int URI_CODE_TWITTER_USER_LIST_MEMBERS = 41; + private static final int URI_CODE_TWITTER_USER_LIST_SUBSCRIBERS = 42; + private static final int URI_CODE_TWITTER_INTENT_TWEET = 101; + private static final int URI_CODE_TWITTER_REDIRECT = 201; - static { - URI_MATCHER.addURI(AUTHORITY_TWITTER_COM, "/i/redirect", URI_CODE_TWITTER_REDIRECT); - URI_MATCHER.addURI(AUTHORITY_TWITTER_COM, "/intent/tweet", URI_CODE_TWITTER_INTENT_TWEET); - URI_MATCHER.addURI(AUTHORITY_TWITTER_COM, "/*/status/#", URI_CODE_TWITTER_STATUS); - URI_MATCHER.addURI(AUTHORITY_TWITTER_COM, "/*/status/#/photo/#", URI_CODE_TWITTER_STATUS); - URI_MATCHER.addURI(AUTHORITY_TWITTER_COM, "/*", URI_CODE_TWITTER_USER); - URI_MATCHER.addURI(AUTHORITY_TWITTER_COM, "/*/following", URI_CODE_TWITTER_USER_FOLLOWING); - URI_MATCHER.addURI(AUTHORITY_TWITTER_COM, "/*/followers", URI_CODE_TWITTER_USER_FOLLOWERS); - URI_MATCHER.addURI(AUTHORITY_TWITTER_COM, "/*/favorites", URI_CODE_TWITTER_USER_FAVORITES); - } - private SharedPreferences mPreferences; - private PackageManager mPackageManager; + static { + URI_MATCHER.addURI(AUTHORITY_TWITTER_COM, "/i/redirect", URI_CODE_TWITTER_REDIRECT); + URI_MATCHER.addURI(AUTHORITY_TWITTER_COM, "/intent/tweet", URI_CODE_TWITTER_INTENT_TWEET); + URI_MATCHER.addURI(AUTHORITY_TWITTER_COM, "/*/status/#", URI_CODE_TWITTER_STATUS); + URI_MATCHER.addURI(AUTHORITY_TWITTER_COM, "/*/status/#/photo/#", URI_CODE_TWITTER_STATUS); + URI_MATCHER.addURI(AUTHORITY_TWITTER_COM, "/*", URI_CODE_TWITTER_USER); + URI_MATCHER.addURI(AUTHORITY_TWITTER_COM, "/*/following", URI_CODE_TWITTER_USER_FOLLOWING); + URI_MATCHER.addURI(AUTHORITY_TWITTER_COM, "/*/followers", URI_CODE_TWITTER_USER_FOLLOWERS); + URI_MATCHER.addURI(AUTHORITY_TWITTER_COM, "/*/favorites", URI_CODE_TWITTER_USER_FAVORITES); + URI_MATCHER.addURI(AUTHORITY_TWITTER_COM, "/*/*", URI_CODE_TWITTER_USER_LIST); + URI_MATCHER.addURI(AUTHORITY_TWITTER_COM, "/*/*/members", URI_CODE_TWITTER_USER_LIST_MEMBERS); + URI_MATCHER.addURI(AUTHORITY_TWITTER_COM, "/*/*/subscribers", URI_CODE_TWITTER_USER_LIST_MEMBERS); + } - @Override - protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) { - switch (requestCode) { - case REQUEST_PICK_ACTIVITY: { - if (resultCode != RESULT_OK || data == null || !data.hasExtra(EXTRA_DATA) - || !data.hasExtra(EXTRA_INTENT)) { - finish(); - return; - } - final ResolveInfo resolveInfo = data.getParcelableExtra(EXTRA_DATA); - final Intent extraIntent = data.getParcelableExtra(EXTRA_INTENT); - final ActivityInfo activityInfo = resolveInfo.activityInfo; - if (activityInfo == null) { - finish(); - return; - } - final SharedPreferences.Editor editor = mPreferences.edit(); - editor.putString(KEY_FALLBACK_TWITTER_LINK_HANDLER, activityInfo.packageName); - editor.apply(); - final Intent intent = new Intent(Intent.ACTION_VIEW, extraIntent.getData()); - intent.setClassName(activityInfo.packageName, activityInfo.name); - startActivity(intent); - finish(); - return; - } - } - } + private SharedPreferences mPreferences; + private PackageManager mPackageManager; - @Override - protected void onCreate(final Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - mPackageManager = getPackageManager(); - mPreferences = getSharedPreferences(SHARED_PREFERENCES_NAME, MODE_PRIVATE); - final Intent intent = getIntent(); - final Uri data = intent.getData(); - if (data == null) { - finish(); - return; - } - final Uri uri = data.buildUpon().authority(AUTHORITY_TWITTER_COM).build(); - final Intent handledIntent = getHandledIntent(uri); - if (handledIntent != null) { - startActivity(handledIntent); - } else { - final String packageName = mPreferences.getString(KEY_FALLBACK_TWITTER_LINK_HANDLER, null); - final Intent fallbackIntent = new Intent(Intent.ACTION_VIEW, uri); - fallbackIntent.setPackage(packageName); - if (TextUtils.isEmpty(packageName) || mPackageManager.queryIntentActivities(fallbackIntent, 0).isEmpty()) { - final Intent pickIntent = new Intent(INTENT_ACTION_PICK_ACTIVITY); - pickIntent.putExtra(EXTRA_INTENT, new Intent(Intent.ACTION_VIEW, uri)); - pickIntent.putExtra(EXTRA_BLACKLIST, new String[] { getPackageName() }); - startActivityForResult(pickIntent, REQUEST_PICK_ACTIVITY); - return; - } else { - startActivity(fallbackIntent); - } - } - finish(); - } + @Override + protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) { + switch (requestCode) { + case REQUEST_PICK_ACTIVITY: { + if (resultCode != RESULT_OK || data == null || !data.hasExtra(EXTRA_DATA) + || !data.hasExtra(EXTRA_INTENT)) { + finish(); + return; + } + final ResolveInfo resolveInfo = data.getParcelableExtra(EXTRA_DATA); + final Intent extraIntent = data.getParcelableExtra(EXTRA_INTENT); + final ActivityInfo activityInfo = resolveInfo.activityInfo; + if (activityInfo == null) { + finish(); + return; + } + final SharedPreferences.Editor editor = mPreferences.edit(); + editor.putString(KEY_FALLBACK_TWITTER_LINK_HANDLER, activityInfo.packageName); + editor.apply(); + final Intent intent = new Intent(Intent.ACTION_VIEW, extraIntent.getData()); + intent.setClassName(activityInfo.packageName, activityInfo.name); + startActivity(intent); + finish(); + return; + } + } + } - private Intent getHandledIntent(final Uri uri) { - final List pathSegments = uri.getPathSegments(); - switch (URI_MATCHER.match(uri)) { - case URI_CODE_TWITTER_STATUS: { - final Uri.Builder builder = new Uri.Builder(); - builder.scheme(SCHEME_TWIDERE); - builder.authority(AUTHORITY_STATUS); - builder.appendQueryParameter(QUERY_PARAM_STATUS_ID, pathSegments.get(2)); - return new Intent(Intent.ACTION_VIEW, builder.build()); - } - case URI_CODE_TWITTER_INTENT_TWEET: { - final Intent handledIntent = new Intent(this, ComposeActivity.class); - handledIntent.setAction(Intent.ACTION_SEND); - final String text = uri.getQueryParameter("text"); - final String url = uri.getQueryParameter("url"); - handledIntent.putExtra(Intent.EXTRA_TEXT, Utils.getShareStatus(this, text, url)); - return handledIntent; - } - case URI_CODE_TWITTER_USER: { - final String pathSegment = pathSegments.get(0); - final Uri.Builder builder = new Uri.Builder(); - builder.scheme(SCHEME_TWIDERE); - if ("share".equals(pathSegment)) { - final Intent handledIntent = new Intent(this, ComposeActivity.class); - handledIntent.setAction(Intent.ACTION_SEND); - final String text = uri.getQueryParameter("text"); - final String url = uri.getQueryParameter("url"); - handledIntent.putExtra(Intent.EXTRA_TEXT, Utils.getShareStatus(this, text, url)); - return handledIntent; - } else if ("following".equals(pathSegment)) { - builder.authority(AUTHORITY_USER_FRIENDS); - builder.appendQueryParameter(QUERY_PARAM_USER_ID, String.valueOf(getDefaultAccountId(this))); - } else if ("followers".equals(pathSegment)) { - builder.authority(AUTHORITY_USER_FOLLOWERS); - builder.appendQueryParameter(QUERY_PARAM_USER_ID, String.valueOf(getDefaultAccountId(this))); - } else if ("favorites".equals(pathSegment)) { - builder.authority(AUTHORITY_USER_FAVORITES); - builder.appendQueryParameter(QUERY_PARAM_USER_ID, String.valueOf(getDefaultAccountId(this))); - } else if (!ArrayUtils.contains(TWITTER_RESERVED_PATHS, pathSegment)) { - builder.authority(AUTHORITY_USER); - builder.appendQueryParameter(QUERY_PARAM_SCREEN_NAME, pathSegment); - } else - return null; - return new Intent(Intent.ACTION_VIEW, builder.build()); - } - case URI_CODE_TWITTER_USER_FOLLOWING: { - final Uri.Builder builder = new Uri.Builder(); - builder.scheme(SCHEME_TWIDERE); - builder.authority(AUTHORITY_USER_FRIENDS); - builder.appendQueryParameter(QUERY_PARAM_SCREEN_NAME, pathSegments.get(0)); - return new Intent(Intent.ACTION_VIEW, builder.build()); - } - case URI_CODE_TWITTER_USER_FOLLOWERS: { - final Uri.Builder builder = new Uri.Builder(); - builder.scheme(SCHEME_TWIDERE); - builder.authority(AUTHORITY_USER_FOLLOWERS); - builder.appendQueryParameter(QUERY_PARAM_SCREEN_NAME, pathSegments.get(0)); - return new Intent(Intent.ACTION_VIEW, builder.build()); - } - case URI_CODE_TWITTER_USER_FAVORITES: { - final Uri.Builder builder = new Uri.Builder(); - builder.scheme(SCHEME_TWIDERE); - builder.authority(AUTHORITY_USER_FAVORITES); - builder.appendQueryParameter(QUERY_PARAM_SCREEN_NAME, pathSegments.get(0)); - return new Intent(Intent.ACTION_VIEW, builder.build()); - } - } - return null; - } + @Override + protected void onCreate(final Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mPackageManager = getPackageManager(); + mPreferences = getSharedPreferences(SHARED_PREFERENCES_NAME, MODE_PRIVATE); + final Intent intent = getIntent(); + final Uri data = intent.getData(); + if (data == null) { + finish(); + return; + } + final Uri uri = data.buildUpon().authority(AUTHORITY_TWITTER_COM).build(); + final Intent handledIntent = getHandledIntent(uri); + if (handledIntent != null) { + startActivity(handledIntent); + } else { + final String packageName = mPreferences.getString(KEY_FALLBACK_TWITTER_LINK_HANDLER, null); + final Intent fallbackIntent = new Intent(Intent.ACTION_VIEW, uri); + fallbackIntent.setPackage(packageName); + if (TextUtils.isEmpty(packageName) || mPackageManager.queryIntentActivities(fallbackIntent, 0).isEmpty()) { + final Intent pickIntent = new Intent(INTENT_ACTION_PICK_ACTIVITY); + pickIntent.putExtra(EXTRA_INTENT, new Intent(Intent.ACTION_VIEW, uri)); + pickIntent.putExtra(EXTRA_BLACKLIST, new String[]{getPackageName()}); + startActivityForResult(pickIntent, REQUEST_PICK_ACTIVITY); + return; + } else { + startActivity(fallbackIntent); + } + } + finish(); + } + + private Intent getHandledIntent(final Uri uri) { + final List pathSegments = uri.getPathSegments(); + switch (URI_MATCHER.match(uri)) { + case URI_CODE_TWITTER_STATUS: { + final Uri.Builder builder = new Uri.Builder(); + builder.scheme(SCHEME_TWIDERE); + builder.authority(AUTHORITY_STATUS); + builder.appendQueryParameter(QUERY_PARAM_STATUS_ID, pathSegments.get(2)); + return new Intent(Intent.ACTION_VIEW, builder.build()); + } + case URI_CODE_TWITTER_INTENT_TWEET: { + final Intent handledIntent = new Intent(this, ComposeActivity.class); + handledIntent.setAction(Intent.ACTION_SEND); + final String text = uri.getQueryParameter("text"); + final String url = uri.getQueryParameter("url"); + handledIntent.putExtra(Intent.EXTRA_TEXT, Utils.getShareStatus(this, text, url)); + return handledIntent; + } + case URI_CODE_TWITTER_USER: { + final String pathSegment = pathSegments.get(0); + final Uri.Builder builder = new Uri.Builder(); + builder.scheme(SCHEME_TWIDERE); + if ("share".equals(pathSegment)) { + final Intent handledIntent = new Intent(this, ComposeActivity.class); + handledIntent.setAction(Intent.ACTION_SEND); + final String text = uri.getQueryParameter("text"); + final String url = uri.getQueryParameter("url"); + handledIntent.putExtra(Intent.EXTRA_TEXT, Utils.getShareStatus(this, text, url)); + return handledIntent; + } else if ("following".equals(pathSegment)) { + builder.authority(AUTHORITY_USER_FRIENDS); + builder.appendQueryParameter(QUERY_PARAM_USER_ID, String.valueOf(getDefaultAccountId(this))); + } else if ("followers".equals(pathSegment)) { + builder.authority(AUTHORITY_USER_FOLLOWERS); + builder.appendQueryParameter(QUERY_PARAM_USER_ID, String.valueOf(getDefaultAccountId(this))); + } else if ("favorites".equals(pathSegment)) { + builder.authority(AUTHORITY_USER_FAVORITES); + builder.appendQueryParameter(QUERY_PARAM_USER_ID, String.valueOf(getDefaultAccountId(this))); + } else if (!ArrayUtils.contains(TWITTER_RESERVED_PATHS, pathSegment)) { + builder.authority(AUTHORITY_USER); + builder.appendQueryParameter(QUERY_PARAM_SCREEN_NAME, pathSegment); + } else + return null; + return new Intent(Intent.ACTION_VIEW, builder.build()); + } + case URI_CODE_TWITTER_USER_FOLLOWING: { + final Uri.Builder builder = new Uri.Builder(); + builder.scheme(SCHEME_TWIDERE); + builder.authority(AUTHORITY_USER_FRIENDS); + builder.appendQueryParameter(QUERY_PARAM_SCREEN_NAME, pathSegments.get(0)); + return new Intent(Intent.ACTION_VIEW, builder.build()); + } + case URI_CODE_TWITTER_USER_FOLLOWERS: { + final Uri.Builder builder = new Uri.Builder(); + builder.scheme(SCHEME_TWIDERE); + builder.authority(AUTHORITY_USER_FOLLOWERS); + builder.appendQueryParameter(QUERY_PARAM_SCREEN_NAME, pathSegments.get(0)); + return new Intent(Intent.ACTION_VIEW, builder.build()); + } + case URI_CODE_TWITTER_USER_FAVORITES: { + final Uri.Builder builder = new Uri.Builder(); + builder.scheme(SCHEME_TWIDERE); + builder.authority(AUTHORITY_USER_FAVORITES); + builder.appendQueryParameter(QUERY_PARAM_SCREEN_NAME, pathSegments.get(0)); + return new Intent(Intent.ACTION_VIEW, builder.build()); + } + case URI_CODE_TWITTER_USER_LIST: { + final String firstSegment = pathSegments.get(0); + if (ArrayUtils.contains(TWITTER_RESERVED_PATHS, firstSegment)) { + return null; + } + final Uri.Builder builder = new Uri.Builder(); + builder.scheme(SCHEME_TWIDERE); + builder.authority(AUTHORITY_USER_LIST); + builder.appendQueryParameter(QUERY_PARAM_SCREEN_NAME, firstSegment); + builder.appendQueryParameter(QUERY_PARAM_LIST_NAME, pathSegments.get(1)); + return new Intent(Intent.ACTION_VIEW, builder.build()); + } + case URI_CODE_TWITTER_USER_LIST_MEMBERS: { + final String firstSegment = pathSegments.get(0); + if (ArrayUtils.contains(TWITTER_RESERVED_PATHS, firstSegment)) { + return null; + } + final Uri.Builder builder = new Uri.Builder(); + builder.scheme(SCHEME_TWIDERE); + builder.authority(AUTHORITY_USER_LIST_MEMBERS); + builder.appendQueryParameter(QUERY_PARAM_SCREEN_NAME, firstSegment); + builder.appendQueryParameter(QUERY_PARAM_LIST_NAME, pathSegments.get(1)); + return new Intent(Intent.ACTION_VIEW, builder.build()); + } + case URI_CODE_TWITTER_USER_LIST_SUBSCRIBERS: { + final String firstSegment = pathSegments.get(0); + if (ArrayUtils.contains(TWITTER_RESERVED_PATHS, firstSegment)) { + return null; + } + final Uri.Builder builder = new Uri.Builder(); + builder.scheme(SCHEME_TWIDERE); + builder.authority(AUTHORITY_USER_LIST_SUBSCRIBERS); + builder.appendQueryParameter(QUERY_PARAM_SCREEN_NAME, firstSegment); + builder.appendQueryParameter(QUERY_PARAM_LIST_NAME, pathSegments.get(1)); + return new Intent(Intent.ACTION_VIEW, builder.build()); + } + } + return null; + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/iface/IThemedActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/iface/IThemedActivity.java index eb73f9e30..0007189b6 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/iface/IThemedActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/iface/IThemedActivity.java @@ -33,7 +33,7 @@ public interface IThemedActivity extends ITwidereContextWrapper { public int getThemeBackgroundAlpha(); - public int getThemeColor(); + public int getOverrideAccentColor(); public TwidereMenuInflater getTwidereMenuInflater(); diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/AccentFragmentActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/support/AccentFragmentActivity.java index f13146c07..e170a21f2 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/AccentFragmentActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/support/AccentFragmentActivity.java @@ -1,5 +1,6 @@ package org.mariotaku.twidere.activity.support; +import android.content.Context; import android.content.res.Resources; import android.support.v4.app.FragmentActivity; @@ -14,11 +15,20 @@ import com.negusoft.holoaccent.AccentResources; */ public class AccentFragmentActivity extends FragmentActivity { - private final AccentHelper mAccentHelper = new AccentHelper(getOverrideAccentColor(), - getOverrideAccentColorDark(), getOverrideAccentColorActionBar(), new MyInitListener()); + private AccentHelper mAccentHelper; + + @Override + protected void attachBaseContext(Context newBase) { + super.attachBaseContext(newBase); + mAccentHelper = new AccentHelper(getOverrideAccentColor(), + getOverrideAccentColorDark(), getOverrideAccentColorActionBar(), new MyInitListener()); + } @Override public Resources getResources() { + if (mAccentHelper == null) { + return super.getResources(); + } return mAccentHelper.getResources(this, super.getResources()); } diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/BaseSupportActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/support/BaseSupportActivity.java index b5dd997de..a9556e923 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/BaseSupportActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/support/BaseSupportActivity.java @@ -41,8 +41,8 @@ public class BaseSupportActivity extends BaseSupportThemedActivity implements Co } @Override - public int getThemeColor() { - return ThemeUtils.getUserThemeColor(this); + public int getOverrideAccentColor() { + return ThemeUtils.getUserThemeColor(this, getThemeResourceId()); } @Override diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/BaseSupportDialogActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/support/BaseSupportDialogActivity.java index 41e130d6e..f02482f3d 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/BaseSupportDialogActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/support/BaseSupportDialogActivity.java @@ -45,8 +45,8 @@ public class BaseSupportDialogActivity extends BaseSupportThemedActivity impleme } @Override - public int getThemeColor() { - return ThemeUtils.getThemeColor(this); + public int getOverrideAccentColor() { + return ThemeUtils.getThemeColor(this, getThemeResourceId()); } @Override diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/BaseSupportThemedActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/support/BaseSupportThemedActivity.java index deb85eabd..b1ddf13e5 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/BaseSupportThemedActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/support/BaseSupportThemedActivity.java @@ -77,7 +77,7 @@ public abstract class BaseSupportThemedActivity extends AccentFragmentActivity i } @Override - public abstract int getThemeColor(); + public abstract int getOverrideAccentColor(); @Override @@ -156,7 +156,7 @@ public abstract class BaseSupportThemedActivity extends AccentFragmentActivity i private final void setTheme() { mCurrentThemeResource = getThemeResourceId(); - mCurrentThemeColor = getThemeColor(); + mCurrentThemeColor = getOverrideAccentColor(); mCurrentThemeBackgroundAlpha = getThemeBackgroundAlpha(); ThemeUtils.notifyStatusBarColorChanged(this, mCurrentThemeResource, mCurrentThemeColor, mCurrentThemeBackgroundAlpha); diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/ComposeActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/support/ComposeActivity.java index fe8a1ee7b..de3b8dff3 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/ComposeActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/support/ComposeActivity.java @@ -212,7 +212,7 @@ public class ComposeActivity extends BaseSupportDialogActivity implements TextWa } @Override - public int getThemeColor() { + public int getOverrideAccentColor() { return ThemeUtils.getUserThemeColor(this); } @@ -240,7 +240,7 @@ public class ComposeActivity extends BaseSupportDialogActivity implements TextWa } else { mLocationManager.removeUpdates(this); } - mPreferences.edit().putBoolean(KEY_ATTACH_LOCATION, !attachLocation).commit(); + mPreferences.edit().putBoolean(KEY_ATTACH_LOCATION, !attachLocation).apply(); setMenu(); updateTextCount(); break; diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/ImagePickerActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/support/ImagePickerActivity.java index 7d844edae..967988740 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/ImagePickerActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/support/ImagePickerActivity.java @@ -45,7 +45,7 @@ public class ImagePickerActivity extends BaseSupportThemedActivity { private Runnable mImageSelectedRunnable; @Override - public int getThemeColor() { + public int getOverrideAccentColor() { return 0; } diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/MenuDialogFragment.java b/twidere/src/main/java/org/mariotaku/twidere/activity/support/MenuDialogFragment.java index 0a2c6016b..dd9a9d401 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/MenuDialogFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/support/MenuDialogFragment.java @@ -19,53 +19,54 @@ import org.mariotaku.menucomponent.internal.menu.MenuAdapter; import org.mariotaku.menucomponent.internal.menu.MenuUtils; import org.mariotaku.twidere.activity.iface.IThemedActivity; import org.mariotaku.twidere.fragment.support.BaseSupportDialogFragment; +import org.mariotaku.twidere.menu.TwidereMenuInflater; import org.mariotaku.twidere.util.ThemeUtils; public abstract class MenuDialogFragment extends BaseSupportDialogFragment implements OnItemClickListener { - private Context mThemedContext; + private Context mThemedContext; - public Context getThemedContext() { - if (mThemedContext != null) return mThemedContext; - final FragmentActivity activity = getActivity(); - final int themeRes, accentColor; - if (activity instanceof IThemedActivity) { - themeRes = ((IThemedActivity) activity).getThemeResourceId(); - accentColor = ((IThemedActivity) activity).getThemeColor(); - } else { - themeRes = ThemeUtils.getSettingsThemeResource(activity); - accentColor = ThemeUtils.getUserThemeColor(activity); - } - return mThemedContext = ThemeUtils.getThemedContextForActionIcons(activity, themeRes, accentColor); - } + public Context getThemedContext() { + if (mThemedContext != null) return mThemedContext; + final FragmentActivity activity = getActivity(); + final int themeRes, accentColor; + if (activity instanceof IThemedActivity) { + themeRes = ((IThemedActivity) activity).getThemeResourceId(); + accentColor = ((IThemedActivity) activity).getOverrideAccentColor(); + } else { + themeRes = ThemeUtils.getSettingsThemeResource(activity); + accentColor = ThemeUtils.getUserThemeColor(activity); + } + return mThemedContext = ThemeUtils.getThemedContextForActionIcons(activity, themeRes, accentColor); + } - @Override - public Dialog onCreateDialog(final Bundle savedInstanceState) { - final Context context = getThemedContext(); - final AlertDialog.Builder builder = new AlertDialog.Builder(context); - final MenuAdapter adapter = new MenuAdapter(context); - final ListView listView = new ListView(context); - listView.setAdapter(adapter); - listView.setOnItemClickListener(this); - builder.setView(listView); - final Menu menu = MenuUtils.createMenu(context); - onCreateMenu(new MenuInflater(context), menu); - adapter.setMenu(menu); - return builder.create(); - } + @Override + public Dialog onCreateDialog(final Bundle savedInstanceState) { + final Context context = getThemedContext(); + final AlertDialog.Builder builder = new AlertDialog.Builder(context); + final MenuAdapter adapter = new MenuAdapter(context); + final ListView listView = new ListView(context); + listView.setAdapter(adapter); + listView.setOnItemClickListener(this); + builder.setView(listView); + final Menu menu = MenuUtils.createMenu(context); + onCreateMenu(new TwidereMenuInflater(context), menu); + adapter.setMenu(menu); + return builder.create(); + } - @Override - public void onItemClick(final AdapterView parent, final View view, final int position, final long id) { - final Fragment parentFragment = getParentFragment(); - final MenuItem item = (MenuItem) parent.getItemAtPosition(position); - if (item.hasSubMenu()) { + @Override + public void onItemClick(final AdapterView parent, final View view, final int position, final long id) { + final Fragment parentFragment = getParentFragment(); + final MenuItem item = (MenuItem) parent.getItemAtPosition(position); + if (item.hasSubMenu()) { - } else if (parentFragment instanceof OnMenuItemClickListener) { - ((OnMenuItemClickListener) parentFragment).onMenuItemClick(item); - dismiss(); - } - } + } else if (parentFragment instanceof OnMenuItemClickListener) { + ((OnMenuItemClickListener) parentFragment).onMenuItemClick(item); + dismiss(); + } + } - protected abstract void onCreateMenu(MenuInflater inflater, Menu menu); + protected abstract void onCreateMenu(TwidereMenuInflater inflater, Menu menu); } diff --git a/twidere/src/main/java/org/mariotaku/twidere/adapter/AccountsAdapter.java b/twidere/src/main/java/org/mariotaku/twidere/adapter/AccountsAdapter.java index 33b58a79a..15d85985a 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/adapter/AccountsAdapter.java +++ b/twidere/src/main/java/org/mariotaku/twidere/adapter/AccountsAdapter.java @@ -63,6 +63,7 @@ public class AccountsAdapter extends SimpleCursorAdapter implements Constants { if (mDisplayProfileImage) { mImageLoader.displayProfileImage(holder.profile_image, cursor.getString(mProfileImageIdx)); } else { + mImageLoader.cancelDisplayTask(holder.profile_image); holder.profile_image.setImageResource(R.drawable.ic_profile_image_default); } final boolean isMultipleChoice = mChoiceMode == ListView.CHOICE_MODE_MULTIPLE diff --git a/twidere/src/main/java/org/mariotaku/twidere/adapter/AccountsSpinnerAdapter.java b/twidere/src/main/java/org/mariotaku/twidere/adapter/AccountsSpinnerAdapter.java index 71e228c53..ca1997d14 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/adapter/AccountsSpinnerAdapter.java +++ b/twidere/src/main/java/org/mariotaku/twidere/adapter/AccountsSpinnerAdapter.java @@ -77,6 +77,7 @@ public class AccountsSpinnerAdapter extends ArrayAdapter { if (mDisplayProfileImage) { mImageLoader.displayProfileImage(icon, item.profile_image_url); } else { + mImageLoader.cancelDisplayTask(icon); icon.setImageResource(R.drawable.ic_profile_image_default); } } else { diff --git a/twidere/src/main/java/org/mariotaku/twidere/adapter/BaseParcelableActivitiesAdapter.java b/twidere/src/main/java/org/mariotaku/twidere/adapter/BaseParcelableActivitiesAdapter.java index f62a4707a..d81866049 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/adapter/BaseParcelableActivitiesAdapter.java +++ b/twidere/src/main/java/org/mariotaku/twidere/adapter/BaseParcelableActivitiesAdapter.java @@ -217,6 +217,7 @@ public abstract class BaseParcelableActivitiesAdapter extends BaseArrayAdapter

, OnClickListener, - OnOverflowIconClickListener { + OnOverflowIconClickListener { - public static final String[] CURSOR_COLS = Statuses.COLUMNS; + public static final String[] CURSOR_COLS = Statuses.COLUMNS; - private final Context mContext; - private final ImageLoaderWrapper mImageLoader; - private final MultiSelectManager mMultiSelectManager; - private final SQLiteDatabase mDatabase; - private final ImageLoadingHandler mImageLoadingHandler; + private final Context mContext; + private final ImageLoaderWrapper mImageLoader; + private final MultiSelectManager mMultiSelectManager; + private final SQLiteDatabase mDatabase; + private final ImageLoadingHandler mImageLoadingHandler; - private MenuButtonClickListener mListener; + private MenuButtonClickListener mListener; - private final boolean mPlainList; + private final boolean mPlainList; - private boolean mDisplayImagePreview, mGapDisallowed, mMentionsHighlightDisabled, mFavoritesHighlightDisabled, - mDisplaySensitiveContents, mIndicateMyStatusDisabled, mIsLastItemFiltered, mFiltersEnabled, - mAnimationEnabled; - private boolean mFilterIgnoreUser, mFilterIgnoreSource, mFilterIgnoreTextHtml, mFilterIgnoreTextPlain, - mFilterRetweetedById; - private int mMaxAnimationPosition, mCardHighlightOption; + private boolean mDisplayImagePreview, mGapDisallowed, mMentionsHighlightDisabled, mFavoritesHighlightDisabled, + mDisplaySensitiveContents, mIndicateMyStatusDisabled, mIsLastItemFiltered, mFiltersEnabled, + mAnimationEnabled; + private boolean mFilterIgnoreUser, mFilterIgnoreSource, mFilterIgnoreTextHtml, mFilterIgnoreTextPlain, + mFilterRetweetedById; + private int mMaxAnimationPosition, mCardHighlightOption; - private ParcelableStatus.CursorIndices mIndices; + private ParcelableStatus.CursorIndices mIndices; - private ScaleType mImagePreviewScaleType; + private ScaleType mImagePreviewScaleType; - public CursorStatusesAdapter(final Context context) { - this(context, Utils.isCompactCards(context), Utils.isPlainListStyle(context)); - } + public CursorStatusesAdapter(final Context context) { + this(context, Utils.isCompactCards(context), Utils.isPlainListStyle(context)); + } - public CursorStatusesAdapter(final Context context, final boolean compactCards, final boolean plainList) { - super(context, getItemResource(compactCards), null, new String[0], new int[0], 0); - mPlainList = plainList; - mContext = context; - final TwidereApplication application = TwidereApplication.getInstance(context); - mMultiSelectManager = application.getMultiSelectManager(); - mImageLoader = application.getImageLoaderWrapper(); - mDatabase = application.getSQLiteDatabase(); - mImageLoadingHandler = new ImageLoadingHandler(); - configBaseCardAdapter(context, this); - setMaxAnimationPosition(-1); - } + public CursorStatusesAdapter(final Context context, final boolean compactCards, final boolean plainList) { + super(context, getItemResource(compactCards), null, new String[0], new int[0], 0); + mPlainList = plainList; + mContext = context; + final TwidereApplication application = TwidereApplication.getInstance(context); + mMultiSelectManager = application.getMultiSelectManager(); + mImageLoader = application.getImageLoaderWrapper(); + mDatabase = application.getSQLiteDatabase(); + mImageLoadingHandler = new ImageLoadingHandler(); + configBaseCardAdapter(context, this); + setMaxAnimationPosition(-1); + } - @Override - public void bindView(final View view, final Context context, final Cursor cursor) { - final int position = cursor.getPosition(); - final StatusViewHolder holder = (StatusViewHolder) view.getTag(); + @Override + public void bindView(final View view, final Context context, final Cursor cursor) { + final int position = cursor.getPosition(); + final StatusViewHolder holder = (StatusViewHolder) view.getTag(); - final boolean isGap = cursor.getShort(mIndices.is_gap) == 1; - final boolean showGap = isGap && !mGapDisallowed && position != getCount() - 1; + final boolean isGap = cursor.getShort(mIndices.is_gap) == 1; + final boolean showGap = isGap && !mGapDisallowed && position != getCount() - 1; - holder.setShowAsGap(showGap); - holder.position = position; - holder.setDisplayProfileImage(isDisplayProfileImage()); - holder.setCardHighlightOption(mCardHighlightOption); + holder.setShowAsGap(showGap); + holder.position = position; + holder.setDisplayProfileImage(isDisplayProfileImage()); + holder.setCardHighlightOption(mCardHighlightOption); - if (!showGap) { + if (!showGap) { - // Clear images in prder to prevent images in recycled view shown. - holder.profile_image.setImageDrawable(null); - holder.my_profile_image.setImageDrawable(null); - holder.image_preview.setImageDrawable(null); + // Clear images in prder to prevent images in recycled view shown. - final TwidereLinkify linkify = getLinkify(); - final boolean showAccountColor = isShowAccountColor(); + final TwidereLinkify linkify = getLinkify(); + final boolean showAccountColor = isShowAccountColor(); - final long accountId = cursor.getLong(mIndices.account_id); - final long userId = cursor.getLong(mIndices.user_id); - final long timestamp = cursor.getLong(mIndices.status_timestamp); - final long retweetTimestamp = cursor.getLong(mIndices.retweet_timestamp); - final long retweetCount = cursor.getLong(mIndices.retweet_count); - final long retweetedByUserId = cursor.getLong(mIndices.retweeted_by_user_id); - final long inReplyToUserId = cursor.getLong(mIndices.in_reply_to_user_id); + final long accountId = cursor.getLong(mIndices.account_id); + final long userId = cursor.getLong(mIndices.user_id); + final long timestamp = cursor.getLong(mIndices.status_timestamp); + final long retweetTimestamp = cursor.getLong(mIndices.retweet_timestamp); + final long retweetCount = cursor.getLong(mIndices.retweet_count); + final long retweetedByUserId = cursor.getLong(mIndices.retweeted_by_user_id); + final long inReplyToUserId = cursor.getLong(mIndices.in_reply_to_user_id); - final String retweetedByName = cursor.getString(mIndices.retweeted_by_user_name); - final String retweetedByScreenName = cursor.getString(mIndices.retweeted_by_user_screen_name); - final String text = getLinkHighlightOption() != VALUE_LINK_HIGHLIGHT_OPTION_CODE_NONE ? cursor - .getString(mIndices.text_html) : cursor.getString(mIndices.text_unescaped); - final String screen_name = cursor.getString(mIndices.user_screen_name); - final String name = cursor.getString(mIndices.user_name); - final String inReplyToName = cursor.getString(mIndices.in_reply_to_user_name); - final String inReplyToScreenName = cursor.getString(mIndices.in_reply_to_user_screen_name); - final ParcelableMedia[] medias = ParcelableMedia.fromJSONString(cursor.getString(mIndices.medias)); - final String firstMedia = medias != null && medias.length > 0 ? medias[0].media_url : null; + final String retweetedByName = cursor.getString(mIndices.retweeted_by_user_name); + final String retweetedByScreenName = cursor.getString(mIndices.retweeted_by_user_screen_name); + final String text = getLinkHighlightOption() != VALUE_LINK_HIGHLIGHT_OPTION_CODE_NONE ? cursor + .getString(mIndices.text_html) : cursor.getString(mIndices.text_unescaped); + final String screen_name = cursor.getString(mIndices.user_screen_name); + final String name = cursor.getString(mIndices.user_name); + final String inReplyToName = cursor.getString(mIndices.in_reply_to_user_name); + final String inReplyToScreenName = cursor.getString(mIndices.in_reply_to_user_screen_name); + final ParcelableMedia[] medias = ParcelableMedia.fromJSONString(cursor.getString(mIndices.medias)); + final String firstMedia = medias != null && medias.length > 0 ? medias[0].media_url : null; - // Tweet type (favorite/location/media) - final boolean isFavorite = cursor.getShort(mIndices.is_favorite) == 1; - final boolean hasLocation = !TextUtils.isEmpty(cursor.getString(mIndices.location)); - final boolean possiblySensitive = cursor.getInt(mIndices.is_possibly_sensitive) == 1; - final boolean hasMedia = medias != null && medias.length > 0; + // Tweet type (favorite/location/media) + final boolean isFavorite = cursor.getShort(mIndices.is_favorite) == 1; + final boolean hasLocation = !TextUtils.isEmpty(cursor.getString(mIndices.location)); + final boolean possiblySensitive = cursor.getInt(mIndices.is_possibly_sensitive) == 1; + final boolean hasMedia = medias != null && medias.length > 0; - // User type (protected/verified) - final boolean isVerified = cursor.getShort(mIndices.is_verified) == 1; - final boolean isProtected = cursor.getShort(mIndices.is_protected) == 1; + // User type (protected/verified) + final boolean isVerified = cursor.getShort(mIndices.is_verified) == 1; + final boolean isProtected = cursor.getShort(mIndices.is_protected) == 1; - final boolean isRetweet = cursor.getShort(mIndices.is_retweet) == 1; - final boolean isReply = cursor.getLong(mIndices.in_reply_to_status_id) > 0; - final boolean isMention = ParcelableUserMention.hasMention(cursor.getString(mIndices.mentions), accountId); - final boolean isMyStatus = accountId == userId; + final boolean isRetweet = cursor.getShort(mIndices.is_retweet) == 1; + final boolean isReply = cursor.getLong(mIndices.in_reply_to_status_id) > 0; + final boolean isMention = ParcelableUserMention.hasMention(cursor.getString(mIndices.mentions), accountId); + final boolean isMyStatus = accountId == userId; - holder.setUserColor(getUserColor(mContext, userId)); - if (isRetweet) { - holder.setUserColor(getUserColor(mContext, userId), getUserColor(mContext, retweetedByUserId)); - } else { - holder.setUserColor(getUserColor(mContext, userId)); - } - holder.setHighlightColor(getCardHighlightColor(!mMentionsHighlightDisabled && isMention, - !mFavoritesHighlightDisabled && isFavorite, isRetweet)); + holder.setUserColor(getUserColor(mContext, userId)); + if (isRetweet) { + holder.setUserColor(getUserColor(mContext, userId), getUserColor(mContext, retweetedByUserId)); + } else { + holder.setUserColor(getUserColor(mContext, userId)); + } + holder.setHighlightColor(getCardHighlightColor(!mMentionsHighlightDisabled && isMention, + !mFavoritesHighlightDisabled && isFavorite, isRetweet)); - holder.setAccountColorEnabled(showAccountColor); + holder.setAccountColorEnabled(showAccountColor); - if (showAccountColor) { - holder.setAccountColor(getAccountColor(mContext, accountId)); - } + if (showAccountColor) { + holder.setAccountColor(getAccountColor(mContext, accountId)); + } - holder.setTextSize(getTextSize()); + holder.setTextSize(getTextSize()); - holder.setIsMyStatus(isMyStatus && !mIndicateMyStatusDisabled); - if (getLinkHighlightOption() != VALUE_LINK_HIGHLIGHT_OPTION_CODE_NONE) { - holder.text.setText(Html.fromHtml(text)); - linkify.applyAllLinks(holder.text, accountId, possiblySensitive); - holder.text.setMovementMethod(null); - } else { - holder.text.setText(text); - } - holder.setUserType(isVerified, isProtected); - holder.setDisplayNameFirst(isDisplayNameFirst()); - holder.setNicknameOnly(isNicknameOnly()); - final String nick = getUserNickname(context, userId); - holder.name.setText(TextUtils.isEmpty(nick) ? name : isNicknameOnly() ? nick : context.getString( - R.string.name_with_nickname, name, nick)); - holder.screen_name.setText("@" + screen_name); - if (getLinkHighlightOption() != VALUE_LINK_HIGHLIGHT_OPTION_CODE_NONE) { - linkify.applyUserProfileLinkNoHighlight(holder.name, accountId, userId, screen_name); - linkify.applyUserProfileLinkNoHighlight(holder.screen_name, accountId, userId, screen_name); - holder.name.setMovementMethod(null); - holder.screen_name.setMovementMethod(null); - } - holder.time.setTime(retweetTimestamp > 0 ? retweetTimestamp : timestamp); - holder.setStatusType(!mFavoritesHighlightDisabled && isFavorite, hasLocation, hasMedia, possiblySensitive); + holder.setIsMyStatus(isMyStatus && !mIndicateMyStatusDisabled); + if (getLinkHighlightOption() != VALUE_LINK_HIGHLIGHT_OPTION_CODE_NONE) { + holder.text.setText(Html.fromHtml(text)); + linkify.applyAllLinks(holder.text, accountId, possiblySensitive); + holder.text.setMovementMethod(null); + } else { + holder.text.setText(text); + } + holder.setUserType(isVerified, isProtected); + holder.setDisplayNameFirst(isDisplayNameFirst()); + holder.setNicknameOnly(isNicknameOnly()); + final String nick = getUserNickname(context, userId); + holder.name.setText(TextUtils.isEmpty(nick) ? name : isNicknameOnly() ? nick : context.getString( + R.string.name_with_nickname, name, nick)); + holder.screen_name.setText("@" + screen_name); + if (getLinkHighlightOption() != VALUE_LINK_HIGHLIGHT_OPTION_CODE_NONE) { + linkify.applyUserProfileLinkNoHighlight(holder.name, accountId, userId, screen_name); + linkify.applyUserProfileLinkNoHighlight(holder.screen_name, accountId, userId, screen_name); + holder.name.setMovementMethod(null); + holder.screen_name.setMovementMethod(null); + } + holder.time.setTime(retweetTimestamp > 0 ? retweetTimestamp : timestamp); + holder.setStatusType(!mFavoritesHighlightDisabled && isFavorite, hasLocation, hasMedia, possiblySensitive); - holder.setIsReplyRetweet(isReply, isRetweet); - if (isRetweet) { - holder.setRetweetedBy(retweetCount, retweetedByUserId, retweetedByName, retweetedByScreenName); - } else if (isReply) { - holder.setReplyTo(inReplyToUserId, inReplyToName, inReplyToScreenName); - } + holder.setIsReplyRetweet(isReply, isRetweet); + if (isRetweet) { + holder.setRetweetedBy(retweetCount, retweetedByUserId, retweetedByName, retweetedByScreenName); + } else if (isReply) { + holder.setReplyTo(inReplyToUserId, inReplyToName, inReplyToScreenName); + } - if (isDisplayProfileImage()) { - final String profile_image_url = cursor.getString(mIndices.user_profile_image_url); - mImageLoader.displayProfileImage(holder.my_profile_image, profile_image_url); - mImageLoader.displayProfileImage(holder.profile_image, profile_image_url); - holder.profile_image.setTag(position); - holder.my_profile_image.setTag(position); - } else { - holder.profile_image.setVisibility(View.GONE); - holder.my_profile_image.setVisibility(View.GONE); - } - final boolean hasPreview = mDisplayImagePreview && hasMedia; - holder.image_preview_container.setVisibility(hasPreview ? View.VISIBLE : View.GONE); - if (hasPreview && firstMedia != null && medias != null) { - if (mImagePreviewScaleType != null) { - holder.image_preview.setScaleType(mImagePreviewScaleType); - } - if (possiblySensitive && !mDisplaySensitiveContents) { - holder.image_preview.setImageDrawable(null); - holder.image_preview.setBackgroundResource(R.drawable.image_preview_nsfw); - holder.image_preview_progress.setVisibility(View.GONE); - } else if (!firstMedia.equals(mImageLoadingHandler.getLoadingUri(holder.image_preview))) { - holder.image_preview.setBackgroundResource(0); - mImageLoader.displayPreviewImage(holder.image_preview, firstMedia, mImageLoadingHandler); - } - final Resources res = mContext.getResources(); - final int count = medias.length; - holder.image_preview_count.setText(res.getQuantityString(R.plurals.N_medias, count, count)); - holder.image_preview.setTag(position); - } - } - } + if (isDisplayProfileImage()) { + final String profile_image_url = cursor.getString(mIndices.user_profile_image_url); + mImageLoader.displayProfileImage(holder.my_profile_image, profile_image_url); + mImageLoader.displayProfileImage(holder.profile_image, profile_image_url); + holder.profile_image.setTag(position); + holder.my_profile_image.setTag(position); + } else { + mImageLoader.cancelDisplayTask(holder.profile_image); + mImageLoader.cancelDisplayTask(holder.my_profile_image); + holder.profile_image.setVisibility(View.GONE); + holder.my_profile_image.setVisibility(View.GONE); + } + final boolean hasPreview = mDisplayImagePreview && hasMedia; + holder.image_preview_container.setVisibility(hasPreview ? View.VISIBLE : View.GONE); + if (hasPreview && firstMedia != null && medias != null) { + if (mImagePreviewScaleType != null) { + holder.image_preview.setScaleType(mImagePreviewScaleType); + } + if (possiblySensitive && !mDisplaySensitiveContents) { + holder.image_preview.setImageDrawable(null); + holder.image_preview.setBackgroundResource(R.drawable.image_preview_nsfw); + holder.image_preview_progress.setVisibility(View.GONE); + } else if (!firstMedia.equals(mImageLoadingHandler.getLoadingUri(holder.image_preview))) { + holder.image_preview.setBackgroundResource(0); + mImageLoader.displayPreviewImage(holder.image_preview, firstMedia, mImageLoadingHandler); + } + final Resources res = mContext.getResources(); + final int count = medias.length; + holder.image_preview_count.setText(res.getQuantityString(R.plurals.N_medias, count, count)); + holder.image_preview.setTag(position); + } else { + mImageLoader.cancelDisplayTask(holder.image_preview); + } + } else { + mImageLoader.cancelDisplayTask(holder.profile_image); + mImageLoader.cancelDisplayTask(holder.my_profile_image); + mImageLoader.cancelDisplayTask(holder.image_preview); + } + } - @Override - public int findPositionByStatusId(final long status_id) { - final Cursor c = getCursor(); - if (c == null || c.isClosed()) return -1; - for (int i = 0, count = c.getCount(); i < count; i++) { - if (c.moveToPosition(i) && c.getLong(mIndices.status_id) == status_id) return i; - } - return -1; - } + @Override + public int findPositionByStatusId(final long status_id) { + final Cursor c = getCursor(); + if (c == null || c.isClosed()) return -1; + for (int i = 0, count = c.getCount(); i < count; i++) { + if (c.moveToPosition(i) && c.getLong(mIndices.status_id) == status_id) return i; + } + return -1; + } - @Override - public long getAccountId(final int position) { - final Cursor c = getCursor(); - if (c == null || c.isClosed() || !c.moveToPosition(position)) return -1; - return c.getLong(mIndices.account_id); - } + @Override + public long getAccountId(final int position) { + final Cursor c = getCursor(); + if (c == null || c.isClosed() || !c.moveToPosition(position)) return -1; + return c.getLong(mIndices.account_id); + } - @Override - public int getActualCount() { - return super.getCount(); - } + @Override + public int getActualCount() { + return super.getCount(); + } - @Override - public int getCount() { - final int count = super.getCount(); - return mFiltersEnabled && mIsLastItemFiltered && count > 0 ? count - 1 : count; - } + @Override + public int getCount() { + final int count = super.getCount(); + return mFiltersEnabled && mIsLastItemFiltered && count > 0 ? count - 1 : count; + } - @Override - public ParcelableStatus getLastStatus() { - final Cursor c = getCursor(); - if (c == null || c.isClosed() || !c.moveToLast()) return null; - final long account_id = c.getLong(mIndices.account_id); - final long status_id = c.getLong(mIndices.status_id); - return findStatusInDatabases(mContext, account_id, status_id); - } + @Override + public ParcelableStatus getLastStatus() { + final Cursor c = getCursor(); + if (c == null || c.isClosed() || !c.moveToLast()) return null; + final long account_id = c.getLong(mIndices.account_id); + final long status_id = c.getLong(mIndices.status_id); + return findStatusInDatabases(mContext, account_id, status_id); + } - @Override - public long getLastStatusId() { - final Cursor c = getCursor(); - try { - if (c == null || c.isClosed() || !c.moveToLast()) return -1; - return c.getLong(mIndices.status_id); - } catch (final IllegalStateException e) { - return -1; - } - } + @Override + public long getLastStatusId() { + final Cursor c = getCursor(); + try { + if (c == null || c.isClosed() || !c.moveToLast()) return -1; + return c.getLong(mIndices.status_id); + } catch (final IllegalStateException e) { + return -1; + } + } - @Override - public ParcelableStatus getStatus(final int position) { - final Cursor c = getCursor(); - if (c == null || c.isClosed() || !c.moveToPosition(position)) return null; - return new ParcelableStatus(c, mIndices); - } + @Override + public ParcelableStatus getStatus(final int position) { + final Cursor c = getCursor(); + if (c == null || c.isClosed() || !c.moveToPosition(position)) return null; + return new ParcelableStatus(c, mIndices); + } - @Override - public long getStatusId(final int position) { - final Cursor c = getCursor(); - if (c == null || c.isClosed() || !c.moveToPosition(position)) return -1; - return c.getLong(mIndices.status_id); - } + @Override + public long getStatusId(final int position) { + final Cursor c = getCursor(); + if (c == null || c.isClosed() || !c.moveToPosition(position)) return -1; + return c.getLong(mIndices.status_id); + } - @Override - public View getView(final int position, final View convertView, final ViewGroup parent) { - final View view = super.getView(position, convertView, parent); - final Object tag = view.getTag(); - // animate the item - if (tag instanceof StatusViewHolder && position > mMaxAnimationPosition) { - if (mAnimationEnabled) { - view.startAnimation(((StatusViewHolder) tag).item_animation); - } - mMaxAnimationPosition = position; - } - return view; - } + @Override + public View getView(final int position, final View convertView, final ViewGroup parent) { + final View view = super.getView(position, convertView, parent); + final Object tag = view.getTag(); + // animate the item + if (tag instanceof StatusViewHolder && position > mMaxAnimationPosition) { + if (mAnimationEnabled) { + view.startAnimation(((StatusViewHolder) tag).item_animation); + } + mMaxAnimationPosition = position; + } + return view; + } - @Override - public boolean isLastItemFiltered() { - return mFiltersEnabled && mIsLastItemFiltered; - } + @Override + public boolean isLastItemFiltered() { + return mFiltersEnabled && mIsLastItemFiltered; + } - @Override - public View newView(final Context context, final Cursor cursor, final ViewGroup parent) { - final View view = super.newView(context, cursor, parent); - final Object tag = view.getTag(); - if (!(tag instanceof StatusViewHolder)) { - final StatusViewHolder holder = new StatusViewHolder(view); - holder.profile_image.setOnClickListener(this); - holder.my_profile_image.setOnClickListener(this); - holder.image_preview.setOnClickListener(this); - holder.content.setOnOverflowIconClickListener(this); - if (mPlainList) { - ((View) holder.content).setPadding(0, 0, 0, 0); - holder.content.setItemBackground(null); - } - view.setTag(holder); - } - return view; - } + @Override + public View newView(final Context context, final Cursor cursor, final ViewGroup parent) { + final View view = super.newView(context, cursor, parent); + final Object tag = view.getTag(); + if (!(tag instanceof StatusViewHolder)) { + final StatusViewHolder holder = new StatusViewHolder(view); + holder.profile_image.setOnClickListener(this); + holder.my_profile_image.setOnClickListener(this); + holder.image_preview.setOnClickListener(this); + holder.content.setOnOverflowIconClickListener(this); + if (mPlainList) { + ((View) holder.content).setPadding(0, 0, 0, 0); + holder.content.setItemBackground(null); + } + view.setTag(holder); + } + return view; + } - @Override - public void onClick(final View view) { - if (mMultiSelectManager.isActive()) return; - final Object tag = view.getTag(); - final int position = tag instanceof Integer ? (Integer) tag : -1; - if (position == -1) return; - switch (view.getId()) { - case R.id.image_preview: { - final ParcelableStatus status = getStatus(position); - if (status == null || status.first_media == null) return; - openImage(mContext, status.account_id, status.first_media, status.is_possibly_sensitive); - break; - } - case R.id.my_profile_image: - case R.id.profile_image: { - final ParcelableStatus status = getStatus(position); - if (status == null) return; - if (mContext instanceof Activity) { - openUserProfile((Activity) mContext, status.account_id, status.user_id, status.user_screen_name); - } - break; - } - } - } + @Override + public void onClick(final View view) { + if (mMultiSelectManager.isActive()) return; + final Object tag = view.getTag(); + final int position = tag instanceof Integer ? (Integer) tag : -1; + if (position == -1) return; + switch (view.getId()) { + case R.id.image_preview: { + final ParcelableStatus status = getStatus(position); + if (status == null || status.first_media == null) return; + openImage(mContext, status.account_id, status.first_media, status.is_possibly_sensitive); + break; + } + case R.id.my_profile_image: + case R.id.profile_image: { + final ParcelableStatus status = getStatus(position); + if (status == null) return; + if (mContext instanceof Activity) { + openUserProfile((Activity) mContext, status.account_id, status.user_id, status.user_screen_name); + } + break; + } + } + } - @Override - public void onOverflowIconClick(final View view) { - if (mMultiSelectManager.isActive()) return; - final Object tag = view.getTag(); - if (tag instanceof StatusViewHolder) { - final StatusViewHolder holder = (StatusViewHolder) tag; - final int position = holder.position; - if (position == -1 || mListener == null) return; - mListener.onMenuButtonClick(view, position, getItemId(position)); - } - } + @Override + public void onOverflowIconClick(final View view) { + if (mMultiSelectManager.isActive()) return; + final Object tag = view.getTag(); + if (tag instanceof StatusViewHolder) { + final StatusViewHolder holder = (StatusViewHolder) tag; + final int position = holder.position; + if (position == -1 || mListener == null) return; + mListener.onMenuButtonClick(view, position, getItemId(position)); + } + } - @Override - public void setAnimationEnabled(final boolean anim) { - mAnimationEnabled = anim; - } + @Override + public void setAnimationEnabled(final boolean anim) { + mAnimationEnabled = anim; + } - @Override - public void setCardHighlightOption(final String option) { - mCardHighlightOption = getCardHighlightOptionInt(option); - } + @Override + public void setCardHighlightOption(final String option) { + mCardHighlightOption = getCardHighlightOptionInt(option); + } - @Override - public void setData(final Cursor data) { - swapCursor(data); - } + @Override + public void setData(final Cursor data) { + swapCursor(data); + } - @Override - public void setDisplayImagePreview(final boolean display) { - mDisplayImagePreview = display; - } + @Override + public void setDisplayImagePreview(final boolean display) { + mDisplayImagePreview = display; + } - @Override - public void setDisplaySensitiveContents(final boolean display) { - mDisplaySensitiveContents = display; - } + @Override + public void setDisplaySensitiveContents(final boolean display) { + mDisplaySensitiveContents = display; + } - @Override - public void setFavoritesHightlightDisabled(final boolean disable) { - mFavoritesHighlightDisabled = disable; - } + @Override + public void setFavoritesHightlightDisabled(final boolean disable) { + mFavoritesHighlightDisabled = disable; + } - @Override - public void setFiltersEnabled(final boolean enabled) { - if (mFiltersEnabled == enabled) return; - mFiltersEnabled = enabled; - rebuildFilterInfo(getCursor(), mIndices); - } + @Override + public void setFiltersEnabled(final boolean enabled) { + if (mFiltersEnabled == enabled) return; + mFiltersEnabled = enabled; + rebuildFilterInfo(getCursor(), mIndices); + } - @Override - public void setGapDisallowed(final boolean disallowed) { - mGapDisallowed = disallowed; - } + @Override + public void setGapDisallowed(final boolean disallowed) { + mGapDisallowed = disallowed; + } - @Override - public void setHighlightKeyword(final String... keywords) { - // TODO Auto-generated method stub + @Override + public void setHighlightKeyword(final String... keywords) { + // TODO Auto-generated method stub - } + } - @Override - public void setIgnoredFilterFields(final boolean user, final boolean textPlain, final boolean textHtml, - final boolean source, final boolean retweetedById) { - mFilterIgnoreTextPlain = textPlain; - mFilterIgnoreTextHtml = textHtml; - mFilterIgnoreUser = user; - mFilterIgnoreSource = source; - mFilterRetweetedById = retweetedById; - rebuildFilterInfo(getCursor(), mIndices); - } + @Override + public void setIgnoredFilterFields(final boolean user, final boolean textPlain, final boolean textHtml, + final boolean source, final boolean retweetedById) { + mFilterIgnoreTextPlain = textPlain; + mFilterIgnoreTextHtml = textHtml; + mFilterIgnoreUser = user; + mFilterIgnoreSource = source; + mFilterRetweetedById = retweetedById; + rebuildFilterInfo(getCursor(), mIndices); + } - @Override - public void setImagePreviewScaleType(final String scaleTypeString) { - final ScaleType scaleType = ScaleType.valueOf(scaleTypeString.toUpperCase(Locale.US)); - mImagePreviewScaleType = scaleType; - } + @Override + public void setImagePreviewScaleType(final String scaleTypeString) { + final ScaleType scaleType = ScaleType.valueOf(scaleTypeString.toUpperCase(Locale.US)); + mImagePreviewScaleType = scaleType; + } - @Override - public void setIndicateMyStatusDisabled(final boolean disable) { - mIndicateMyStatusDisabled = disable; - } + @Override + public void setIndicateMyStatusDisabled(final boolean disable) { + mIndicateMyStatusDisabled = disable; + } - @Override - public void setMaxAnimationPosition(final int position) { - mMaxAnimationPosition = position; - } + @Override + public void setMaxAnimationPosition(final int position) { + mMaxAnimationPosition = position; + } - @Override - public void setMentionsHightlightDisabled(final boolean disable) { - mMentionsHighlightDisabled = disable; - } + @Override + public void setMentionsHightlightDisabled(final boolean disable) { + mMentionsHighlightDisabled = disable; + } - @Override - public void setMenuButtonClickListener(final MenuButtonClickListener listener) { - mListener = listener; - } + @Override + public void setMenuButtonClickListener(final MenuButtonClickListener listener) { + mListener = listener; + } - @Override - public Cursor swapCursor(final Cursor cursor) { - mIndices = cursor != null ? new ParcelableStatus.CursorIndices(cursor) : null; - rebuildFilterInfo(cursor, mIndices); - return super.swapCursor(cursor); - } + @Override + public Cursor swapCursor(final Cursor cursor) { + mIndices = cursor != null ? new ParcelableStatus.CursorIndices(cursor) : null; + rebuildFilterInfo(cursor, mIndices); + return super.swapCursor(cursor); + } - private void rebuildFilterInfo(final Cursor c, final ParcelableStatus.CursorIndices i) { - if (i != null && c != null && moveCursorToLast(c)) { - final long userId = mFilterIgnoreUser ? -1 : c.getLong(mIndices.user_id); - final String textPlain = mFilterIgnoreTextPlain ? null : c.getString(mIndices.text_plain); - final String textHtml = mFilterIgnoreTextHtml ? null : c.getString(mIndices.text_html); - final String source = mFilterIgnoreSource ? null : c.getString(mIndices.source); - final long retweetedById = mFilterRetweetedById ? -1 : c.getLong(mIndices.retweeted_by_user_id); - mIsLastItemFiltered = isFiltered(mDatabase, userId, textPlain, textHtml, source, retweetedById); - } else { - mIsLastItemFiltered = false; - } - } + private void rebuildFilterInfo(final Cursor c, final ParcelableStatus.CursorIndices i) { + if (i != null && c != null && moveCursorToLast(c)) { + final long userId = mFilterIgnoreUser ? -1 : c.getLong(mIndices.user_id); + final String textPlain = mFilterIgnoreTextPlain ? null : c.getString(mIndices.text_plain); + final String textHtml = mFilterIgnoreTextHtml ? null : c.getString(mIndices.text_html); + final String source = mFilterIgnoreSource ? null : c.getString(mIndices.source); + final long retweetedById = mFilterRetweetedById ? -1 : c.getLong(mIndices.retweeted_by_user_id); + mIsLastItemFiltered = isFiltered(mDatabase, userId, textPlain, textHtml, source, retweetedById); + } else { + mIsLastItemFiltered = false; + } + } - private static int getItemResource(final boolean compactCards) { - return compactCards ? R.layout.card_item_status_compact : R.layout.card_item_status; - } + private static int getItemResource(final boolean compactCards) { + return compactCards ? R.layout.card_item_status_compact : R.layout.card_item_status; + } - private static boolean moveCursorToLast(final Cursor c) { - if (c == null || c.isClosed()) return false; - try { - return c.moveToNext(); - } catch (final Exception e) { - return false; - } - } + private static boolean moveCursorToLast(final Cursor c) { + if (c == null || c.isClosed()) return false; + try { + return c.moveToNext(); + } catch (final Exception e) { + return false; + } + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/adapter/DirectMessageConversationEntriesAdapter.java b/twidere/src/main/java/org/mariotaku/twidere/adapter/DirectMessageConversationEntriesAdapter.java index 93953c4f7..fe32d48e9 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/adapter/DirectMessageConversationEntriesAdapter.java +++ b/twidere/src/main/java/org/mariotaku/twidere/adapter/DirectMessageConversationEntriesAdapter.java @@ -52,7 +52,7 @@ import org.mariotaku.twidere.view.holder.DirectMessageEntryViewHolder; public class DirectMessageConversationEntriesAdapter extends BaseCursorAdapter implements IBaseCardAdapter, OnClickListener { - private final ImageLoaderWrapper mLazyImageLoader; + private final ImageLoaderWrapper mImageLoader; private final MultiSelectManager mMultiSelectManager; private boolean mAnimationEnabled; @@ -70,7 +70,7 @@ public class DirectMessageConversationEntriesAdapter extends BaseCursorAdapter i mPlainList = plainList; final TwidereApplication app = TwidereApplication.getInstance(context); mMultiSelectManager = app.getMultiSelectManager(); - mLazyImageLoader = app.getImageLoaderWrapper(); + mImageLoader = app.getImageLoaderWrapper(); configBaseCardAdapter(context, this); } @@ -94,9 +94,6 @@ public class DirectMessageConversationEntriesAdapter extends BaseCursorAdapter i holder.setAccountColor(getAccountColor(mContext, accountId)); } - // Clear images in prder to prevent images in recycled view shown. - holder.profile_image.setImageDrawable(null); - holder.setUserColor(getUserColor(mContext, conversationId)); holder.setTextSize(getTextSize()); @@ -113,8 +110,10 @@ public class DirectMessageConversationEntriesAdapter extends BaseCursorAdapter i if (displayProfileImage) { holder.profile_image.setTag(position); final String profile_image_url_string = cursor.getString(IDX_PROFILE_IMAGE_URL); - mLazyImageLoader.displayProfileImage(holder.profile_image, profile_image_url_string); - } + mImageLoader.displayProfileImage(holder.profile_image, profile_image_url_string); + } else { + mImageLoader.cancelDisplayTask(holder.profile_image); + } if (position > mMaxAnimationPosition) { if (mAnimationEnabled) { view.startAnimation(holder.item_animation); diff --git a/twidere/src/main/java/org/mariotaku/twidere/adapter/DirectMessagesConversationAdapter.java b/twidere/src/main/java/org/mariotaku/twidere/adapter/DirectMessagesConversationAdapter.java index 1a07ba35b..0e028d96d 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/adapter/DirectMessagesConversationAdapter.java +++ b/twidere/src/main/java/org/mariotaku/twidere/adapter/DirectMessagesConversationAdapter.java @@ -19,12 +19,6 @@ package org.mariotaku.twidere.adapter; -import static org.mariotaku.twidere.util.Utils.configBaseCardAdapter; -import static org.mariotaku.twidere.util.Utils.findDirectMessageInDatabases; -import static org.mariotaku.twidere.util.Utils.formatToLongTimeString; -import static org.mariotaku.twidere.util.Utils.openImage; -import static org.mariotaku.twidere.util.Utils.openUserProfile; - import android.app.Activity; import android.content.Context; import android.database.Cursor; @@ -45,208 +39,217 @@ import org.mariotaku.twidere.view.holder.DirectMessageConversationViewHolder; import java.util.Locale; +import static org.mariotaku.twidere.util.Utils.configBaseCardAdapter; +import static org.mariotaku.twidere.util.Utils.findDirectMessageInDatabases; +import static org.mariotaku.twidere.util.Utils.formatToLongTimeString; +import static org.mariotaku.twidere.util.Utils.openImage; +import static org.mariotaku.twidere.util.Utils.openUserProfile; + public class DirectMessagesConversationAdapter extends BaseCursorAdapter implements IDirectMessagesAdapter, - OnClickListener { - private ScaleType mImagePreviewScaleType; + OnClickListener { + private ScaleType mImagePreviewScaleType; - private final ImageLoaderWrapper mImageLoader; - private final Context mContext; - private final MultiSelectManager mMultiSelectManager; - private MenuButtonClickListener mListener; - private final ImageLoadingHandler mImageLoadingHandler; + private final ImageLoaderWrapper mImageLoader; + private final Context mContext; + private final MultiSelectManager mMultiSelectManager; + private MenuButtonClickListener mListener; + private final ImageLoadingHandler mImageLoadingHandler; - private boolean mAnimationEnabled = true; + private boolean mAnimationEnabled = true; - private int mMaxAnimationPosition; - private ParcelableDirectMessage.CursorIndices mIndices; + private int mMaxAnimationPosition; + private ParcelableDirectMessage.CursorIndices mIndices; - public DirectMessagesConversationAdapter(final Context context) { - super(context, R.layout.card_item_message_conversation, null, new String[0], new int[0], 0); - mContext = context; - final TwidereApplication app = TwidereApplication.getInstance(context); - mMultiSelectManager = app.getMultiSelectManager(); - mImageLoader = app.getImageLoaderWrapper(); - mImageLoadingHandler = new ImageLoadingHandler(R.id.incoming_image_preview_progress, - R.id.outgoing_image_preview_progress); - configBaseCardAdapter(context, this); - } + public DirectMessagesConversationAdapter(final Context context) { + super(context, R.layout.card_item_message_conversation, null, new String[0], new int[0], 0); + mContext = context; + final TwidereApplication app = TwidereApplication.getInstance(context); + mMultiSelectManager = app.getMultiSelectManager(); + mImageLoader = app.getImageLoaderWrapper(); + mImageLoadingHandler = new ImageLoadingHandler(R.id.incoming_image_preview_progress, + R.id.outgoing_image_preview_progress); + configBaseCardAdapter(context, this); + } - @Override - public void bindView(final View view, final Context context, final Cursor cursor) { - final int position = cursor.getPosition(); - final DirectMessageConversationViewHolder holder = (DirectMessageConversationViewHolder) view.getTag(); + @Override + public void bindView(final View view, final Context context, final Cursor cursor) { + final int position = cursor.getPosition(); + final DirectMessageConversationViewHolder holder = (DirectMessageConversationViewHolder) view.getTag(); - final String firstMedia = cursor.getString(mIndices.first_media); + final String firstMedia = cursor.getString(mIndices.first_media); - final boolean displayProfileImage = isDisplayProfileImage(); - final long accountId = cursor.getLong(mIndices.account_id); - final long timestamp = cursor.getLong(mIndices.message_timestamp); - final boolean is_outgoing = cursor.getInt(mIndices.is_outgoing) == 1; + final boolean displayProfileImage = isDisplayProfileImage(); + final long accountId = cursor.getLong(mIndices.account_id); + final long timestamp = cursor.getLong(mIndices.message_timestamp); + final boolean is_outgoing = cursor.getInt(mIndices.is_outgoing) == 1; - // Clear images in prder to prevent images in recycled view shown. - holder.incoming_profile_image.setImageDrawable(null); - holder.outgoing_profile_image.setImageDrawable(null); + holder.incoming_message_container.setVisibility(is_outgoing ? View.GONE : View.VISIBLE); + holder.outgoing_message_container.setVisibility(is_outgoing ? View.VISIBLE : View.GONE); + holder.setTextSize(getTextSize()); + holder.incoming_text.setText(Html.fromHtml(cursor.getString(mIndices.text))); + holder.outgoing_text.setText(Html.fromHtml(cursor.getString(mIndices.text))); + getLinkify().applyAllLinks(holder.incoming_text, accountId, false); + getLinkify().applyAllLinks(holder.outgoing_text, accountId, false); + holder.incoming_text.setMovementMethod(null); + holder.outgoing_text.setMovementMethod(null); + holder.incoming_time.setText(formatToLongTimeString(mContext, timestamp)); + holder.outgoing_time.setText(formatToLongTimeString(mContext, timestamp)); + holder.incoming_profile_image_container.setVisibility(displayProfileImage ? View.VISIBLE : View.GONE); + holder.outgoing_profile_image_container.setVisibility(displayProfileImage ? View.VISIBLE : View.GONE); + if (displayProfileImage) { + final String profile_image_url_string = cursor.getString(mIndices.sender_profile_image_url); + mImageLoader.displayProfileImage(holder.incoming_profile_image, profile_image_url_string); + mImageLoader.displayProfileImage(holder.outgoing_profile_image, profile_image_url_string); + holder.incoming_profile_image.setTag(position); + holder.outgoing_profile_image.setTag(position); + } else { + mImageLoader.cancelDisplayTask(holder.incoming_profile_image); + mImageLoader.cancelDisplayTask(holder.outgoing_profile_image); + } + if (position > mMaxAnimationPosition) { + if (mAnimationEnabled) { + view.startAnimation(holder.item_animation); + } + mMaxAnimationPosition = position; + } + holder.incoming_item_menu.setTag(position); + holder.outgoing_item_menu.setTag(position); - holder.incoming_message_container.setVisibility(is_outgoing ? View.GONE : View.VISIBLE); - holder.outgoing_message_container.setVisibility(is_outgoing ? View.VISIBLE : View.GONE); - holder.setTextSize(getTextSize()); - holder.incoming_text.setText(Html.fromHtml(cursor.getString(mIndices.text))); - holder.outgoing_text.setText(Html.fromHtml(cursor.getString(mIndices.text))); - getLinkify().applyAllLinks(holder.incoming_text, accountId, false); - getLinkify().applyAllLinks(holder.outgoing_text, accountId, false); - holder.incoming_text.setMovementMethod(null); - holder.outgoing_text.setMovementMethod(null); - holder.incoming_time.setText(formatToLongTimeString(mContext, timestamp)); - holder.outgoing_time.setText(formatToLongTimeString(mContext, timestamp)); - holder.incoming_profile_image_container.setVisibility(displayProfileImage ? View.VISIBLE : View.GONE); - holder.outgoing_profile_image_container.setVisibility(displayProfileImage ? View.VISIBLE : View.GONE); - if (displayProfileImage) { - final String profile_image_url_string = cursor.getString(mIndices.sender_profile_image_url); - mImageLoader.displayProfileImage(holder.incoming_profile_image, profile_image_url_string); - mImageLoader.displayProfileImage(holder.outgoing_profile_image, profile_image_url_string); - holder.incoming_profile_image.setTag(position); - holder.outgoing_profile_image.setTag(position); - } - if (position > mMaxAnimationPosition) { - if (mAnimationEnabled) { - view.startAnimation(holder.item_animation); - } - mMaxAnimationPosition = position; - } - holder.incoming_item_menu.setTag(position); - holder.outgoing_item_menu.setTag(position); + if (firstMedia == null) { + mImageLoader.cancelDisplayTask(holder.incoming_image_preview); + mImageLoader.cancelDisplayTask(holder.outgoing_image_preview); + holder.outgoing_image_preview_container.setVisibility(View.GONE); + holder.incoming_image_preview_container.setVisibility(View.GONE); + } else if (is_outgoing) { + mImageLoader.cancelDisplayTask(holder.incoming_image_preview); + holder.outgoing_image_preview_container.setVisibility(View.VISIBLE); + holder.incoming_image_preview_container.setVisibility(View.GONE); + if (mImagePreviewScaleType != null) { + holder.outgoing_image_preview.setScaleType(mImagePreviewScaleType); + } + if (!firstMedia.equals(mImageLoadingHandler.getLoadingUri(holder.outgoing_image_preview))) { + holder.outgoing_image_preview.setBackgroundResource(0); + mImageLoader.displayPreviewImageWithCredentials(holder.outgoing_image_preview, firstMedia, accountId, + mImageLoadingHandler); + } + holder.outgoing_image_preview.setTag(position); + } else { + mImageLoader.cancelDisplayTask(holder.outgoing_image_preview); + holder.outgoing_image_preview_container.setVisibility(View.GONE); + holder.incoming_image_preview_container.setVisibility(View.VISIBLE); + if (mImagePreviewScaleType != null) { + holder.incoming_image_preview.setScaleType(mImagePreviewScaleType); + } + if (!firstMedia.equals(mImageLoadingHandler.getLoadingUri(holder.incoming_image_preview))) { + holder.incoming_image_preview.setBackgroundResource(0); + mImageLoader.displayPreviewImageWithCredentials(holder.incoming_image_preview, firstMedia, accountId, + mImageLoadingHandler); + } + holder.incoming_image_preview.setTag(position); + } + super.bindView(view, context, cursor); + } - if (firstMedia == null) { - holder.outgoing_image_preview_container.setVisibility(View.GONE); - holder.incoming_image_preview_container.setVisibility(View.GONE); - } else if (is_outgoing) { - holder.outgoing_image_preview_container.setVisibility(View.VISIBLE); - holder.incoming_image_preview_container.setVisibility(View.GONE); - if (mImagePreviewScaleType != null) { - holder.outgoing_image_preview.setScaleType(mImagePreviewScaleType); - } - if (!firstMedia.equals(mImageLoadingHandler.getLoadingUri(holder.outgoing_image_preview))) { - holder.outgoing_image_preview.setBackgroundResource(0); - mImageLoader.displayPreviewImageWithCredentials(holder.outgoing_image_preview, firstMedia, accountId, - mImageLoadingHandler); - } - holder.outgoing_image_preview.setTag(position); - } else { - holder.outgoing_image_preview_container.setVisibility(View.GONE); - holder.incoming_image_preview_container.setVisibility(View.VISIBLE); - if (mImagePreviewScaleType != null) { - holder.incoming_image_preview.setScaleType(mImagePreviewScaleType); - } - if (!firstMedia.equals(mImageLoadingHandler.getLoadingUri(holder.incoming_image_preview))) { - holder.incoming_image_preview.setBackgroundResource(0); - mImageLoader.displayPreviewImageWithCredentials(holder.incoming_image_preview, firstMedia, accountId, - mImageLoadingHandler); - } - holder.incoming_image_preview.setTag(position); - } - super.bindView(view, context, cursor); - } + @Override + public ParcelableDirectMessage findItem(final long id) { + for (int i = 0, count = getCount(); i < count; i++) { + if (getItemId(i) == id) return getDirectMessage(i); + } + return null; + } - @Override - public ParcelableDirectMessage findItem(final long id) { - for (int i = 0, count = getCount(); i < count; i++) { - if (getItemId(i) == id) return getDirectMessage(i); - } - return null; - } + public ParcelableDirectMessage getDirectMessage(final int position) { + final Cursor c = getCursor(); + if (c == null || c.isClosed()) return null; + c.moveToPosition(position); + final long account_id = c.getLong(mIndices.account_id); + final long message_id = c.getLong(mIndices.message_id); + return findDirectMessageInDatabases(mContext, account_id, message_id); + } - public ParcelableDirectMessage getDirectMessage(final int position) { - final Cursor c = getCursor(); - if (c == null || c.isClosed()) return null; - c.moveToPosition(position); - final long account_id = c.getLong(mIndices.account_id); - final long message_id = c.getLong(mIndices.message_id); - return findDirectMessageInDatabases(mContext, account_id, message_id); - } + @Override + public View newView(final Context context, final Cursor cursor, final ViewGroup parent) { + final View view = super.newView(context, cursor, parent); + final Object tag = view.getTag(); + if (!(tag instanceof DirectMessageConversationViewHolder)) { + final DirectMessageConversationViewHolder holder = new DirectMessageConversationViewHolder(view); + holder.incoming_profile_image.setOnClickListener(this); + holder.outgoing_profile_image.setOnClickListener(this); + holder.incoming_item_menu.setOnClickListener(this); + holder.outgoing_item_menu.setOnClickListener(this); + holder.incoming_image_preview.setOnClickListener(this); + holder.outgoing_image_preview.setOnClickListener(this); + view.setTag(holder); + } + return view; + } - @Override - public View newView(final Context context, final Cursor cursor, final ViewGroup parent) { - final View view = super.newView(context, cursor, parent); - final Object tag = view.getTag(); - if (!(tag instanceof DirectMessageConversationViewHolder)) { - final DirectMessageConversationViewHolder holder = new DirectMessageConversationViewHolder(view); - holder.incoming_profile_image.setOnClickListener(this); - holder.outgoing_profile_image.setOnClickListener(this); - holder.incoming_item_menu.setOnClickListener(this); - holder.outgoing_item_menu.setOnClickListener(this); - holder.incoming_image_preview.setOnClickListener(this); - holder.outgoing_image_preview.setOnClickListener(this); - view.setTag(holder); - } - return view; - } + @Override + public void onClick(final View view) { + if (mMultiSelectManager.isActive()) return; + final Object tag = view.getTag(); + final int position = tag instanceof Integer ? (Integer) tag : -1; + if (position == -1) return; + switch (view.getId()) { + case R.id.incoming_profile_image: + case R.id.outgoing_profile_image: { + final ParcelableDirectMessage message = getDirectMessage(position); + if (message == null) return; + if (mContext instanceof Activity) { + openUserProfile((Activity) mContext, message.account_id, message.sender_id, + message.sender_screen_name); + } + break; + } + case R.id.incoming_item_menu: + case R.id.outgoing_item_menu: { + if (position == -1 || mListener == null) return; + mListener.onMenuButtonClick(view, position, getItemId(position)); + break; + } + case R.id.incoming_image_preview: + case R.id.outgoing_image_preview: { + if (position == -1) return; + final ParcelableDirectMessage message = getDirectMessage(position); + if (message == null || message.first_media == null) return; + openImage(mContext, message.account_id, message.first_media, false); + } + } + } - @Override - public void onClick(final View view) { - if (mMultiSelectManager.isActive()) return; - final Object tag = view.getTag(); - final int position = tag instanceof Integer ? (Integer) tag : -1; - if (position == -1) return; - switch (view.getId()) { - case R.id.incoming_profile_image: - case R.id.outgoing_profile_image: { - final ParcelableDirectMessage message = getDirectMessage(position); - if (message == null) return; - if (mContext instanceof Activity) { - openUserProfile((Activity) mContext, message.account_id, message.sender_id, - message.sender_screen_name); - } - break; - } - case R.id.incoming_item_menu: - case R.id.outgoing_item_menu: { - if (position == -1 || mListener == null) return; - mListener.onMenuButtonClick(view, position, getItemId(position)); - break; - } - case R.id.incoming_image_preview: - case R.id.outgoing_image_preview: { - if (position == -1) return; - final ParcelableDirectMessage message = getDirectMessage(position); - if (message == null || message.first_media == null) return; - openImage(mContext, message.account_id, message.first_media, false); - } - } - } + @Override + public void setAnimationEnabled(final boolean anim) { + mAnimationEnabled = anim; + } - @Override - public void setAnimationEnabled(final boolean anim) { - mAnimationEnabled = anim; - } + @Override + public void setDisplayImagePreview(final boolean display) { + // Images in DM are always enabled + } - @Override - public void setDisplayImagePreview(final boolean display) { - // Images in DM are always enabled - } + @Override + public void setImagePreviewScaleType(final String scaleTypeString) { + final ScaleType scaleType = ScaleType.valueOf(scaleTypeString.toUpperCase(Locale.US)); + mImagePreviewScaleType = scaleType; + } - @Override - public void setImagePreviewScaleType(final String scaleTypeString) { - final ScaleType scaleType = ScaleType.valueOf(scaleTypeString.toUpperCase(Locale.US)); - mImagePreviewScaleType = scaleType; - } + @Override + public void setMaxAnimationPosition(final int position) { + mMaxAnimationPosition = position; + } - @Override - public void setMaxAnimationPosition(final int position) { - mMaxAnimationPosition = position; - } + @Override + public void setMenuButtonClickListener(final MenuButtonClickListener listener) { + mListener = listener; + } - @Override - public void setMenuButtonClickListener(final MenuButtonClickListener listener) { - mListener = listener; - } - - @Override - public Cursor swapCursor(final Cursor cursor) { - if (cursor != null) { - mIndices = new ParcelableDirectMessage.CursorIndices(cursor); - } else { - mIndices = null; - } - return super.swapCursor(cursor); - } + @Override + public Cursor swapCursor(final Cursor cursor) { + if (cursor != null) { + mIndices = new ParcelableDirectMessage.CursorIndices(cursor); + } else { + mIndices = null; + } + return super.swapCursor(cursor); + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/adapter/DraftsAdapter.java b/twidere/src/main/java/org/mariotaku/twidere/adapter/DraftsAdapter.java index 445e56722..6a07ebe80 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/adapter/DraftsAdapter.java +++ b/twidere/src/main/java/org/mariotaku/twidere/adapter/DraftsAdapter.java @@ -68,8 +68,11 @@ public class DraftsAdapter extends SimpleCursorAdapter { holder.image_preview_container.setVisibility(TextUtils.isEmpty(mediaUri) ? View.GONE : View.VISIBLE); if (mediaUri != null && !mediaUri.equals(mImageLoadingHandler.getLoadingUri(holder.image_preview))) { mImageLoader.displayPreviewImage(holder.image_preview, mediaUri, mImageLoadingHandler); - } + }else { + mImageLoader.cancelDisplayTask(holder.image_preview); + } } else { + mImageLoader.cancelDisplayTask(holder.image_preview); holder.image_preview_container.setVisibility(View.GONE); } holder.content.drawEnd(getAccountColors(context, accountIds)); diff --git a/twidere/src/main/java/org/mariotaku/twidere/adapter/MediaPreviewAdapter.java b/twidere/src/main/java/org/mariotaku/twidere/adapter/MediaPreviewAdapter.java index 0f30b8b82..40e962069 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/adapter/MediaPreviewAdapter.java +++ b/twidere/src/main/java/org/mariotaku/twidere/adapter/MediaPreviewAdapter.java @@ -62,6 +62,7 @@ public class MediaPreviewAdapter extends ArrayAdapter implements Constan if (mIsPossiblySensitive && !mPreferences.getBoolean(KEY_DISPLAY_SENSITIVE_CONTENTS, false)) { view.findViewById(R.id.image_preview_progress).setVisibility(View.GONE); image_view.setBackgroundResource(R.drawable.image_preview_nsfw); + mImageLoader.cancelDisplayTask(image_view); } else if (!link.equals(mImageLoadingHandler.getLoadingUri(image_view))) { image_view.setBackgroundResource(0); mImageLoader.displayPreviewImage(image_view, link, mImageLoadingHandler); diff --git a/twidere/src/main/java/org/mariotaku/twidere/adapter/ParcelableStatusesAdapter.java b/twidere/src/main/java/org/mariotaku/twidere/adapter/ParcelableStatusesAdapter.java index 9740e9ca0..effcf49d3 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/adapter/ParcelableStatusesAdapter.java +++ b/twidere/src/main/java/org/mariotaku/twidere/adapter/ParcelableStatusesAdapter.java @@ -184,17 +184,12 @@ public class ParcelableStatusesAdapter extends BaseArrayAdapter mMaxAnimationPosition) { if (mAnimationEnabled) { diff --git a/twidere/src/main/java/org/mariotaku/twidere/adapter/ParcelableUserListsAdapter.java b/twidere/src/main/java/org/mariotaku/twidere/adapter/ParcelableUserListsAdapter.java index b34d6c736..c36771ecc 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/adapter/ParcelableUserListsAdapter.java +++ b/twidere/src/main/java/org/mariotaku/twidere/adapter/ParcelableUserListsAdapter.java @@ -19,11 +19,6 @@ package org.mariotaku.twidere.adapter; -import static org.mariotaku.twidere.util.Utils.configBaseCardAdapter; -import static org.mariotaku.twidere.util.Utils.getDisplayName; -import static org.mariotaku.twidere.util.Utils.getLocalizedNumber; -import static org.mariotaku.twidere.util.Utils.openUserProfile; - import android.app.Activity; import android.content.Context; import android.text.TextUtils; @@ -44,148 +39,153 @@ import org.mariotaku.twidere.view.iface.ICardItemView.OnOverflowIconClickListene import java.util.List; import java.util.Locale; +import static org.mariotaku.twidere.util.Utils.configBaseCardAdapter; +import static org.mariotaku.twidere.util.Utils.getDisplayName; +import static org.mariotaku.twidere.util.Utils.getLocalizedNumber; +import static org.mariotaku.twidere.util.Utils.openUserProfile; + public class ParcelableUserListsAdapter extends BaseArrayAdapter implements IBaseCardAdapter, - OnClickListener, OnOverflowIconClickListener { + OnClickListener, OnOverflowIconClickListener { - private final Context mContext; - private final ImageLoaderWrapper mProfileImageLoader; - private final MultiSelectManager mMultiSelectManager; - private final Locale mLocale; + private final Context mContext; + private final ImageLoaderWrapper mImageLoader; + private final MultiSelectManager mMultiSelectManager; + private final Locale mLocale; - private MenuButtonClickListener mListener; + private MenuButtonClickListener mListener; - private boolean mAnimationEnabled; - private int mMaxAnimationPosition; - private final boolean mPlainList; + private boolean mAnimationEnabled; + private int mMaxAnimationPosition; + private final boolean mPlainList; - public ParcelableUserListsAdapter(final Context context) { - this(context, Utils.isCompactCards(context), Utils.isPlainListStyle(context)); - } + public ParcelableUserListsAdapter(final Context context) { + this(context, Utils.isCompactCards(context), Utils.isPlainListStyle(context)); + } - public ParcelableUserListsAdapter(final Context context, final boolean compactCards, final boolean plainList) { - super(context, getItemResource(compactCards)); - mPlainList = plainList; - mContext = context; - mLocale = context.getResources().getConfiguration().locale; - final TwidereApplication app = TwidereApplication.getInstance(context); - mProfileImageLoader = app.getImageLoaderWrapper(); - mMultiSelectManager = app.getMultiSelectManager(); - configBaseCardAdapter(context, this); - } + public ParcelableUserListsAdapter(final Context context, final boolean compactCards, final boolean plainList) { + super(context, getItemResource(compactCards)); + mPlainList = plainList; + mContext = context; + mLocale = context.getResources().getConfiguration().locale; + final TwidereApplication app = TwidereApplication.getInstance(context); + mImageLoader = app.getImageLoaderWrapper(); + mMultiSelectManager = app.getMultiSelectManager(); + configBaseCardAdapter(context, this); + } - public void appendData(final List data) { - setData(data, false); - } + public void appendData(final List data) { + setData(data, false); + } - @Override - public long getItemId(final int position) { - return getItem(position) != null ? getItem(position).id : -1; - } + @Override + public long getItemId(final int position) { + return getItem(position) != null ? getItem(position).id : -1; + } - @Override - public View getView(final int position, final View convertView, final ViewGroup parent) { - final View view = super.getView(position, convertView, parent); - final Object tag = view.getTag(); - final UserListViewHolder holder; - if (tag instanceof UserListViewHolder) { - holder = (UserListViewHolder) tag; - } else { - holder = new UserListViewHolder(view); - holder.profile_image.setOnClickListener(this); - holder.content.setOnOverflowIconClickListener(this); - if (mPlainList) { - ((View) holder.content).setPadding(0, 0, 0, 0); - holder.content.setItemBackground(null); - } - view.setTag(holder); - } + @Override + public View getView(final int position, final View convertView, final ViewGroup parent) { + final View view = super.getView(position, convertView, parent); + final Object tag = view.getTag(); + final UserListViewHolder holder; + if (tag instanceof UserListViewHolder) { + holder = (UserListViewHolder) tag; + } else { + holder = new UserListViewHolder(view); + holder.profile_image.setOnClickListener(this); + holder.content.setOnOverflowIconClickListener(this); + if (mPlainList) { + ((View) holder.content).setPadding(0, 0, 0, 0); + holder.content.setItemBackground(null); + } + view.setTag(holder); + } - holder.position = position; - // Clear images in prder to prevent images in recycled view shown. - holder.profile_image.setImageDrawable(null); + holder.position = position; - final ParcelableUserList user_list = getItem(position); - final String display_name = getDisplayName(mContext, user_list.user_id, user_list.user_name, - user_list.user_screen_name, isDisplayNameFirst(), isNicknameOnly(), false); - holder.setTextSize(getTextSize()); - holder.name.setText(user_list.name); - holder.created_by.setText(mContext.getString(R.string.created_by, display_name)); - holder.description.setVisibility(TextUtils.isEmpty(user_list.description) ? View.GONE : View.VISIBLE); - holder.description.setText(user_list.description); - holder.members_count.setText(getLocalizedNumber(mLocale, user_list.members_count)); - holder.subscribers_count.setText(getLocalizedNumber(mLocale, user_list.subscribers_count)); - holder.profile_image.setVisibility(isDisplayProfileImage() ? View.VISIBLE : View.GONE); - if (isDisplayProfileImage()) { - mProfileImageLoader.displayProfileImage(holder.profile_image, user_list.user_profile_image_url); - } - holder.profile_image.setTag(position); - if (position > mMaxAnimationPosition) { - if (mAnimationEnabled) { - view.startAnimation(holder.item_animation); - } - mMaxAnimationPosition = position; - } - return view; - } + final ParcelableUserList user_list = getItem(position); + final String display_name = getDisplayName(mContext, user_list.user_id, user_list.user_name, + user_list.user_screen_name, isDisplayNameFirst(), isNicknameOnly(), false); + holder.setTextSize(getTextSize()); + holder.name.setText(user_list.name); + holder.created_by.setText(mContext.getString(R.string.created_by, display_name)); + holder.description.setVisibility(TextUtils.isEmpty(user_list.description) ? View.GONE : View.VISIBLE); + holder.description.setText(user_list.description); + holder.members_count.setText(getLocalizedNumber(mLocale, user_list.members_count)); + holder.subscribers_count.setText(getLocalizedNumber(mLocale, user_list.subscribers_count)); + holder.profile_image.setVisibility(isDisplayProfileImage() ? View.VISIBLE : View.GONE); + if (isDisplayProfileImage()) { + mImageLoader.displayProfileImage(holder.profile_image, user_list.user_profile_image_url); + } else { + mImageLoader.cancelDisplayTask(holder.profile_image); + } + holder.profile_image.setTag(position); + if (position > mMaxAnimationPosition) { + if (mAnimationEnabled) { + view.startAnimation(holder.item_animation); + } + mMaxAnimationPosition = position; + } + return view; + } - @Override - public void onClick(final View view) { - if (mMultiSelectManager.isActive()) return; - final Object tag = view.getTag(); - final int position = tag instanceof Integer ? (Integer) tag : -1; - if (position == -1) return; - switch (view.getId()) { - case R.id.profile_image: { - if (mContext instanceof Activity) { - final ParcelableUserList item = getItem(position); - openUserProfile((Activity) mContext, item.account_id, item.user_id, item.user_screen_name); - } - break; - } - } - } + @Override + public void onClick(final View view) { + if (mMultiSelectManager.isActive()) return; + final Object tag = view.getTag(); + final int position = tag instanceof Integer ? (Integer) tag : -1; + if (position == -1) return; + switch (view.getId()) { + case R.id.profile_image: { + if (mContext instanceof Activity) { + final ParcelableUserList item = getItem(position); + openUserProfile((Activity) mContext, item.account_id, item.user_id, item.user_screen_name); + } + break; + } + } + } - @Override - public void onOverflowIconClick(final View view) { - if (mMultiSelectManager.isActive()) return; - final Object tag = view.getTag(); - if (tag instanceof UserListViewHolder) { - final UserListViewHolder holder = (UserListViewHolder) tag; - final int position = holder.position; - if (position == -1 || mListener == null) return; - mListener.onMenuButtonClick(view, position, getItemId(position)); - } - } + @Override + public void onOverflowIconClick(final View view) { + if (mMultiSelectManager.isActive()) return; + final Object tag = view.getTag(); + if (tag instanceof UserListViewHolder) { + final UserListViewHolder holder = (UserListViewHolder) tag; + final int position = holder.position; + if (position == -1 || mListener == null) return; + mListener.onMenuButtonClick(view, position, getItemId(position)); + } + } - @Override - public void setAnimationEnabled(final boolean anim) { - if (mAnimationEnabled == anim) return; - mAnimationEnabled = anim; - } + @Override + public void setAnimationEnabled(final boolean anim) { + if (mAnimationEnabled == anim) return; + mAnimationEnabled = anim; + } - public void setData(final List data, final boolean clear_old) { - if (clear_old) { - clear(); - } - if (data == null) return; - for (final ParcelableUserList user : data) { - if (clear_old || findItem(user.id) == null) { - add(user); - } - } - } + public void setData(final List data, final boolean clear_old) { + if (clear_old) { + clear(); + } + if (data == null) return; + for (final ParcelableUserList user : data) { + if (clear_old || findItem(user.id) == null) { + add(user); + } + } + } - @Override - public void setMaxAnimationPosition(final int position) { - mMaxAnimationPosition = position; - } + @Override + public void setMaxAnimationPosition(final int position) { + mMaxAnimationPosition = position; + } - @Override - public void setMenuButtonClickListener(final MenuButtonClickListener listener) { - mListener = listener; - } + @Override + public void setMenuButtonClickListener(final MenuButtonClickListener listener) { + mListener = listener; + } - private static int getItemResource(final boolean compactCards) { - return compactCards ? R.layout.card_item_user_list_compact : R.layout.card_item_user_list; - } + private static int getItemResource(final boolean compactCards) { + return compactCards ? R.layout.card_item_user_list_compact : R.layout.card_item_user_list; + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/adapter/ParcelableUsersAdapter.java b/twidere/src/main/java/org/mariotaku/twidere/adapter/ParcelableUsersAdapter.java index 3f6413b76..b611da3cc 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/adapter/ParcelableUsersAdapter.java +++ b/twidere/src/main/java/org/mariotaku/twidere/adapter/ParcelableUsersAdapter.java @@ -19,13 +19,6 @@ package org.mariotaku.twidere.adapter; -import static org.mariotaku.twidere.util.UserColorNicknameUtils.getUserColor; -import static org.mariotaku.twidere.util.UserColorNicknameUtils.getUserNickname; -import static org.mariotaku.twidere.util.Utils.configBaseCardAdapter; -import static org.mariotaku.twidere.util.Utils.getAccountColor; -import static org.mariotaku.twidere.util.Utils.getLocalizedNumber; -import static org.mariotaku.twidere.util.Utils.getUserTypeIconRes; - import android.content.Context; import android.text.TextUtils; import android.view.View; @@ -44,148 +37,153 @@ import org.mariotaku.twidere.view.iface.ICardItemView.OnOverflowIconClickListene import java.util.List; import java.util.Locale; +import static org.mariotaku.twidere.util.UserColorNicknameUtils.getUserColor; +import static org.mariotaku.twidere.util.UserColorNicknameUtils.getUserNickname; +import static org.mariotaku.twidere.util.Utils.configBaseCardAdapter; +import static org.mariotaku.twidere.util.Utils.getAccountColor; +import static org.mariotaku.twidere.util.Utils.getLocalizedNumber; +import static org.mariotaku.twidere.util.Utils.getUserTypeIconRes; + public class ParcelableUsersAdapter extends BaseArrayAdapter implements IBaseCardAdapter, - OnOverflowIconClickListener { + OnOverflowIconClickListener { - private final ImageLoaderWrapper mProfileImageLoader; - private final MultiSelectManager mMultiSelectManager; - private final Context mContext; - private MenuButtonClickListener mListener; + private final ImageLoaderWrapper mProfileImageLoader; + private final MultiSelectManager mMultiSelectManager; + private final Context mContext; + private MenuButtonClickListener mListener; - private final Locale mLocale; - private final boolean mPlainList; + private final Locale mLocale; + private final boolean mPlainList; - private boolean mAnimationEnabled; - private int mMaxAnimationPosition; + private boolean mAnimationEnabled; + private int mMaxAnimationPosition; - public ParcelableUsersAdapter(final Context context) { - this(context, Utils.isCompactCards(context), Utils.isPlainListStyle(context)); - } + public ParcelableUsersAdapter(final Context context) { + this(context, Utils.isCompactCards(context), Utils.isPlainListStyle(context)); + } - public ParcelableUsersAdapter(final Context context, final boolean compactCards, final boolean plainList) { - super(context, getItemResource(compactCards)); - mPlainList = plainList; - mContext = context; - mLocale = context.getResources().getConfiguration().locale; - final TwidereApplication app = TwidereApplication.getInstance(context); - mProfileImageLoader = app.getImageLoaderWrapper(); - mMultiSelectManager = app.getMultiSelectManager(); - configBaseCardAdapter(context, this); - } + public ParcelableUsersAdapter(final Context context, final boolean compactCards, final boolean plainList) { + super(context, getItemResource(compactCards)); + mPlainList = plainList; + mContext = context; + mLocale = context.getResources().getConfiguration().locale; + final TwidereApplication app = TwidereApplication.getInstance(context); + mProfileImageLoader = app.getImageLoaderWrapper(); + mMultiSelectManager = app.getMultiSelectManager(); + configBaseCardAdapter(context, this); + } - @Override - public long getItemId(final int position) { - return getItem(position) != null ? getItem(position).id : -1; - } + @Override + public long getItemId(final int position) { + return getItem(position) != null ? getItem(position).id : -1; + } - @Override - public View getView(final int position, final View convertView, final ViewGroup parent) { - final View view = super.getView(position, convertView, parent); - final Object tag = view.getTag(); - UserViewHolder holder = null; - if (tag instanceof UserViewHolder) { - holder = (UserViewHolder) tag; - } else { - holder = new UserViewHolder(view); - holder.content.setOnOverflowIconClickListener(this); - if (mPlainList) { - ((View) holder.content).setPadding(0, 0, 0, 0); - holder.content.setItemBackground(null); - } - view.setTag(holder); - } + @Override + public View getView(final int position, final View convertView, final ViewGroup parent) { + final View view = super.getView(position, convertView, parent); + final Object tag = view.getTag(); + final UserViewHolder holder; + if (tag instanceof UserViewHolder) { + holder = (UserViewHolder) tag; + } else { + holder = new UserViewHolder(view); + holder.content.setOnOverflowIconClickListener(this); + if (mPlainList) { + ((View) holder.content).setPadding(0, 0, 0, 0); + holder.content.setItemBackground(null); + } + view.setTag(holder); + } - // Clear images in prder to prevent images in recycled view shown. - holder.profile_image.setImageDrawable(null); - holder.position = position; + holder.position = position; - final ParcelableUser user = getItem(position); + final ParcelableUser user = getItem(position); - final boolean showAccountColor = isShowAccountColor(); + final boolean showAccountColor = isShowAccountColor(); - holder.setAccountColorEnabled(showAccountColor); + holder.setAccountColorEnabled(showAccountColor); - if (showAccountColor) { - holder.setAccountColor(getAccountColor(mContext, user.account_id)); - } + if (showAccountColor) { + holder.setAccountColor(getAccountColor(mContext, user.account_id)); + } - holder.setUserColor(getUserColor(mContext, user.id)); + holder.setUserColor(getUserColor(mContext, user.id)); - holder.setTextSize(getTextSize()); - holder.name.setCompoundDrawablesWithIntrinsicBounds(0, 0, - getUserTypeIconRes(user.is_verified, user.is_protected), 0); - final String nick = getUserNickname(mContext, user.id); - holder.name.setText(TextUtils.isEmpty(nick) ? user.name : isNicknameOnly() ? nick : mContext.getString( - R.string.name_with_nickname, user.name, nick)); - holder.screen_name.setText("@" + user.screen_name); - holder.description.setVisibility(TextUtils.isEmpty(user.description_unescaped) ? View.GONE : View.VISIBLE); - holder.description.setText(user.description_unescaped); - holder.location.setVisibility(TextUtils.isEmpty(user.location) ? View.GONE : View.VISIBLE); - holder.location.setText(user.location); - holder.url.setVisibility(TextUtils.isEmpty(user.url_expanded) ? View.GONE : View.VISIBLE); - holder.url.setText(user.url_expanded); - holder.statuses_count.setText(getLocalizedNumber(mLocale, user.statuses_count)); - holder.followers_count.setText(getLocalizedNumber(mLocale, user.followers_count)); - holder.friends_count.setText(getLocalizedNumber(mLocale, user.friends_count)); - holder.profile_image.setVisibility(isDisplayProfileImage() ? View.VISIBLE : View.GONE); - if (isDisplayProfileImage()) { - mProfileImageLoader.displayProfileImage(holder.profile_image, user.profile_image_url); - } - if (position > mMaxAnimationPosition) { - if (mAnimationEnabled) { - view.startAnimation(holder.item_animation); - } - mMaxAnimationPosition = position; - } - return view; - } + holder.setTextSize(getTextSize()); + holder.name.setCompoundDrawablesWithIntrinsicBounds(0, 0, + getUserTypeIconRes(user.is_verified, user.is_protected), 0); + final String nick = getUserNickname(mContext, user.id); + holder.name.setText(TextUtils.isEmpty(nick) ? user.name : isNicknameOnly() ? nick : mContext.getString( + R.string.name_with_nickname, user.name, nick)); + holder.screen_name.setText("@" + user.screen_name); + holder.description.setVisibility(TextUtils.isEmpty(user.description_unescaped) ? View.GONE : View.VISIBLE); + holder.description.setText(user.description_unescaped); + holder.location.setVisibility(TextUtils.isEmpty(user.location) ? View.GONE : View.VISIBLE); + holder.location.setText(user.location); + holder.url.setVisibility(TextUtils.isEmpty(user.url_expanded) ? View.GONE : View.VISIBLE); + holder.url.setText(user.url_expanded); + holder.statuses_count.setText(getLocalizedNumber(mLocale, user.statuses_count)); + holder.followers_count.setText(getLocalizedNumber(mLocale, user.followers_count)); + holder.friends_count.setText(getLocalizedNumber(mLocale, user.friends_count)); + holder.profile_image.setVisibility(isDisplayProfileImage() ? View.VISIBLE : View.GONE); + if (isDisplayProfileImage()) { + mProfileImageLoader.displayProfileImage(holder.profile_image, user.profile_image_url); + } + if (position > mMaxAnimationPosition) { + if (mAnimationEnabled) { + view.startAnimation(holder.item_animation); + } + mMaxAnimationPosition = position; + } + return view; + } - @Override - public void onOverflowIconClick(final View view) { - if (mMultiSelectManager.isActive()) return; - final Object tag = view.getTag(); - if (tag instanceof UserViewHolder) { - final UserViewHolder holder = (UserViewHolder) tag; - final int position = holder.position; - if (position == -1 || mListener == null) return; - mListener.onMenuButtonClick(view, position, getItemId(position)); - } - } + @Override + public void onOverflowIconClick(final View view) { + if (mMultiSelectManager.isActive()) return; + final Object tag = view.getTag(); + if (tag instanceof UserViewHolder) { + final UserViewHolder holder = (UserViewHolder) tag; + final int position = holder.position; + if (position == -1 || mListener == null) return; + mListener.onMenuButtonClick(view, position, getItemId(position)); + } + } - @Override - public void setAnimationEnabled(final boolean anim) { - if (mAnimationEnabled == anim) return; - mAnimationEnabled = anim; - } + @Override + public void setAnimationEnabled(final boolean anim) { + if (mAnimationEnabled == anim) return; + mAnimationEnabled = anim; + } - public void setData(final List data) { - setData(data, false); - } + public void setData(final List data) { + setData(data, false); + } - public void setData(final List data, final boolean clear_old) { - if (clear_old) { - clear(); - } - if (data == null) return; - for (final ParcelableUser user : data) { - if (clear_old || findItem(user.id) == null) { - add(user); - } - } - } + public void setData(final List data, final boolean clear_old) { + if (clear_old) { + clear(); + } + if (data == null) return; + for (final ParcelableUser user : data) { + if (clear_old || findItem(user.id) == null) { + add(user); + } + } + } - @Override - public void setMaxAnimationPosition(final int position) { - mMaxAnimationPosition = position; - } + @Override + public void setMaxAnimationPosition(final int position) { + mMaxAnimationPosition = position; + } - @Override - public void setMenuButtonClickListener(final MenuButtonClickListener listener) { - mListener = listener; - } + @Override + public void setMenuButtonClickListener(final MenuButtonClickListener listener) { + mListener = listener; + } - private static int getItemResource(final boolean compactCards) { - return compactCards ? R.layout.card_item_user_compact : R.layout.card_item_user; - } + private static int getItemResource(final boolean compactCards) { + return compactCards ? R.layout.card_item_user_compact : R.layout.card_item_user; + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/adapter/SimpleParcelableUserListsAdapter.java b/twidere/src/main/java/org/mariotaku/twidere/adapter/SimpleParcelableUserListsAdapter.java index e6f052096..2cff260d7 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/adapter/SimpleParcelableUserListsAdapter.java +++ b/twidere/src/main/java/org/mariotaku/twidere/adapter/SimpleParcelableUserListsAdapter.java @@ -19,9 +19,6 @@ package org.mariotaku.twidere.adapter; -import static org.mariotaku.twidere.util.Utils.configBaseAdapter; -import static org.mariotaku.twidere.util.Utils.getDisplayName; - import android.content.Context; import android.view.View; import android.view.ViewGroup; @@ -35,65 +32,70 @@ import org.mariotaku.twidere.view.holder.TwoLineWithIconViewHolder; import java.util.List; +import static org.mariotaku.twidere.util.Utils.configBaseAdapter; +import static org.mariotaku.twidere.util.Utils.getDisplayName; + public class SimpleParcelableUserListsAdapter extends BaseArrayAdapter implements IBaseAdapter { - private final Context mContext; - private final ImageLoaderWrapper mProfileImageLoader; + private final Context mContext; + private final ImageLoaderWrapper mImageLoader; - public SimpleParcelableUserListsAdapter(final Context context) { - super(context, R.layout.list_item_two_line); - mContext = context; - final TwidereApplication app = TwidereApplication.getInstance(context); - mProfileImageLoader = app.getImageLoaderWrapper(); - configBaseAdapter(context, this); - } + public SimpleParcelableUserListsAdapter(final Context context) { + super(context, R.layout.list_item_two_line); + mContext = context; + final TwidereApplication app = TwidereApplication.getInstance(context); + mImageLoader = app.getImageLoaderWrapper(); + configBaseAdapter(context, this); + } - public void appendData(final List data) { - setData(data, false); - } + public void appendData(final List data) { + setData(data, false); + } - @Override - public long getItemId(final int position) { - return getItem(position) != null ? getItem(position).id : -1; - } + @Override + public long getItemId(final int position) { + return getItem(position) != null ? getItem(position).id : -1; + } - @Override - public View getView(final int position, final View convertView, final ViewGroup parent) { - final View view = super.getView(position, convertView, parent); - final Object tag = view.getTag(); - final TwoLineWithIconViewHolder holder; - if (tag instanceof TwoLineWithIconViewHolder) { - holder = (TwoLineWithIconViewHolder) tag; - } else { - holder = new TwoLineWithIconViewHolder(view); - view.setTag(holder); - } + @Override + public View getView(final int position, final View convertView, final ViewGroup parent) { + final View view = super.getView(position, convertView, parent); + final Object tag = view.getTag(); + final TwoLineWithIconViewHolder holder; + if (tag instanceof TwoLineWithIconViewHolder) { + holder = (TwoLineWithIconViewHolder) tag; + } else { + holder = new TwoLineWithIconViewHolder(view); + view.setTag(holder); + } - // Clear images in prder to prevent images in recycled view shown. - holder.icon.setImageDrawable(null); + // Clear images in prder to prevent images in recycled view shown. + holder.icon.setImageDrawable(null); - final ParcelableUserList user_list = getItem(position); - final String display_name = getDisplayName(mContext, user_list.user_id, user_list.user_name, - user_list.user_screen_name, isDisplayNameFirst(), isNicknameOnly(), false); - holder.text1.setText(user_list.name); - holder.text2.setText(mContext.getString(R.string.created_by, display_name)); - holder.icon.setVisibility(isDisplayProfileImage() ? View.VISIBLE : View.GONE); - if (isDisplayProfileImage()) { - mProfileImageLoader.displayProfileImage(holder.icon, user_list.user_profile_image_url); - } - return view; - } + final ParcelableUserList user_list = getItem(position); + final String display_name = getDisplayName(mContext, user_list.user_id, user_list.user_name, + user_list.user_screen_name, isDisplayNameFirst(), isNicknameOnly(), false); + holder.text1.setText(user_list.name); + holder.text2.setText(mContext.getString(R.string.created_by, display_name)); + holder.icon.setVisibility(isDisplayProfileImage() ? View.VISIBLE : View.GONE); + if (isDisplayProfileImage()) { + mImageLoader.displayProfileImage(holder.icon, user_list.user_profile_image_url); + } else { + mImageLoader.cancelDisplayTask(holder.icon); + } + return view; + } - public void setData(final List data, final boolean clear_old) { - if (clear_old) { - clear(); - } - if (data == null) return; - for (final ParcelableUserList user : data) { - if (clear_old || findItem(user.id) == null) { - add(user); - } - } - } + public void setData(final List data, final boolean clear_old) { + if (clear_old) { + clear(); + } + if (data == null) return; + for (final ParcelableUserList user : data) { + if (clear_old || findItem(user.id) == null) { + add(user); + } + } + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/adapter/SimpleParcelableUsersAdapter.java b/twidere/src/main/java/org/mariotaku/twidere/adapter/SimpleParcelableUsersAdapter.java index 16509e467..c758d15e9 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/adapter/SimpleParcelableUsersAdapter.java +++ b/twidere/src/main/java/org/mariotaku/twidere/adapter/SimpleParcelableUsersAdapter.java @@ -19,10 +19,6 @@ package org.mariotaku.twidere.adapter; -import static org.mariotaku.twidere.util.UserColorNicknameUtils.getUserNickname; -import static org.mariotaku.twidere.util.Utils.configBaseAdapter; -import static org.mariotaku.twidere.util.Utils.getUserTypeIconRes; - import android.content.Context; import android.text.TextUtils; import android.view.View; @@ -37,68 +33,71 @@ import org.mariotaku.twidere.view.holder.TwoLineWithIconViewHolder; import java.util.List; +import static org.mariotaku.twidere.util.UserColorNicknameUtils.getUserNickname; +import static org.mariotaku.twidere.util.Utils.configBaseAdapter; +import static org.mariotaku.twidere.util.Utils.getUserTypeIconRes; + public class SimpleParcelableUsersAdapter extends BaseArrayAdapter implements IBaseAdapter { - private final ImageLoaderWrapper mProfileImageLoader; - private final Context mContext; + private final ImageLoaderWrapper mImageLoader; + private final Context mContext; - public SimpleParcelableUsersAdapter(final Context context) { - super(context, R.layout.list_item_two_line); - mContext = context; - final TwidereApplication app = TwidereApplication.getInstance(context); - mProfileImageLoader = app.getImageLoaderWrapper(); - configBaseAdapter(context, this); - } + public SimpleParcelableUsersAdapter(final Context context) { + super(context, R.layout.list_item_two_line); + mContext = context; + final TwidereApplication app = TwidereApplication.getInstance(context); + mImageLoader = app.getImageLoaderWrapper(); + configBaseAdapter(context, this); + } - @Override - public long getItemId(final int position) { - return getItem(position) != null ? getItem(position).id : -1; - } + @Override + public long getItemId(final int position) { + return getItem(position) != null ? getItem(position).id : -1; + } - @Override - public View getView(final int position, final View convertView, final ViewGroup parent) { - final View view = super.getView(position, convertView, parent); - final Object tag = view.getTag(); - final TwoLineWithIconViewHolder holder; - if (tag instanceof TwoLineWithIconViewHolder) { - holder = (TwoLineWithIconViewHolder) tag; - } else { - holder = new TwoLineWithIconViewHolder(view); - view.setTag(holder); - } + @Override + public View getView(final int position, final View convertView, final ViewGroup parent) { + final View view = super.getView(position, convertView, parent); + final Object tag = view.getTag(); + final TwoLineWithIconViewHolder holder; + if (tag instanceof TwoLineWithIconViewHolder) { + holder = (TwoLineWithIconViewHolder) tag; + } else { + holder = new TwoLineWithIconViewHolder(view); + view.setTag(holder); + } - // Clear images in prder to prevent images in recycled view shown. - holder.icon.setImageDrawable(null); + final ParcelableUser user = getItem(position); - final ParcelableUser user = getItem(position); + holder.text1.setCompoundDrawablesWithIntrinsicBounds(0, 0, + getUserTypeIconRes(user.is_verified, user.is_protected), 0); + final String nick = getUserNickname(mContext, user.id); + holder.text1.setText(TextUtils.isEmpty(nick) ? user.name : isNicknameOnly() ? nick : mContext.getString( + R.string.name_with_nickname, user.name, nick)); + holder.text2.setText("@" + user.screen_name); + holder.icon.setVisibility(isDisplayProfileImage() ? View.VISIBLE : View.GONE); + if (isDisplayProfileImage()) { + mImageLoader.displayProfileImage(holder.icon, user.profile_image_url); + } else { + mImageLoader.cancelDisplayTask(holder.icon); + } + return view; + } - holder.text1.setCompoundDrawablesWithIntrinsicBounds(0, 0, - getUserTypeIconRes(user.is_verified, user.is_protected), 0); - final String nick = getUserNickname(mContext, user.id); - holder.text1.setText(TextUtils.isEmpty(nick) ? user.name : isNicknameOnly() ? nick : mContext.getString( - R.string.name_with_nickname, user.name, nick)); - holder.text2.setText("@" + user.screen_name); - holder.icon.setVisibility(isDisplayProfileImage() ? View.VISIBLE : View.GONE); - if (isDisplayProfileImage()) { - mProfileImageLoader.displayProfileImage(holder.icon, user.profile_image_url); - } - return view; - } + public void setData(final List data) { + setData(data, false); + } - public void setData(final List data) { - setData(data, false); - } - - public void setData(final List data, final boolean clear_old) { - if (clear_old) { - clear(); - } - if (data == null) return; - for (final ParcelableUser user : data) { - if (clear_old || findItem(user.id) == null) { - add(user); - } - } - } + public void setData(final List data, final boolean clear_old) { + if (clear_old) { + clear(); + } + if (data == null) return; + for (final ParcelableUser user : data) { + if (clear_old || findItem(user.id) == null) { + add(user); + } + } + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/adapter/UserHashtagAutoCompleteAdapter.java b/twidere/src/main/java/org/mariotaku/twidere/adapter/UserHashtagAutoCompleteAdapter.java index e2a7c89b7..cda502160 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/adapter/UserHashtagAutoCompleteAdapter.java +++ b/twidere/src/main/java/org/mariotaku/twidere/adapter/UserHashtagAutoCompleteAdapter.java @@ -95,7 +95,7 @@ public class UserHashtagAutoCompleteAdapter extends SimpleCursorAdapter implemen final int themeRes, accentColor; if (context instanceof IThemedActivity) { themeRes = ((IThemedActivity) context).getThemeResourceId(); - accentColor = ((IThemedActivity) context).getThemeColor(); + accentColor = ((IThemedActivity) context).getOverrideAccentColor(); } else { themeRes = ThemeUtils.getThemeResource(context); accentColor = ThemeUtils.getUserThemeColor(context); diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/CustomTabsFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/CustomTabsFragment.java index 45bfe6a6c..315d59bed 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/CustomTabsFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/CustomTabsFragment.java @@ -19,14 +19,6 @@ package org.mariotaku.twidere.fragment; -import static org.mariotaku.twidere.util.CustomTabUtils.getConfiguraionMap; -import static org.mariotaku.twidere.util.CustomTabUtils.getTabIconDrawable; -import static org.mariotaku.twidere.util.CustomTabUtils.getTabIconObject; -import static org.mariotaku.twidere.util.CustomTabUtils.getTabTypeName; -import static org.mariotaku.twidere.util.CustomTabUtils.isTabAdded; -import static org.mariotaku.twidere.util.CustomTabUtils.isTabTypeValid; -import static org.mariotaku.twidere.util.Utils.getAccountIds; - import android.app.Activity; import android.app.LoaderManager.LoaderCallbacks; import android.content.ContentResolver; @@ -44,7 +36,6 @@ import android.text.TextUtils; import android.view.ActionMode; import android.view.LayoutInflater; import android.view.Menu; -import android.view.MenuInflater; import android.view.MenuItem; import android.view.SubMenu; import android.view.View; @@ -80,311 +71,319 @@ import java.util.HashMap; import java.util.List; import java.util.Map.Entry; +import static org.mariotaku.twidere.util.CustomTabUtils.getConfiguraionMap; +import static org.mariotaku.twidere.util.CustomTabUtils.getTabIconDrawable; +import static org.mariotaku.twidere.util.CustomTabUtils.getTabIconObject; +import static org.mariotaku.twidere.util.CustomTabUtils.getTabTypeName; +import static org.mariotaku.twidere.util.CustomTabUtils.isTabAdded; +import static org.mariotaku.twidere.util.CustomTabUtils.isTabTypeValid; +import static org.mariotaku.twidere.util.Utils.getAccountIds; + public class CustomTabsFragment extends BaseListFragment implements LoaderCallbacks, Panes.Right, - MultiChoiceModeListener, DropListener { + MultiChoiceModeListener, DropListener { - private ContentResolver mResolver; + private ContentResolver mResolver; - private DragSortListView mListView; + private DragSortListView mListView; - private PopupMenu mPopupMenu; + private PopupMenu mPopupMenu; - private CustomTabsAdapter mAdapter; + private CustomTabsAdapter mAdapter; - @Override - public void drop(final int from, final int to) { - mAdapter.drop(from, to); - mListView.moveCheckState(from, to); - saveTabPositions(); - } + @Override + public void drop(final int from, final int to) { + mAdapter.drop(from, to); + mListView.moveCheckState(from, to); + saveTabPositions(); + } - @Override - public boolean onActionItemClicked(final ActionMode mode, final MenuItem item) { - switch (item.getItemId()) { - case MENU_DELETE: { - final Where where = Where.in(new Column(Tabs._ID), new RawItemArray(mListView.getCheckedItemIds())); - mResolver.delete(Tabs.CONTENT_URI, where.getSQL(), null); - break; - } - } - mode.finish(); - return true; - } + @Override + public boolean onActionItemClicked(final ActionMode mode, final MenuItem item) { + switch (item.getItemId()) { + case MENU_DELETE: { + final Where where = Where.in(new Column(Tabs._ID), new RawItemArray(mListView.getCheckedItemIds())); + mResolver.delete(Tabs.CONTENT_URI, where.getSQL(), null); + break; + } + } + mode.finish(); + return true; + } - @Override - public void onActivityCreated(final Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - setHasOptionsMenu(true); - mResolver = getContentResolver(); - final Activity activity = getActivity(); - final int themeRes; - if (activity instanceof IThemedActivity) { - themeRes = ((IThemedActivity) activity).getThemeResourceId(); - } else { - themeRes = ThemeUtils.getSettingsThemeResource(activity); - } - mAdapter = new CustomTabsAdapter(ThemeUtils.getThemedContextForActionIcons(activity, themeRes)); - setListAdapter(mAdapter); - setEmptyText(getString(R.string.no_tab_hint)); - mListView = (DragSortListView) getListView(); - mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); - mListView.setMultiChoiceModeListener(this); - mListView.setDropListener(this); - getLoaderManager().initLoader(0, null, this); - setListShown(false); - } + @Override + public void onActivityCreated(final Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + setHasOptionsMenu(true); + mResolver = getContentResolver(); + final Activity activity = getActivity(); + final int themeRes; + if (activity instanceof IThemedActivity) { + themeRes = ((IThemedActivity) activity).getThemeResourceId(); + } else { + themeRes = ThemeUtils.getSettingsThemeResource(activity); + } + mAdapter = new CustomTabsAdapter(ThemeUtils.getThemedContextForActionIcons(activity, themeRes)); + setListAdapter(mAdapter); + setEmptyText(getString(R.string.no_tab_hint)); + mListView = (DragSortListView) getListView(); + mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); + mListView.setMultiChoiceModeListener(this); + mListView.setDropListener(this); + getLoaderManager().initLoader(0, null, this); + setListShown(false); + } - @Override - public void onActivityResult(final int requestCode, final int resultCode, final Intent data) { - switch (requestCode) { - case REQUEST_ADD_TAB: { - if (resultCode == Activity.RESULT_OK) { - final ContentValues values = new ContentValues(); - values.put(Tabs.NAME, data.getStringExtra(EXTRA_NAME)); - values.put(Tabs.ICON, data.getStringExtra(EXTRA_ICON)); - values.put(Tabs.TYPE, data.getStringExtra(EXTRA_TYPE)); - values.put(Tabs.ARGUMENTS, data.getStringExtra(EXTRA_ARGUMENTS)); - values.put(Tabs.EXTRAS, data.getStringExtra(EXTRA_EXTRAS)); - values.put(Tabs.POSITION, mAdapter.getCount()); - mResolver.insert(Tabs.CONTENT_URI, values); - } - break; - } - case REQUEST_EDIT_TAB: { - if (resultCode == Activity.RESULT_OK && data.hasExtra(EXTRA_ID)) { - final ContentValues values = new ContentValues(); - values.put(Tabs.NAME, data.getStringExtra(EXTRA_NAME)); - values.put(Tabs.ICON, data.getStringExtra(EXTRA_ICON)); - values.put(Tabs.EXTRAS, data.getStringExtra(EXTRA_EXTRAS)); - final String where = Where.equals(Tabs._ID, data.getLongExtra(EXTRA_ID, -1)).getSQL(); - mResolver.update(Tabs.CONTENT_URI, values, where, null); - } - break; - } - } - super.onActivityResult(requestCode, resultCode, data); - } + @Override + public void onActivityResult(final int requestCode, final int resultCode, final Intent data) { + switch (requestCode) { + case REQUEST_ADD_TAB: { + if (resultCode == Activity.RESULT_OK) { + final ContentValues values = new ContentValues(); + values.put(Tabs.NAME, data.getStringExtra(EXTRA_NAME)); + values.put(Tabs.ICON, data.getStringExtra(EXTRA_ICON)); + values.put(Tabs.TYPE, data.getStringExtra(EXTRA_TYPE)); + values.put(Tabs.ARGUMENTS, data.getStringExtra(EXTRA_ARGUMENTS)); + values.put(Tabs.EXTRAS, data.getStringExtra(EXTRA_EXTRAS)); + values.put(Tabs.POSITION, mAdapter.getCount()); + mResolver.insert(Tabs.CONTENT_URI, values); + } + break; + } + case REQUEST_EDIT_TAB: { + if (resultCode == Activity.RESULT_OK && data.hasExtra(EXTRA_ID)) { + final ContentValues values = new ContentValues(); + values.put(Tabs.NAME, data.getStringExtra(EXTRA_NAME)); + values.put(Tabs.ICON, data.getStringExtra(EXTRA_ICON)); + values.put(Tabs.EXTRAS, data.getStringExtra(EXTRA_EXTRAS)); + final String where = Where.equals(Tabs._ID, data.getLongExtra(EXTRA_ID, -1)).getSQL(); + mResolver.update(Tabs.CONTENT_URI, values, where, null); + } + break; + } + } + super.onActivityResult(requestCode, resultCode, data); + } - @Override - public boolean onCreateActionMode(final ActionMode mode, final Menu menu) { - new MenuInflater(getActivity()).inflate(R.menu.action_multi_select_items, menu); - return true; - } + @Override + public boolean onCreateActionMode(final ActionMode mode, final Menu menu) { + new TwidereMenuInflater(getActivity()).inflate(R.menu.action_multi_select_items, menu); + return true; + } - @Override - public Loader onCreateLoader(final int id, final Bundle args) { - return new CursorLoader(getActivity(), Tabs.CONTENT_URI, Tabs.COLUMNS, null, null, Tabs.DEFAULT_SORT_ORDER); - } + @Override + public Loader onCreateLoader(final int id, final Bundle args) { + return new CursorLoader(getActivity(), Tabs.CONTENT_URI, Tabs.COLUMNS, null, null, Tabs.DEFAULT_SORT_ORDER); + } - @Override - public void onCreateOptionsMenu(final Menu menu, final TwidereMenuInflater inflater) { - inflater.inflate(R.menu.menu_custom_tabs, menu); - } + @Override + public void onCreateOptionsMenu(final Menu menu, final TwidereMenuInflater inflater) { + inflater.inflate(R.menu.menu_custom_tabs, menu); + } - @Override - public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) { - final View view = inflater.inflate(android.R.layout.list_content, null, false); - final ListView originalList = (ListView) view.findViewById(android.R.id.list); - final ViewGroup listContainer = (ViewGroup) originalList.getParent(); - listContainer.removeView(originalList); - inflater.inflate(R.layout.fragment_custom_tabs, listContainer, true); - return view; - } + @Override + public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) { + final View view = inflater.inflate(android.R.layout.list_content, null, false); + final ListView originalList = (ListView) view.findViewById(android.R.id.list); + final ViewGroup listContainer = (ViewGroup) originalList.getParent(); + listContainer.removeView(originalList); + inflater.inflate(R.layout.fragment_custom_tabs, listContainer, true); + return view; + } - @Override - public void onDestroyActionMode(final ActionMode mode) { + @Override + public void onDestroyActionMode(final ActionMode mode) { - } + } - @Override - public void onItemCheckedStateChanged(final ActionMode mode, final int position, final long id, - final boolean checked) { - updateTitle(mode); - } + @Override + public void onItemCheckedStateChanged(final ActionMode mode, final int position, final long id, + final boolean checked) { + updateTitle(mode); + } - @Override - public void onListItemClick(final ListView l, final View v, final int position, final long id) { - final Cursor c = mAdapter.getCursor(); - c.moveToPosition(mAdapter.getCursorPosition(position)); - final Intent intent = new Intent(INTENT_ACTION_EDIT_TAB); - intent.setClass(getActivity(), CustomTabEditorActivity.class); - intent.putExtra(EXTRA_ID, c.getLong(c.getColumnIndex(Tabs._ID))); - intent.putExtra(EXTRA_TYPE, c.getString(c.getColumnIndex(Tabs.TYPE))); - intent.putExtra(EXTRA_NAME, c.getString(c.getColumnIndex(Tabs.NAME))); - intent.putExtra(EXTRA_ICON, c.getString(c.getColumnIndex(Tabs.ICON))); - intent.putExtra(EXTRA_EXTRAS, c.getString(c.getColumnIndex(Tabs.EXTRAS))); - startActivityForResult(intent, REQUEST_EDIT_TAB); - } + @Override + public void onListItemClick(final ListView l, final View v, final int position, final long id) { + final Cursor c = mAdapter.getCursor(); + c.moveToPosition(mAdapter.getCursorPosition(position)); + final Intent intent = new Intent(INTENT_ACTION_EDIT_TAB); + intent.setClass(getActivity(), CustomTabEditorActivity.class); + intent.putExtra(EXTRA_ID, c.getLong(c.getColumnIndex(Tabs._ID))); + intent.putExtra(EXTRA_TYPE, c.getString(c.getColumnIndex(Tabs.TYPE))); + intent.putExtra(EXTRA_NAME, c.getString(c.getColumnIndex(Tabs.NAME))); + intent.putExtra(EXTRA_ICON, c.getString(c.getColumnIndex(Tabs.ICON))); + intent.putExtra(EXTRA_EXTRAS, c.getString(c.getColumnIndex(Tabs.EXTRAS))); + startActivityForResult(intent, REQUEST_EDIT_TAB); + } - @Override - public void onLoaderReset(final Loader loader) { - mAdapter.changeCursor(null); - } + @Override + public void onLoaderReset(final Loader loader) { + mAdapter.changeCursor(null); + } - @Override - public void onLoadFinished(final Loader loader, final Cursor cursor) { - mAdapter.changeCursor(cursor); - setListShown(true); - } + @Override + public void onLoadFinished(final Loader loader, final Cursor cursor) { + mAdapter.changeCursor(cursor); + setListShown(true); + } - @Override - public boolean onOptionsItemSelected(final MenuItem item) { - switch (item.getItemId()) { - default: { - final Intent intent = item.getIntent(); - if (intent == null) return false; - startActivityForResult(intent, REQUEST_ADD_TAB); - return true; - } - } - } + @Override + public boolean onOptionsItemSelected(final MenuItem item) { + switch (item.getItemId()) { + default: { + final Intent intent = item.getIntent(); + if (intent == null) return false; + startActivityForResult(intent, REQUEST_ADD_TAB); + return true; + } + } + } - @Override - public boolean onPrepareActionMode(final ActionMode mode, final Menu menu) { - updateTitle(mode); - return true; - } + @Override + public boolean onPrepareActionMode(final ActionMode mode, final Menu menu) { + updateTitle(mode); + return true; + } - @Override - public void onPrepareOptionsMenu(final Menu menu) { - final Resources res = getResources(); - final boolean hasOfficialKeyAccounts = Utils.hasAccountSignedWithOfficialKeys(getActivity()); - final long[] account_ids = getAccountIds(getActivity()); - final MenuItem itemAdd = menu.findItem(R.id.add_submenu); - if (itemAdd != null && itemAdd.hasSubMenu()) { - final SubMenu subMenu = itemAdd.getSubMenu(); - subMenu.clear(); - final HashMap map = getConfiguraionMap(); - final List> tabs = new ArrayList>( - map.entrySet()); - Collections.sort(tabs, CustomTabConfigurationComparator.SINGLETON); - for (final Entry entry : tabs) { - final String type = entry.getKey(); - final CustomTabConfiguration conf = entry.getValue(); + @Override + public void onPrepareOptionsMenu(final Menu menu) { + final Resources res = getResources(); + final boolean hasOfficialKeyAccounts = Utils.hasAccountSignedWithOfficialKeys(getActivity()); + final long[] account_ids = getAccountIds(getActivity()); + final MenuItem itemAdd = menu.findItem(R.id.add_submenu); + if (itemAdd != null && itemAdd.hasSubMenu()) { + final SubMenu subMenu = itemAdd.getSubMenu(); + subMenu.clear(); + final HashMap map = getConfiguraionMap(); + final List> tabs = new ArrayList>( + map.entrySet()); + Collections.sort(tabs, CustomTabConfigurationComparator.SINGLETON); + for (final Entry entry : tabs) { + final String type = entry.getKey(); + final CustomTabConfiguration conf = entry.getValue(); - final boolean isOfficiakKeyAccountRequired = TAB_TYPE_ACTIVITIES_ABOUT_ME.equals(type) - || TAB_TYPE_ACTIVITIES_BY_FRIENDS.equals(type); - final boolean accountIdRequired = conf.getAccountRequirement() == CustomTabConfiguration.ACCOUNT_REQUIRED; + final boolean isOfficiakKeyAccountRequired = TAB_TYPE_ACTIVITIES_ABOUT_ME.equals(type) + || TAB_TYPE_ACTIVITIES_BY_FRIENDS.equals(type); + final boolean accountIdRequired = conf.getAccountRequirement() == CustomTabConfiguration.ACCOUNT_REQUIRED; - final Intent intent = new Intent(INTENT_ACTION_ADD_TAB); - intent.setClass(getActivity(), CustomTabEditorActivity.class); - intent.putExtra(EXTRA_TYPE, type); - intent.putExtra(EXTRA_OFFICIAL_KEY_ONLY, isOfficiakKeyAccountRequired); + final Intent intent = new Intent(INTENT_ACTION_ADD_TAB); + intent.setClass(getActivity(), CustomTabEditorActivity.class); + intent.putExtra(EXTRA_TYPE, type); + intent.putExtra(EXTRA_OFFICIAL_KEY_ONLY, isOfficiakKeyAccountRequired); - final MenuItem subItem = subMenu.add(conf.getDefaultTitle()); - final boolean shouldDisable = conf.isSingleTab() && isTabAdded(getActivity(), type) - || isOfficiakKeyAccountRequired && !hasOfficialKeyAccounts || accountIdRequired - && account_ids.length == 0; - subItem.setVisible(!shouldDisable); - subItem.setEnabled(!shouldDisable); - final Drawable icon = res.getDrawable(conf.getDefaultIcon()); - subItem.setIcon(icon); - subItem.setIntent(intent); - } - } - } + final MenuItem subItem = subMenu.add(conf.getDefaultTitle()); + final boolean shouldDisable = conf.isSingleTab() && isTabAdded(getActivity(), type) + || isOfficiakKeyAccountRequired && !hasOfficialKeyAccounts || accountIdRequired + && account_ids.length == 0; + subItem.setVisible(!shouldDisable); + subItem.setEnabled(!shouldDisable); + final Drawable icon = res.getDrawable(conf.getDefaultIcon()); + subItem.setIcon(icon); + subItem.setIntent(intent); + } + } + } - @Override - public void onStop() { - if (mPopupMenu != null) { - mPopupMenu.dismiss(); - } - super.onStop(); - } + @Override + public void onStop() { + if (mPopupMenu != null) { + mPopupMenu.dismiss(); + } + super.onStop(); + } - private void saveTabPositions() { - final ArrayList positions = mAdapter.getCursorPositions(); - final Cursor c = mAdapter.getCursor(); - if (positions != null && c != null && !c.isClosed()) { - final int idIdx = c.getColumnIndex(Tabs._ID); - for (int i = 0, j = positions.size(); i < j; i++) { - c.moveToPosition(positions.get(i)); - final long id = c.getLong(idIdx); - final ContentValues values = new ContentValues(); - values.put(Tabs.POSITION, i); - final String where = Tabs._ID + " = " + id; - mResolver.update(Tabs.CONTENT_URI, values, where, null); - } - } - } + private void saveTabPositions() { + final ArrayList positions = mAdapter.getCursorPositions(); + final Cursor c = mAdapter.getCursor(); + if (positions != null && c != null && !c.isClosed()) { + final int idIdx = c.getColumnIndex(Tabs._ID); + for (int i = 0, j = positions.size(); i < j; i++) { + c.moveToPosition(positions.get(i)); + final long id = c.getLong(idIdx); + final ContentValues values = new ContentValues(); + values.put(Tabs.POSITION, i); + final String where = Tabs._ID + " = " + id; + mResolver.update(Tabs.CONTENT_URI, values, where, null); + } + } + } - private void updateTitle(final ActionMode mode) { - if (mListView == null || mode == null || getActivity() == null) return; - final int count = mListView.getCheckedItemCount(); - mode.setTitle(getResources().getQuantityString(R.plurals.Nitems_selected, count, count)); - } + private void updateTitle(final ActionMode mode) { + if (mListView == null || mode == null || getActivity() == null) return; + final int count = mListView.getCheckedItemCount(); + mode.setTitle(getResources().getQuantityString(R.plurals.Nitems_selected, count, count)); + } - public static class CustomTabsAdapter extends SimpleDragSortCursorAdapter implements OnClickListener { + public static class CustomTabsAdapter extends SimpleDragSortCursorAdapter implements OnClickListener { - private CursorIndices mIndices; + private CursorIndices mIndices; - public CustomTabsAdapter(final Context context) { - super(context, R.layout.list_item_custom_tab, null, new String[0], new int[0], 0); - } + public CustomTabsAdapter(final Context context) { + super(context, R.layout.list_item_custom_tab, null, new String[0], new int[0], 0); + } - @Override - public void bindView(final View view, final Context context, final Cursor cursor) { - super.bindView(view, context, cursor); - final TwoLineWithIconViewHolder holder = (TwoLineWithIconViewHolder) view.getTag(); - final String type = cursor.getString(mIndices.type); - final String name = cursor.getString(mIndices.name); - final String iconKey = cursor.getString(mIndices.icon); - if (isTabTypeValid(type)) { - final String typeName = getTabTypeName(context, type); - holder.text1.setText(TextUtils.isEmpty(name) ? typeName : name); - holder.text1.setPaintFlags(holder.text1.getPaintFlags() & ~Paint.STRIKE_THRU_TEXT_FLAG); - holder.text2.setVisibility(View.VISIBLE); - holder.text2.setText(typeName); - } else { - holder.text1.setText(name); - holder.text1.setPaintFlags(holder.text1.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); - holder.text2.setText(R.string.invalid_tab); - } - final Drawable icon = getTabIconDrawable(context, getTabIconObject(iconKey)); - holder.icon.setVisibility(View.VISIBLE); - if (icon != null) { - ViewAccessor.setBackground(holder.icon, icon); - } else { - holder.icon.setBackgroundResource(R.drawable.ic_iconic_action_list); - } - } + @Override + public void bindView(final View view, final Context context, final Cursor cursor) { + super.bindView(view, context, cursor); + final TwoLineWithIconViewHolder holder = (TwoLineWithIconViewHolder) view.getTag(); + final String type = cursor.getString(mIndices.type); + final String name = cursor.getString(mIndices.name); + final String iconKey = cursor.getString(mIndices.icon); + if (isTabTypeValid(type)) { + final String typeName = getTabTypeName(context, type); + holder.text1.setText(TextUtils.isEmpty(name) ? typeName : name); + holder.text1.setPaintFlags(holder.text1.getPaintFlags() & ~Paint.STRIKE_THRU_TEXT_FLAG); + holder.text2.setVisibility(View.VISIBLE); + holder.text2.setText(typeName); + } else { + holder.text1.setText(name); + holder.text1.setPaintFlags(holder.text1.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); + holder.text2.setText(R.string.invalid_tab); + } + final Drawable icon = getTabIconDrawable(context, getTabIconObject(iconKey)); + holder.icon.setVisibility(View.VISIBLE); + if (icon != null) { + ViewAccessor.setBackground(holder.icon, icon); + } else { + holder.icon.setBackgroundResource(R.drawable.ic_iconic_action_list); + } + } - @Override - public void changeCursor(final Cursor cursor) { - if (cursor != null) { - mIndices = new CursorIndices(cursor); - } - super.changeCursor(cursor); - } + @Override + public void changeCursor(final Cursor cursor) { + if (cursor != null) { + mIndices = new CursorIndices(cursor); + } + super.changeCursor(cursor); + } - @Override - public View newView(final Context context, final Cursor cursor, final ViewGroup parent) { - final View view = super.newView(context, cursor, parent); - final Object tag = view.getTag(); - if (!(tag instanceof TwoLineWithIconViewHolder)) { - final TwoLineWithIconViewHolder holder = new TwoLineWithIconViewHolder(view); - view.setTag(holder); - } - return view; - } + @Override + public View newView(final Context context, final Cursor cursor, final ViewGroup parent) { + final View view = super.newView(context, cursor, parent); + final Object tag = view.getTag(); + if (!(tag instanceof TwoLineWithIconViewHolder)) { + final TwoLineWithIconViewHolder holder = new TwoLineWithIconViewHolder(view); + view.setTag(holder); + } + return view; + } - @Override - public void onClick(final View view) { + @Override + public void onClick(final View view) { - } + } - static class CursorIndices { - final int _id, name, icon, type, arguments; + static class CursorIndices { + final int _id, name, icon, type, arguments; - CursorIndices(final Cursor mCursor) { - _id = mCursor.getColumnIndex(Tabs._ID); - icon = mCursor.getColumnIndex(Tabs.ICON); - name = mCursor.getColumnIndex(Tabs.NAME); - type = mCursor.getColumnIndex(Tabs.TYPE); - arguments = mCursor.getColumnIndex(Tabs.ARGUMENTS); - } - } + CursorIndices(final Cursor mCursor) { + _id = mCursor.getColumnIndex(Tabs._ID); + icon = mCursor.getColumnIndex(Tabs.ICON); + name = mCursor.getColumnIndex(Tabs.NAME); + type = mCursor.getColumnIndex(Tabs.TYPE); + arguments = mCursor.getColumnIndex(Tabs.ARGUMENTS); + } + } - } + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/HostMappingsListFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/HostMappingsListFragment.java index 48d4400b2..be1244ed5 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/HostMappingsListFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/HostMappingsListFragment.java @@ -36,7 +36,6 @@ import android.util.SparseBooleanArray; import android.view.ActionMode; import android.view.LayoutInflater; import android.view.Menu; -import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; @@ -104,7 +103,7 @@ public class HostMappingsListFragment extends BaseListFragment implements MultiC @Override public boolean onCreateActionMode(final ActionMode mode, final Menu menu) { - new MenuInflater(getActivity()).inflate(R.menu.action_multi_select_items, menu); + new TwidereMenuInflater(getActivity()).inflate(R.menu.action_multi_select_items, menu); return true; } diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AccountsDrawerFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AccountsDrawerFragment.java index 309966e2b..0c58ca2a3 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AccountsDrawerFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AccountsDrawerFragment.java @@ -243,7 +243,7 @@ public class AccountsDrawerFragment extends BaseSupportListFragment implements L break; } case MENU_SET_AS_DEFAULT: { - mPreferences.edit().putLong(KEY_DEFAULT_ACCOUNT_ID, account.account_id).commit(); + mPreferences.edit().putLong(KEY_DEFAULT_ACCOUNT_ID, account.account_id).apply(); break; } case MENU_DELETE: { diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/IncomingFriendshipsMenuDialogFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/IncomingFriendshipsMenuDialogFragment.java index 22c1a14a8..e6b33fea5 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/IncomingFriendshipsMenuDialogFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/IncomingFriendshipsMenuDialogFragment.java @@ -2,23 +2,23 @@ package org.mariotaku.twidere.fragment.support; import android.content.Context; import android.view.Menu; -import android.view.MenuInflater; import org.mariotaku.twidere.R; +import org.mariotaku.twidere.menu.TwidereMenuInflater; import org.mariotaku.twidere.model.Account; import org.mariotaku.twidere.model.Account.AccountWithCredentials; import org.mariotaku.twidere.model.ParcelableUser; public class IncomingFriendshipsMenuDialogFragment extends UserMenuDialogFragment { - @Override - protected void onPrepareItemMenu(final Menu menu, final ParcelableUser user) { - final Context context = getThemedContext(); - final AccountWithCredentials account = Account.getAccountWithCredentials(context, user.account_id); - if (AccountWithCredentials.isOfficialCredentials(context, account)) { - final MenuInflater inflater = new MenuInflater(context); - inflater.inflate(R.menu.action_incoming_friendship, menu); - } - } + @Override + protected void onPrepareItemMenu(final Menu menu, final ParcelableUser user) { + final Context context = getThemedContext(); + final AccountWithCredentials account = Account.getAccountWithCredentials(context, user.account_id); + if (AccountWithCredentials.isOfficialCredentials(context, account)) { + final TwidereMenuInflater inflater = new TwidereMenuInflater(context); + inflater.inflate(R.menu.action_incoming_friendship, menu); + } + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/StatusMenuDialogFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/StatusMenuDialogFragment.java index 255672865..723c80698 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/StatusMenuDialogFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/StatusMenuDialogFragment.java @@ -1,29 +1,29 @@ package org.mariotaku.twidere.fragment.support; -import static org.mariotaku.twidere.util.Utils.setMenuForStatus; - import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; import android.view.Menu; -import android.view.MenuInflater; import org.mariotaku.twidere.R; import org.mariotaku.twidere.activity.support.MenuDialogFragment; +import org.mariotaku.twidere.menu.TwidereMenuInflater; import org.mariotaku.twidere.model.ParcelableStatus; import org.mariotaku.twidere.util.Utils; +import static org.mariotaku.twidere.util.Utils.setMenuForStatus; + public class StatusMenuDialogFragment extends MenuDialogFragment { - @Override - protected void onCreateMenu(final MenuInflater inflater, final Menu menu) { - inflater.inflate(R.menu.action_status, menu); - final SharedPreferences prefs = getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); - final Bundle args = getArguments(); - final ParcelableStatus status = args.getParcelable(EXTRA_STATUS); - setMenuForStatus(getThemedContext(), menu, status); - final boolean longclickToOpenMenu = prefs.getBoolean(KEY_LONG_CLICK_TO_OPEN_MENU, false); - Utils.setMenuItemAvailability(menu, MENU_MULTI_SELECT, longclickToOpenMenu); - } + @Override + protected void onCreateMenu(final TwidereMenuInflater inflater, final Menu menu) { + inflater.inflate(R.menu.action_status, menu); + final SharedPreferences prefs = getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); + final Bundle args = getArguments(); + final ParcelableStatus status = args.getParcelable(EXTRA_STATUS); + setMenuForStatus(getThemedContext(), menu, status); + final boolean longclickToOpenMenu = prefs.getBoolean(KEY_LONG_CLICK_TO_OPEN_MENU, false); + Utils.setMenuItemAvailability(menu, MENU_MULTI_SELECT, longclickToOpenMenu); + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/UserListMenuDialogFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/UserListMenuDialogFragment.java index 985f5b670..5fa8eb648 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/UserListMenuDialogFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/UserListMenuDialogFragment.java @@ -1,42 +1,42 @@ package org.mariotaku.twidere.fragment.support; -import static org.mariotaku.twidere.util.Utils.addIntentToMenu; - import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.view.Menu; -import android.view.MenuInflater; import org.mariotaku.twidere.R; import org.mariotaku.twidere.activity.support.MenuDialogFragment; +import org.mariotaku.twidere.menu.TwidereMenuInflater; import org.mariotaku.twidere.model.ParcelableUserList; import org.mariotaku.twidere.util.Utils; +import static org.mariotaku.twidere.util.Utils.addIntentToMenu; + public class UserListMenuDialogFragment extends MenuDialogFragment { - @Override - protected void onCreateMenu(final MenuInflater inflater, final Menu menu) { - final SharedPreferences prefs = getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); - final Bundle args = getArguments(); - final ParcelableUserList user = args.getParcelable(EXTRA_USER_LIST); - inflater.inflate(R.menu.action_user_list, menu); - onPrepareItemMenu(menu, user); - final Intent extensionsIntent = new Intent(INTENT_ACTION_EXTENSION_OPEN_USER_LIST); - final Bundle extensionsExtras = new Bundle(); - extensionsExtras.putParcelable(EXTRA_USER_LIST, user); - extensionsIntent.putExtras(extensionsExtras); - addIntentToMenu(getThemedContext(), menu, extensionsIntent); - final boolean longclickToOpenMenu = prefs.getBoolean(KEY_LONG_CLICK_TO_OPEN_MENU, false); - Utils.setMenuItemAvailability(menu, MENU_MULTI_SELECT, longclickToOpenMenu); - } + @Override + protected void onCreateMenu(final TwidereMenuInflater inflater, final Menu menu) { + final SharedPreferences prefs = getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); + final Bundle args = getArguments(); + final ParcelableUserList user = args.getParcelable(EXTRA_USER_LIST); + inflater.inflate(R.menu.action_user_list, menu); + onPrepareItemMenu(menu, user); + final Intent extensionsIntent = new Intent(INTENT_ACTION_EXTENSION_OPEN_USER_LIST); + final Bundle extensionsExtras = new Bundle(); + extensionsExtras.putParcelable(EXTRA_USER_LIST, user); + extensionsIntent.putExtras(extensionsExtras); + addIntentToMenu(getThemedContext(), menu, extensionsIntent); + final boolean longclickToOpenMenu = prefs.getBoolean(KEY_LONG_CLICK_TO_OPEN_MENU, false); + Utils.setMenuItemAvailability(menu, MENU_MULTI_SELECT, longclickToOpenMenu); + } - protected void onPrepareItemMenu(final Menu menu, final ParcelableUserList userList) { - if (userList == null) return; - final boolean isMyList = userList.user_id == userList.account_id; - Utils.setMenuItemAvailability(menu, MENU_ADD, isMyList); - Utils.setMenuItemAvailability(menu, MENU_DELETE, isMyList); - } + protected void onPrepareItemMenu(final Menu menu, final ParcelableUserList userList) { + if (userList == null) return; + final boolean isMyList = userList.user_id == userList.account_id; + Utils.setMenuItemAvailability(menu, MENU_ADD, isMyList); + Utils.setMenuItemAvailability(menu, MENU_DELETE, isMyList); + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/UserMenuDialogFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/UserMenuDialogFragment.java index e1b46d804..a302e0b92 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/UserMenuDialogFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/UserMenuDialogFragment.java @@ -1,37 +1,37 @@ package org.mariotaku.twidere.fragment.support; -import static org.mariotaku.twidere.util.Utils.addIntentToMenu; - import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.view.Menu; -import android.view.MenuInflater; import org.mariotaku.twidere.activity.support.MenuDialogFragment; +import org.mariotaku.twidere.menu.TwidereMenuInflater; import org.mariotaku.twidere.model.ParcelableUser; import org.mariotaku.twidere.util.Utils; +import static org.mariotaku.twidere.util.Utils.addIntentToMenu; + public class UserMenuDialogFragment extends MenuDialogFragment { - @Override - protected void onCreateMenu(final MenuInflater inflater, final Menu menu) { - final SharedPreferences prefs = getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); - final Bundle args = getArguments(); - final ParcelableUser user = args.getParcelable(EXTRA_USER); - onPrepareItemMenu(menu, user); - final Intent extensionsIntent = new Intent(INTENT_ACTION_EXTENSION_OPEN_USER); - final Bundle extensionsExtras = new Bundle(); - extensionsExtras.putParcelable(EXTRA_USER, user); - extensionsIntent.putExtras(extensionsExtras); - addIntentToMenu(getThemedContext(), menu, extensionsIntent); - final boolean longclickToOpenMenu = prefs.getBoolean(KEY_LONG_CLICK_TO_OPEN_MENU, false); - Utils.setMenuItemAvailability(menu, MENU_MULTI_SELECT, longclickToOpenMenu); - } + @Override + protected void onCreateMenu(final TwidereMenuInflater inflater, final Menu menu) { + final SharedPreferences prefs = getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); + final Bundle args = getArguments(); + final ParcelableUser user = args.getParcelable(EXTRA_USER); + onPrepareItemMenu(menu, user); + final Intent extensionsIntent = new Intent(INTENT_ACTION_EXTENSION_OPEN_USER); + final Bundle extensionsExtras = new Bundle(); + extensionsExtras.putParcelable(EXTRA_USER, user); + extensionsIntent.putExtras(extensionsExtras); + addIntentToMenu(getThemedContext(), menu, extensionsIntent); + final boolean longclickToOpenMenu = prefs.getBoolean(KEY_LONG_CLICK_TO_OPEN_MENU, false); + Utils.setMenuItemAvailability(menu, MENU_MULTI_SELECT, longclickToOpenMenu); + } - protected void onPrepareItemMenu(final Menu menu, final ParcelableUser user) { + protected void onPrepareItemMenu(final Menu menu, final ParcelableUser user) { - } + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/menu/TwidereMenuInflater.java b/twidere/src/main/java/org/mariotaku/twidere/menu/TwidereMenuInflater.java index a6a7582b8..19d82e04f 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/menu/TwidereMenuInflater.java +++ b/twidere/src/main/java/org/mariotaku/twidere/menu/TwidereMenuInflater.java @@ -27,6 +27,7 @@ import android.util.Xml; import android.view.ActionProvider; import android.view.InflateException; import android.view.Menu; +import android.view.MenuInflater; import android.view.MenuItem; import android.view.SubMenu; import android.view.View; @@ -48,7 +49,7 @@ import java.lang.reflect.Method; * it only works with an XmlPullParser returned from a compiled resource (R. * something file.) */ -public class TwidereMenuInflater { +public class TwidereMenuInflater extends MenuInflater { private static final String LOG_TAG = "MenuInflater"; /** @@ -96,6 +97,7 @@ public class TwidereMenuInflater { * @see Activity#getMenuInflater() */ public TwidereMenuInflater(Context context, Object realOwner) { + super(context); mContext = context; mResources = context.getResources(); mRealOwner = realOwner; @@ -112,6 +114,7 @@ public class TwidereMenuInflater { * @param menu The Menu to inflate into. The items and submenus will be * added to this Menu. */ + @Override public void inflate(int menuRes, Menu menu) { XmlResourceParser parser = null; try { diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/AsyncTaskManager.java b/twidere/src/main/java/org/mariotaku/twidere/util/AsyncTaskManager.java index 3ca070f49..b0d49a4ad 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/AsyncTaskManager.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/AsyncTaskManager.java @@ -107,7 +107,7 @@ public class AsyncTaskManager { return false; } - public boolean isExcuting(final int hashCode) { + public boolean isExecuting(final int hashCode) { final ManagedAsyncTask task = findTask(hashCode); if (task != null && task.getStatus() == AsyncTask.Status.RUNNING) return true; return false; diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/ImageLoaderWrapper.java b/twidere/src/main/java/org/mariotaku/twidere/util/ImageLoaderWrapper.java index 4b5a8c6db..45f598f6f 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/ImageLoaderWrapper.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/ImageLoaderWrapper.java @@ -19,8 +19,6 @@ package org.mariotaku.twidere.util; -import static org.mariotaku.twidere.util.Utils.getBestBannerType; - import android.graphics.Bitmap; import android.text.TextUtils; import android.widget.ImageView; @@ -33,72 +31,78 @@ import org.mariotaku.twidere.Constants; import org.mariotaku.twidere.R; import org.mariotaku.twidere.util.imageloader.AccountExtra; +import static org.mariotaku.twidere.util.Utils.getBestBannerType; + public class ImageLoaderWrapper implements Constants { - private final ImageLoader mImageLoader; - private final DisplayImageOptions mProfileImageDisplayOptions, mImageDisplayOptions, mBannerDisplayOptions; + private final ImageLoader mImageLoader; + private final DisplayImageOptions mProfileImageDisplayOptions, mImageDisplayOptions, mBannerDisplayOptions; - public ImageLoaderWrapper(final ImageLoader loader) { - mImageLoader = loader; - final DisplayImageOptions.Builder profileOptsNuilder = new DisplayImageOptions.Builder(); - profileOptsNuilder.cacheInMemory(true); - profileOptsNuilder.cacheOnDisk(true); - profileOptsNuilder.showImageForEmptyUri(R.drawable.ic_profile_image_default); - profileOptsNuilder.showImageOnFail(R.drawable.ic_profile_image_default); - profileOptsNuilder.showImageOnLoading(R.drawable.ic_profile_image_default); - profileOptsNuilder.bitmapConfig(Bitmap.Config.ARGB_8888); - profileOptsNuilder.resetViewBeforeLoading(true); - final DisplayImageOptions.Builder imageOptsBuilder = new DisplayImageOptions.Builder(); - imageOptsBuilder.cacheInMemory(true); - imageOptsBuilder.cacheOnDisk(true); - imageOptsBuilder.bitmapConfig(Bitmap.Config.RGB_565); - imageOptsBuilder.resetViewBeforeLoading(true); - final DisplayImageOptions.Builder bannerOptsBuilder = new DisplayImageOptions.Builder(); - bannerOptsBuilder.cacheInMemory(true); - bannerOptsBuilder.cacheOnDisk(true); - bannerOptsBuilder.bitmapConfig(Bitmap.Config.RGB_565); - bannerOptsBuilder.resetViewBeforeLoading(true); + public ImageLoaderWrapper(final ImageLoader loader) { + mImageLoader = loader; + final DisplayImageOptions.Builder profileOptsNuilder = new DisplayImageOptions.Builder(); + profileOptsNuilder.cacheInMemory(true); + profileOptsNuilder.cacheOnDisk(true); + profileOptsNuilder.showImageForEmptyUri(R.drawable.ic_profile_image_default); + profileOptsNuilder.showImageOnFail(R.drawable.ic_profile_image_default); + profileOptsNuilder.showImageOnLoading(R.drawable.ic_profile_image_default); + profileOptsNuilder.bitmapConfig(Bitmap.Config.ARGB_8888); + profileOptsNuilder.resetViewBeforeLoading(true); + final DisplayImageOptions.Builder imageOptsBuilder = new DisplayImageOptions.Builder(); + imageOptsBuilder.cacheInMemory(true); + imageOptsBuilder.cacheOnDisk(true); + imageOptsBuilder.bitmapConfig(Bitmap.Config.RGB_565); + imageOptsBuilder.resetViewBeforeLoading(true); + final DisplayImageOptions.Builder bannerOptsBuilder = new DisplayImageOptions.Builder(); + bannerOptsBuilder.cacheInMemory(true); + bannerOptsBuilder.cacheOnDisk(true); + bannerOptsBuilder.bitmapConfig(Bitmap.Config.RGB_565); + bannerOptsBuilder.resetViewBeforeLoading(true); - mProfileImageDisplayOptions = profileOptsNuilder.build(); - mImageDisplayOptions = imageOptsBuilder.build(); - mBannerDisplayOptions = bannerOptsBuilder.build(); - } + mProfileImageDisplayOptions = profileOptsNuilder.build(); + mImageDisplayOptions = imageOptsBuilder.build(); + mBannerDisplayOptions = bannerOptsBuilder.build(); + } - public void clearFileCache() { - mImageLoader.clearDiskCache(); - } + public void clearFileCache() { + mImageLoader.clearDiskCache(); + } - public void clearMemoryCache() { - mImageLoader.clearMemoryCache(); - } + public void clearMemoryCache() { + mImageLoader.clearMemoryCache(); + } - public void displayPreviewImage(final ImageView view, final String url) { - mImageLoader.displayImage(url, view, mImageDisplayOptions); - } + public void displayPreviewImage(final ImageView view, final String url) { + mImageLoader.displayImage(url, view, mImageDisplayOptions); + } - public void displayPreviewImage(final ImageView view, final String url, final ImageLoadingHandler loadingHandler) { - mImageLoader.displayImage(url, view, mImageDisplayOptions, loadingHandler, loadingHandler); - } + public void displayPreviewImage(final ImageView view, final String url, final ImageLoadingHandler loadingHandler) { + mImageLoader.displayImage(url, view, mImageDisplayOptions, loadingHandler, loadingHandler); + } - public void displayPreviewImageWithCredentials(final ImageView view, final String url, final long accountId, - final ImageLoadingHandler loadingHandler) { - final DisplayImageOptions.Builder b = new DisplayImageOptions.Builder(); - b.cloneFrom(mImageDisplayOptions); - b.extraForDownloader(new AccountExtra(accountId)); - mImageLoader.displayImage(url, view, b.build(), loadingHandler, loadingHandler); - } + public void displayPreviewImageWithCredentials(final ImageView view, final String url, final long accountId, + final ImageLoadingHandler loadingHandler) { + final DisplayImageOptions.Builder b = new DisplayImageOptions.Builder(); + b.cloneFrom(mImageDisplayOptions); + b.extraForDownloader(new AccountExtra(accountId)); + mImageLoader.displayImage(url, view, b.build(), loadingHandler, loadingHandler); + } - public void displayProfileBanner(final ImageView view, final String base_url, final int width) { - final String type = getBestBannerType(width); - final String url = TextUtils.isEmpty(base_url) ? null : base_url + "/" + type; - mImageLoader.displayImage(url, view, mBannerDisplayOptions); - } + public void displayProfileBanner(final ImageView view, final String base_url, final int width) { + final String type = getBestBannerType(width); + final String url = TextUtils.isEmpty(base_url) ? null : base_url + "/" + type; + mImageLoader.displayImage(url, view, mBannerDisplayOptions); + } - public void displayProfileImage(final ImageView view, final String url) { - mImageLoader.displayImage(url, view, mProfileImageDisplayOptions); - } + public void displayProfileImage(final ImageView view, final String url) { + mImageLoader.displayImage(url, view, mProfileImageDisplayOptions); + } - public void loadProfileImage(final String url, final ImageLoadingListener listener) { - mImageLoader.loadImage(url, mProfileImageDisplayOptions, listener); - } + public void loadProfileImage(final String url, final ImageLoadingListener listener) { + mImageLoader.loadImage(url, mProfileImageDisplayOptions, listener); + } + + public void cancelDisplayTask(ImageView imageView) { + mImageLoader.cancelDisplayTask(imageView); + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/MultiSelectEventHandler.java b/twidere/src/main/java/org/mariotaku/twidere/util/MultiSelectEventHandler.java index 0b81fc965..81095471f 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/MultiSelectEventHandler.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/MultiSelectEventHandler.java @@ -19,11 +19,6 @@ package org.mariotaku.twidere.util; -import static org.mariotaku.twidere.util.ContentValuesCreator.makeFilterdUserContentValues; -import static org.mariotaku.twidere.util.Utils.getAccountScreenNames; -import static org.mariotaku.twidere.util.content.ContentResolverUtils.bulkDelete; -import static org.mariotaku.twidere.util.content.ContentResolverUtils.bulkInsert; - import android.annotation.SuppressLint; import android.content.ContentResolver; import android.content.ContentValues; @@ -31,19 +26,16 @@ import android.content.Intent; import android.os.Bundle; import android.view.ActionMode; import android.view.Menu; -import android.view.MenuInflater; import android.view.MenuItem; import com.twitter.Extractor; -import de.keyboardsurfer.android.widget.crouton.Crouton; -import de.keyboardsurfer.android.widget.crouton.CroutonStyle; - import org.mariotaku.twidere.Constants; import org.mariotaku.twidere.R; import org.mariotaku.twidere.activity.support.BaseSupportActivity; import org.mariotaku.twidere.app.TwidereApplication; import org.mariotaku.twidere.menu.AccountActionProvider; +import org.mariotaku.twidere.menu.TwidereMenuInflater; import org.mariotaku.twidere.model.Account; import org.mariotaku.twidere.model.ParcelableStatus; import org.mariotaku.twidere.model.ParcelableUser; @@ -57,198 +49,206 @@ import java.util.List; import java.util.Set; import java.util.TreeSet; +import de.keyboardsurfer.android.widget.crouton.Crouton; +import de.keyboardsurfer.android.widget.crouton.CroutonStyle; + +import static org.mariotaku.twidere.util.ContentValuesCreator.makeFilterdUserContentValues; +import static org.mariotaku.twidere.util.Utils.getAccountScreenNames; +import static org.mariotaku.twidere.util.content.ContentResolverUtils.bulkDelete; +import static org.mariotaku.twidere.util.content.ContentResolverUtils.bulkInsert; + @SuppressLint("Registered") public class MultiSelectEventHandler implements Constants, ActionMode.Callback, MultiSelectManager.Callback { - private TwidereApplication mApplication; + private TwidereApplication mApplication; - private AsyncTwitterWrapper mTwitterWrapper; + private AsyncTwitterWrapper mTwitterWrapper; - private MultiSelectManager mMultiSelectManager; + private MultiSelectManager mMultiSelectManager; - private ActionMode mActionMode; + private ActionMode mActionMode; - private final BaseSupportActivity mActivity; + private final BaseSupportActivity mActivity; - private AccountActionProvider mAccountActionProvider; + private AccountActionProvider mAccountActionProvider; - public static final int MENU_GROUP = 201; + public static final int MENU_GROUP = 201; - public MultiSelectEventHandler(final BaseSupportActivity activity) { - mActivity = activity; - } + public MultiSelectEventHandler(final BaseSupportActivity activity) { + mActivity = activity; + } - /** - * Call before super.onCreate - */ - public void dispatchOnCreate() { - mApplication = mActivity.getTwidereApplication(); - mTwitterWrapper = mApplication.getTwitterWrapper(); - mMultiSelectManager = mApplication.getMultiSelectManager(); - } + /** + * Call before super.onCreate + */ + public void dispatchOnCreate() { + mApplication = mActivity.getTwidereApplication(); + mTwitterWrapper = mApplication.getTwitterWrapper(); + mMultiSelectManager = mApplication.getMultiSelectManager(); + } - /** - * Call after super.onStart - */ - public void dispatchOnStart() { - mMultiSelectManager.registerCallback(this); - updateMultiSelectState(); - } + /** + * Call after super.onStart + */ + public void dispatchOnStart() { + mMultiSelectManager.registerCallback(this); + updateMultiSelectState(); + } - /** - * Call before super.onStop - */ - public void dispatchOnStop() { - mMultiSelectManager.unregisterCallback(this); - } + /** + * Call before super.onStop + */ + public void dispatchOnStop() { + mMultiSelectManager.unregisterCallback(this); + } - @Override - public boolean onActionItemClicked(final ActionMode mode, final MenuItem item) { - final List selectedItems = mMultiSelectManager.getSelectedItems(); - if (selectedItems.isEmpty()) return false; - switch (item.getItemId()) { - case MENU_REPLY: { - final Extractor extractor = new Extractor(); - final Intent intent = new Intent(INTENT_ACTION_REPLY_MULTIPLE); - final Bundle bundle = new Bundle(); - final String[] accountScreenNames = getAccountScreenNames(mActivity); - final Collection allMentions = new TreeSet(String.CASE_INSENSITIVE_ORDER); - for (final Object object : selectedItems) { - if (object instanceof ParcelableStatus) { - final ParcelableStatus status = (ParcelableStatus) object; - allMentions.add(status.user_screen_name); - allMentions.addAll(extractor.extractMentionedScreennames(status.text_plain)); - } else if (object instanceof ParcelableUser) { - final ParcelableUser user = (ParcelableUser) object; - allMentions.add(user.screen_name); - } - } - allMentions.removeAll(Arrays.asList(accountScreenNames)); - final Object firstObj = selectedItems.get(0); - if (firstObj instanceof ParcelableStatus) { - final ParcelableStatus first_status = (ParcelableStatus) firstObj; - bundle.putLong(EXTRA_IN_REPLY_TO_ID, first_status.id); - } - bundle.putLong(EXTRA_ACCOUNT_ID, mMultiSelectManager.getAccountId()); - bundle.putStringArray(EXTRA_SCREEN_NAMES, allMentions.toArray(new String[allMentions.size()])); - intent.putExtras(bundle); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - mActivity.startActivity(intent); - mode.finish(); - break; - } - case MENU_MUTE_USER: { - final ContentResolver resolver = mActivity.getContentResolver(); - final ArrayList valuesList = new ArrayList(); - final Set userIds = new HashSet(); - for (final Object object : selectedItems) { - if (object instanceof ParcelableStatus) { - final ParcelableStatus status = (ParcelableStatus) object; - userIds.add(status.user_id); - valuesList.add(makeFilterdUserContentValues(status)); - } else if (object instanceof ParcelableUser) { - final ParcelableUser user = (ParcelableUser) object; - userIds.add(user.id); - valuesList.add(makeFilterdUserContentValues(user)); - } else { - continue; - } - } - bulkDelete(resolver, Filters.Users.CONTENT_URI, Filters.Users.USER_ID, userIds, null, false); - bulkInsert(resolver, Filters.Users.CONTENT_URI, valuesList); - Crouton.showText(mActivity, R.string.message_users_muted, CroutonStyle.INFO); - mode.finish(); - mActivity.sendBroadcast(new Intent(BROADCAST_MULTI_MUTESTATE_CHANGED)); - break; - } - case MENU_BLOCK: { - final long accountId = mMultiSelectManager.getAccountId(); - final long[] userIds = MultiSelectManager.getSelectedUserIds(selectedItems); - if (accountId > 0 && userIds != null) { - mTwitterWrapper.createMultiBlockAsync(accountId, userIds); - } - mode.finish(); - break; - } - case MENU_REPORT_SPAM: { - final long accountId = mMultiSelectManager.getAccountId(); - final long[] userIds = MultiSelectManager.getSelectedUserIds(selectedItems); - if (accountId > 0 && userIds != null) { - mTwitterWrapper.reportMultiSpam(accountId, userIds); - } - mode.finish(); - break; - } - } - if (item.getGroupId() == AccountActionProvider.MENU_GROUP) { - final Intent intent = item.getIntent(); - if (intent == null || !intent.hasExtra(EXTRA_ACCOUNT)) return false; - final Account account = intent.getParcelableExtra(EXTRA_ACCOUNT); - mMultiSelectManager.setAccountId(account.account_id); - if (mAccountActionProvider != null) { - mAccountActionProvider.setAccountId(account.account_id); - } - mode.invalidate(); - } - return true; - } + @Override + public boolean onActionItemClicked(final ActionMode mode, final MenuItem item) { + final List selectedItems = mMultiSelectManager.getSelectedItems(); + if (selectedItems.isEmpty()) return false; + switch (item.getItemId()) { + case MENU_REPLY: { + final Extractor extractor = new Extractor(); + final Intent intent = new Intent(INTENT_ACTION_REPLY_MULTIPLE); + final Bundle bundle = new Bundle(); + final String[] accountScreenNames = getAccountScreenNames(mActivity); + final Collection allMentions = new TreeSet(String.CASE_INSENSITIVE_ORDER); + for (final Object object : selectedItems) { + if (object instanceof ParcelableStatus) { + final ParcelableStatus status = (ParcelableStatus) object; + allMentions.add(status.user_screen_name); + allMentions.addAll(extractor.extractMentionedScreennames(status.text_plain)); + } else if (object instanceof ParcelableUser) { + final ParcelableUser user = (ParcelableUser) object; + allMentions.add(user.screen_name); + } + } + allMentions.removeAll(Arrays.asList(accountScreenNames)); + final Object firstObj = selectedItems.get(0); + if (firstObj instanceof ParcelableStatus) { + final ParcelableStatus first_status = (ParcelableStatus) firstObj; + bundle.putLong(EXTRA_IN_REPLY_TO_ID, first_status.id); + } + bundle.putLong(EXTRA_ACCOUNT_ID, mMultiSelectManager.getAccountId()); + bundle.putStringArray(EXTRA_SCREEN_NAMES, allMentions.toArray(new String[allMentions.size()])); + intent.putExtras(bundle); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + mActivity.startActivity(intent); + mode.finish(); + break; + } + case MENU_MUTE_USER: { + final ContentResolver resolver = mActivity.getContentResolver(); + final ArrayList valuesList = new ArrayList(); + final Set userIds = new HashSet(); + for (final Object object : selectedItems) { + if (object instanceof ParcelableStatus) { + final ParcelableStatus status = (ParcelableStatus) object; + userIds.add(status.user_id); + valuesList.add(makeFilterdUserContentValues(status)); + } else if (object instanceof ParcelableUser) { + final ParcelableUser user = (ParcelableUser) object; + userIds.add(user.id); + valuesList.add(makeFilterdUserContentValues(user)); + } else { + continue; + } + } + bulkDelete(resolver, Filters.Users.CONTENT_URI, Filters.Users.USER_ID, userIds, null, false); + bulkInsert(resolver, Filters.Users.CONTENT_URI, valuesList); + Crouton.showText(mActivity, R.string.message_users_muted, CroutonStyle.INFO); + mode.finish(); + mActivity.sendBroadcast(new Intent(BROADCAST_MULTI_MUTESTATE_CHANGED)); + break; + } + case MENU_BLOCK: { + final long accountId = mMultiSelectManager.getAccountId(); + final long[] userIds = MultiSelectManager.getSelectedUserIds(selectedItems); + if (accountId > 0 && userIds != null) { + mTwitterWrapper.createMultiBlockAsync(accountId, userIds); + } + mode.finish(); + break; + } + case MENU_REPORT_SPAM: { + final long accountId = mMultiSelectManager.getAccountId(); + final long[] userIds = MultiSelectManager.getSelectedUserIds(selectedItems); + if (accountId > 0 && userIds != null) { + mTwitterWrapper.reportMultiSpam(accountId, userIds); + } + mode.finish(); + break; + } + } + if (item.getGroupId() == AccountActionProvider.MENU_GROUP) { + final Intent intent = item.getIntent(); + if (intent == null || !intent.hasExtra(EXTRA_ACCOUNT)) return false; + final Account account = intent.getParcelableExtra(EXTRA_ACCOUNT); + mMultiSelectManager.setAccountId(account.account_id); + if (mAccountActionProvider != null) { + mAccountActionProvider.setAccountId(account.account_id); + } + mode.invalidate(); + } + return true; + } - @Override - public boolean onCreateActionMode(final ActionMode mode, final Menu menu) { - new MenuInflater(mActivity).inflate(R.menu.action_multi_select_contents, menu); - mAccountActionProvider = (AccountActionProvider) menu.findItem(MENU_SELECT_ACCOUNT).getActionProvider(); - mAccountActionProvider.setAccountId(mMultiSelectManager.getFirstSelectAccountId()); - return true; - } + @Override + public boolean onCreateActionMode(final ActionMode mode, final Menu menu) { + new TwidereMenuInflater(mActivity).inflate(R.menu.action_multi_select_contents, menu); + mAccountActionProvider = (AccountActionProvider) menu.findItem(MENU_SELECT_ACCOUNT).getActionProvider(); + mAccountActionProvider.setAccountId(mMultiSelectManager.getFirstSelectAccountId()); + return true; + } - @Override - public void onDestroyActionMode(final ActionMode mode) { - if (mMultiSelectManager.getCount() != 0) { - mMultiSelectManager.clearSelectedItems(); - } - mAccountActionProvider = null; - mActionMode = null; - } + @Override + public void onDestroyActionMode(final ActionMode mode) { + if (mMultiSelectManager.getCount() != 0) { + mMultiSelectManager.clearSelectedItems(); + } + mAccountActionProvider = null; + mActionMode = null; + } - @Override - public void onItemsCleared() { - updateMultiSelectState(); - } + @Override + public void onItemsCleared() { + updateMultiSelectState(); + } - @Override - public void onItemSelected(final Object item) { - updateMultiSelectState(); - } + @Override + public void onItemSelected(final Object item) { + updateMultiSelectState(); + } - @Override - public void onItemUnselected(final Object item) { - updateMultiSelectState(); - } + @Override + public void onItemUnselected(final Object item) { + updateMultiSelectState(); + } - @Override - public boolean onPrepareActionMode(final ActionMode mode, final Menu menu) { - updateSelectedCount(mode); - return true; - } + @Override + public boolean onPrepareActionMode(final ActionMode mode, final Menu menu) { + updateSelectedCount(mode); + return true; + } - private void updateMultiSelectState() { - if (mMultiSelectManager.isActive()) { - if (mActionMode == null) { - mActionMode = mActivity.startActionMode(this); - } - updateSelectedCount(mActionMode); - } else { - if (mActionMode != null) { - mActionMode.finish(); - mActionMode = null; - } - } - } + private void updateMultiSelectState() { + if (mMultiSelectManager.isActive()) { + if (mActionMode == null) { + mActionMode = mActivity.startActionMode(this); + } + updateSelectedCount(mActionMode); + } else { + if (mActionMode != null) { + mActionMode.finish(); + mActionMode = null; + } + } + } - private void updateSelectedCount(final ActionMode mode) { - if (mode == null || mActivity == null || mMultiSelectManager == null) return; - final int count = mMultiSelectManager.getCount(); - mode.setTitle(mActivity.getResources().getQuantityString(R.plurals.Nitems_selected, count, count)); - } + private void updateSelectedCount(final ActionMode mode) { + if (mode == null || mActivity == null || mMultiSelectManager == null) return; + final int count = mMultiSelectManager.getCount(); + mode.setTitle(mActivity.getResources().getQuantityString(R.plurals.Nitems_selected, count, count)); + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/ThemeUtils.java b/twidere/src/main/java/org/mariotaku/twidere/util/ThemeUtils.java index f8c33cd72..61e5b0dbe 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/ThemeUtils.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/ThemeUtils.java @@ -23,7 +23,6 @@ import android.app.ActionBar; import android.app.Activity; import android.content.Context; import android.content.Intent; -import android.content.SharedPreferences; import android.content.res.Resources; import android.content.res.TypedArray; import android.graphics.Color; @@ -32,6 +31,7 @@ import android.graphics.Typeface; import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; import android.os.Build; +import android.support.annotation.NonNull; import android.text.TextPaint; import android.text.TextUtils; import android.util.AttributeSet; @@ -289,8 +289,8 @@ public class ThemeUtils implements Constants { public static boolean getDarkActionBarOption(final Context context) { if (context == null) return true; - final SharedPreferences pref = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); - return pref == null || pref.getBoolean(KEY_THEME_DARK_ACTIONBAR, true); + final SharedPreferencesWrapper pref = getSharedPreferencesWrapper(context); + return pref.getBoolean(KEY_THEME_DARK_ACTIONBAR, true); } public static Context getDialogThemedContext(final Context context) { @@ -388,7 +388,7 @@ public class ThemeUtils implements Constants { public static int getNoDisplayThemeResource(final Context context) { if (context == null) return R.style.Theme_Twidere_Dark_NoDisplay; - final SharedPreferences pref = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); + final SharedPreferencesWrapper pref = getSharedPreferencesWrapper(context); final String theme = pref.getString(KEY_THEME, VALUE_THEME_NAME_TWIDERE); if (VALUE_THEME_NAME_DARK.equals(theme)) return R.style.Theme_Twidere_Dark_NoDisplay; return R.style.Theme_Twidere_Light_NoDisplay; @@ -396,8 +396,7 @@ public class ThemeUtils implements Constants { public static Resources getResources(final Context context) { if (context instanceof IThemedActivity) { - final Resources defRes = ((IThemedActivity) context).getDefaultResources(); - return defRes; + return ((IThemedActivity) context).getDefaultResources(); } return context.getResources(); } @@ -473,8 +472,7 @@ public class ThemeUtils implements Constants { public static String getThemeBackgroundOption(final Context context) { if (context == null) return VALUE_THEME_BACKGROUND_DEFAULT; - final SharedPreferences pref = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); - if (pref == null) return VALUE_THEME_BACKGROUND_DEFAULT; + final SharedPreferencesWrapper pref = getSharedPreferencesWrapper(context); return pref.getString(KEY_THEME_BACKGROUND, VALUE_THEME_BACKGROUND_DEFAULT); } @@ -501,10 +499,10 @@ public class ThemeUtils implements Constants { final int themeRes, accentColor; if (context instanceof IThemedActivity) { themeRes = ((IThemedActivity) context).getThemeResourceId(); - accentColor = ((IThemedActivity) context).getThemeColor(); + accentColor = ((IThemedActivity) context).getOverrideAccentColor(); } else { themeRes = getSettingsThemeResource(context); - accentColor = getUserThemeColor(context); + accentColor = getUserThemeColor(context, themeRes); } return new TwidereContextThemeWrapper(context, getThemeResActionIcons(themeRes), accentColor); } @@ -522,7 +520,7 @@ public class ThemeUtils implements Constants { final int themeRes, accentColor; if (context instanceof IThemedActivity) { themeRes = ((IThemedActivity) context).getThemeResourceId(); - accentColor = ((IThemedActivity) context).getThemeColor(); + accentColor = ((IThemedActivity) context).getOverrideAccentColor(); } else { themeRes = getSettingsThemeResource(context); accentColor = getUserThemeColor(context); @@ -533,7 +531,7 @@ public class ThemeUtils implements Constants { public static String getThemeFontFamily(final Context context) { if (context == null) return VALUE_THEME_FONT_FAMILY_REGULAR; - final SharedPreferences pref = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); + final SharedPreferencesWrapper pref = getSharedPreferencesWrapper(context); final String fontFamily = pref.getString(KEY_THEME_FONT_FAMILY, VALUE_THEME_FONT_FAMILY_REGULAR); if (!TextUtils.isEmpty(fontFamily)) return fontFamily; return VALUE_THEME_FONT_FAMILY_REGULAR; @@ -550,10 +548,17 @@ public class ThemeUtils implements Constants { } } + @NonNull + private static SharedPreferencesWrapper getSharedPreferencesWrapper(Context context) { + final Context appContext = context.getApplicationContext(); + return SharedPreferencesWrapper.getInstance(appContext, SHARED_PREFERENCES_NAME, + Context.MODE_PRIVATE); + } + public static String getThemeNameOption(final Context context) { if (context == null) return VALUE_THEME_NAME_TWIDERE; - final SharedPreferences pref = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); - return pref != null ? pref.getString(KEY_THEME, VALUE_THEME_NAME_TWIDERE) : VALUE_THEME_NAME_TWIDERE; + final SharedPreferencesWrapper pref = getSharedPreferencesWrapper(context); + return pref.getString(KEY_THEME, VALUE_THEME_NAME_TWIDERE); } public static int getThemeResActionIcons(final int baseThemeRes) { @@ -651,16 +656,23 @@ public class ThemeUtils implements Constants { public static int getUserThemeBackgroundAlpha(final Context context) { if (context == null) return DEFAULT_THEME_BACKGROUND_ALPHA; - final SharedPreferences pref = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); + final SharedPreferencesWrapper pref = getSharedPreferencesWrapper(context); return pref.getInt(KEY_THEME_BACKGROUND_ALPHA, DEFAULT_THEME_BACKGROUND_ALPHA); } public static int getUserThemeColor(final Context context) { if (context == null) return Color.TRANSPARENT; final Resources res = getResources(context); - final SharedPreferences pref = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); + final SharedPreferencesWrapper pref = getSharedPreferencesWrapper(context); final int def = res.getColor(android.R.color.holo_blue_light); - return pref != null ? pref.getInt(KEY_THEME_COLOR, def) : def; + return pref.getInt(KEY_THEME_COLOR, def); + } + + public static int getUserThemeColor(final Context context, int themeRes) { + if (context == null) return Color.TRANSPARENT; + final int defThemeColor = getThemeColor(context, themeRes); + final SharedPreferencesWrapper pref = getSharedPreferencesWrapper(context); + return pref.getInt(KEY_THEME_COLOR, defThemeColor); } public static Typeface getUserTypeface(final Context context, final Typeface defTypeface) { @@ -943,4 +955,16 @@ public class ThemeUtils implements Constants { public static Resources getThemedResourcesForActionIcons(Context context, int themeRes, int accentColor) { return getThemedContextForActionIcons(context, themeRes, accentColor).getResources(); } + + public static int getThemeColor(Context context, int themeResourceId) { + final Context appContext = context.getApplicationContext(); + final Resources res = appContext.getResources(); + final TypedArray a = appContext.obtainStyledAttributes(null, + new int[]{android.R.attr.colorActivatedHighlight}, 0, themeResourceId); + try { + return a.getColor(0, res.getColor(android.R.color.holo_blue_light)); + } finally { + a.recycle(); + } + } } 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 37541e423..8a2200b35 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 @@ -19,9 +19,6 @@ package org.mariotaku.twidere.util.content; -import static org.mariotaku.twidere.util.Utils.trim; -import static org.mariotaku.twidere.util.content.DatabaseUpgradeHelper.safeUpgrade; - import android.content.ContentValues; import android.content.Context; import android.content.SharedPreferences; @@ -49,114 +46,120 @@ import org.mariotaku.twidere.util.TwidereQueryBuilder.DirectMessagesQueryBuilder import java.util.HashMap; +import static org.mariotaku.twidere.util.Utils.trim; +import static org.mariotaku.twidere.util.content.DatabaseUpgradeHelper.safeUpgrade; + public final class TwidereSQLiteOpenHelper extends SQLiteOpenHelper implements Constants { - private final Context mContext; + private final Context mContext; - public TwidereSQLiteOpenHelper(final Context context, final String name, final int version) { - super(context, name, null, version); - mContext = context; - } + public TwidereSQLiteOpenHelper(final Context context, final String name, final int version) { + super(context, name, null, version); + mContext = context; + } - @Override - public void onCreate(final SQLiteDatabase db) { - db.beginTransaction(); - db.execSQL(createTable(Accounts.TABLE_NAME, Accounts.COLUMNS, Accounts.TYPES, true)); - db.execSQL(createTable(Statuses.TABLE_NAME, Statuses.COLUMNS, Statuses.TYPES, true)); - db.execSQL(createTable(Mentions.TABLE_NAME, Mentions.COLUMNS, Mentions.TYPES, true)); - db.execSQL(createTable(Drafts.TABLE_NAME, Drafts.COLUMNS, Drafts.TYPES, true)); - db.execSQL(createTable(CachedUsers.TABLE_NAME, CachedUsers.COLUMNS, CachedUsers.TYPES, true)); - db.execSQL(createTable(CachedStatuses.TABLE_NAME, CachedStatuses.COLUMNS, CachedStatuses.TYPES, true)); - db.execSQL(createTable(CachedHashtags.TABLE_NAME, CachedHashtags.COLUMNS, CachedHashtags.TYPES, true)); - db.execSQL(createTable(Filters.Users.TABLE_NAME, Filters.Users.COLUMNS, Filters.Users.TYPES, true)); - db.execSQL(createTable(Filters.Keywords.TABLE_NAME, Filters.Keywords.COLUMNS, Filters.Keywords.TYPES, true)); - db.execSQL(createTable(Filters.Sources.TABLE_NAME, Filters.Sources.COLUMNS, Filters.Sources.TYPES, true)); - db.execSQL(createTable(Filters.Links.TABLE_NAME, Filters.Links.COLUMNS, Filters.Links.TYPES, true)); - db.execSQL(createTable(DirectMessages.Inbox.TABLE_NAME, DirectMessages.Inbox.COLUMNS, - DirectMessages.Inbox.TYPES, true)); - db.execSQL(createTable(DirectMessages.Outbox.TABLE_NAME, DirectMessages.Outbox.COLUMNS, - DirectMessages.Outbox.TYPES, true)); - db.execSQL(createTable(CachedTrends.Local.TABLE_NAME, CachedTrends.Local.COLUMNS, CachedTrends.Local.TYPES, - true)); - db.execSQL(createTable(Tabs.TABLE_NAME, Tabs.COLUMNS, Tabs.TYPES, true)); - db.execSQL(createDirectMessagesView().getSQL()); - db.execSQL(createDirectMessageConversationEntriesView().getSQL()); - db.setTransactionSuccessful(); - db.endTransaction(); - } + @Override + public void onCreate(final SQLiteDatabase db) { + db.beginTransaction(); + db.execSQL(createTable(Accounts.TABLE_NAME, Accounts.COLUMNS, Accounts.TYPES, true)); + db.execSQL(createTable(Statuses.TABLE_NAME, Statuses.COLUMNS, Statuses.TYPES, true)); + db.execSQL(createTable(Mentions.TABLE_NAME, Mentions.COLUMNS, Mentions.TYPES, true)); + db.execSQL(createTable(Drafts.TABLE_NAME, Drafts.COLUMNS, Drafts.TYPES, true)); + db.execSQL(createTable(CachedUsers.TABLE_NAME, CachedUsers.COLUMNS, CachedUsers.TYPES, true)); + db.execSQL(createTable(CachedStatuses.TABLE_NAME, CachedStatuses.COLUMNS, CachedStatuses.TYPES, true)); + db.execSQL(createTable(CachedHashtags.TABLE_NAME, CachedHashtags.COLUMNS, CachedHashtags.TYPES, true)); + db.execSQL(createTable(Filters.Users.TABLE_NAME, Filters.Users.COLUMNS, Filters.Users.TYPES, true)); + db.execSQL(createTable(Filters.Keywords.TABLE_NAME, Filters.Keywords.COLUMNS, Filters.Keywords.TYPES, true)); + db.execSQL(createTable(Filters.Sources.TABLE_NAME, Filters.Sources.COLUMNS, Filters.Sources.TYPES, true)); + db.execSQL(createTable(Filters.Links.TABLE_NAME, Filters.Links.COLUMNS, Filters.Links.TYPES, true)); + db.execSQL(createTable(DirectMessages.Inbox.TABLE_NAME, DirectMessages.Inbox.COLUMNS, + DirectMessages.Inbox.TYPES, true)); + db.execSQL(createTable(DirectMessages.Outbox.TABLE_NAME, DirectMessages.Outbox.COLUMNS, + DirectMessages.Outbox.TYPES, true)); + db.execSQL(createTable(CachedTrends.Local.TABLE_NAME, CachedTrends.Local.COLUMNS, CachedTrends.Local.TYPES, + true)); + db.execSQL(createTable(Tabs.TABLE_NAME, Tabs.COLUMNS, Tabs.TYPES, true)); + db.execSQL(createDirectMessagesView().getSQL()); + db.execSQL(createDirectMessageConversationEntriesView().getSQL()); + db.setTransactionSuccessful(); + db.endTransaction(); + } - @Override - public void onDowngrade(final SQLiteDatabase db, final int oldVersion, final int newVersion) { - handleVersionChange(db, oldVersion, newVersion); - } + @Override + public void onDowngrade(final SQLiteDatabase db, final int oldVersion, final int newVersion) { + handleVersionChange(db, oldVersion, newVersion); + } - @Override - public void onUpgrade(final SQLiteDatabase db, final int oldVersion, final int newVersion) { - handleVersionChange(db, oldVersion, newVersion); - if (oldVersion <= 43 && newVersion >= 44) { - final ContentValues values = new ContentValues(); - final SharedPreferences prefs = mContext - .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); - 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); - } - } + @Override + public void onUpgrade(final SQLiteDatabase db, final int oldVersion, final int newVersion) { + handleVersionChange(db, oldVersion, newVersion); + if (oldVersion <= 43 && newVersion >= 44) { + final ContentValues values = new ContentValues(); + final SharedPreferences prefs = mContext + .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); + 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); + } + } - private SQLCreateViewQuery createDirectMessageConversationEntriesView() { - final SQLCreateViewQuery.Builder qb = SQLQueryBuilder.createView(true, - DirectMessages.ConversationEntries.TABLE_NAME); - qb.as(ConversationsEntryQueryBuilder.build()); - return qb.build(); - } + private SQLCreateViewQuery createDirectMessageConversationEntriesView() { + final SQLCreateViewQuery.Builder qb = SQLQueryBuilder.createView(true, + DirectMessages.ConversationEntries.TABLE_NAME); + qb.as(ConversationsEntryQueryBuilder.build()); + return qb.build(); + } - private SQLCreateViewQuery createDirectMessagesView() { - final SQLCreateViewQuery.Builder qb = SQLQueryBuilder.createView(true, DirectMessages.TABLE_NAME); - qb.as(DirectMessagesQueryBuilder.build()); - return qb.build(); - } + private SQLCreateViewQuery createDirectMessagesView() { + final SQLCreateViewQuery.Builder qb = SQLQueryBuilder.createView(true, DirectMessages.TABLE_NAME); + qb.as(DirectMessagesQueryBuilder.build()); + return qb.build(); + } - private void handleVersionChange(final SQLiteDatabase db, final int oldVersion, final int newVersion) { - final HashMap accountsAlias = new HashMap(); - final HashMap filtersAlias = new HashMap(); - accountsAlias.put(Accounts.SCREEN_NAME, "username"); - accountsAlias.put(Accounts.NAME, "username"); - accountsAlias.put(Accounts.ACCOUNT_ID, "user_id"); - accountsAlias.put(Accounts.COLOR, "user_color"); - accountsAlias.put(Accounts.OAUTH_TOKEN_SECRET, "token_secret"); - safeUpgrade(db, Accounts.TABLE_NAME, Accounts.COLUMNS, Accounts.TYPES, false, accountsAlias); - safeUpgrade(db, Statuses.TABLE_NAME, Statuses.COLUMNS, Statuses.TYPES, true, null); - safeUpgrade(db, Mentions.TABLE_NAME, Mentions.COLUMNS, Mentions.TYPES, true, null); - safeUpgrade(db, Drafts.TABLE_NAME, Drafts.COLUMNS, Drafts.TYPES, false, null); - safeUpgrade(db, CachedUsers.TABLE_NAME, CachedUsers.COLUMNS, CachedUsers.TYPES, true, null); - safeUpgrade(db, CachedStatuses.TABLE_NAME, CachedStatuses.COLUMNS, CachedStatuses.TYPES, false, null); - safeUpgrade(db, CachedHashtags.TABLE_NAME, CachedHashtags.COLUMNS, CachedHashtags.TYPES, false, null); - safeUpgrade(db, Filters.Users.TABLE_NAME, Filters.Users.COLUMNS, Filters.Users.TYPES, oldVersion < 49, null); - safeUpgrade(db, Filters.Keywords.TABLE_NAME, Filters.Keywords.COLUMNS, Filters.Keywords.TYPES, oldVersion < 49, - filtersAlias); - safeUpgrade(db, Filters.Sources.TABLE_NAME, Filters.Sources.COLUMNS, Filters.Sources.TYPES, oldVersion < 49, - filtersAlias); - safeUpgrade(db, Filters.Links.TABLE_NAME, Filters.Links.COLUMNS, Filters.Links.TYPES, oldVersion < 49, - filtersAlias); - safeUpgrade(db, DirectMessages.Inbox.TABLE_NAME, DirectMessages.Inbox.COLUMNS, DirectMessages.Inbox.TYPES, - true, null); - safeUpgrade(db, DirectMessages.Outbox.TABLE_NAME, DirectMessages.Outbox.COLUMNS, DirectMessages.Outbox.TYPES, - true, null); - safeUpgrade(db, CachedTrends.Local.TABLE_NAME, CachedTrends.Local.COLUMNS, CachedTrends.Local.TYPES, true, null); - safeUpgrade(db, Tabs.TABLE_NAME, Tabs.COLUMNS, Tabs.TYPES, false, null); - db.execSQL(createDirectMessagesView().getSQL()); - db.execSQL(createDirectMessageConversationEntriesView().getSQL()); - } + private void handleVersionChange(final SQLiteDatabase db, final int oldVersion, final int newVersion) { + final HashMap accountsAlias = new HashMap(); + final HashMap filtersAlias = new HashMap(); + accountsAlias.put(Accounts.SCREEN_NAME, "username"); + accountsAlias.put(Accounts.NAME, "username"); + accountsAlias.put(Accounts.ACCOUNT_ID, "user_id"); + accountsAlias.put(Accounts.COLOR, "user_color"); + accountsAlias.put(Accounts.OAUTH_TOKEN_SECRET, "token_secret"); + safeUpgrade(db, Accounts.TABLE_NAME, Accounts.COLUMNS, Accounts.TYPES, false, accountsAlias); + safeUpgrade(db, Statuses.TABLE_NAME, Statuses.COLUMNS, Statuses.TYPES, true, null); + safeUpgrade(db, Mentions.TABLE_NAME, Mentions.COLUMNS, Mentions.TYPES, true, null); + safeUpgrade(db, Drafts.TABLE_NAME, Drafts.COLUMNS, Drafts.TYPES, false, null); + safeUpgrade(db, CachedUsers.TABLE_NAME, CachedUsers.COLUMNS, CachedUsers.TYPES, true, null); + safeUpgrade(db, CachedStatuses.TABLE_NAME, CachedStatuses.COLUMNS, CachedStatuses.TYPES, false, null); + safeUpgrade(db, CachedHashtags.TABLE_NAME, CachedHashtags.COLUMNS, CachedHashtags.TYPES, false, null); + safeUpgrade(db, Filters.Users.TABLE_NAME, Filters.Users.COLUMNS, Filters.Users.TYPES, oldVersion < 49, null); + safeUpgrade(db, Filters.Keywords.TABLE_NAME, Filters.Keywords.COLUMNS, Filters.Keywords.TYPES, oldVersion < 49, + filtersAlias); + safeUpgrade(db, Filters.Sources.TABLE_NAME, Filters.Sources.COLUMNS, Filters.Sources.TYPES, oldVersion < 49, + filtersAlias); + safeUpgrade(db, Filters.Links.TABLE_NAME, Filters.Links.COLUMNS, Filters.Links.TYPES, oldVersion < 49, + filtersAlias); + safeUpgrade(db, DirectMessages.Inbox.TABLE_NAME, DirectMessages.Inbox.COLUMNS, DirectMessages.Inbox.TYPES, + true, null); + safeUpgrade(db, DirectMessages.Outbox.TABLE_NAME, DirectMessages.Outbox.COLUMNS, DirectMessages.Outbox.TYPES, + true, null); + safeUpgrade(db, CachedTrends.Local.TABLE_NAME, CachedTrends.Local.COLUMNS, CachedTrends.Local.TYPES, true, null); + safeUpgrade(db, Tabs.TABLE_NAME, Tabs.COLUMNS, Tabs.TYPES, false, null); + db.beginTransaction(); + db.execSQL(createDirectMessagesView().getSQL()); + db.execSQL(createDirectMessageConversationEntriesView().getSQL()); + db.setTransactionSuccessful(); + db.endTransaction(); + } - private static String createTable(final String tableName, final String[] columns, final String[] types, - final boolean createIfNotExists) { - final SQLCreateTableQuery.Builder qb = SQLQueryBuilder.createTable(createIfNotExists, tableName); - qb.columns(NewColumn.createNewColumns(columns, types)); - return qb.buildSQL(); - } + private static String createTable(final String tableName, final String[] columns, final String[] types, + final boolean createIfNotExists) { + final SQLCreateTableQuery.Builder qb = SQLQueryBuilder.createTable(createIfNotExists, tableName); + qb.columns(NewColumn.createNewColumns(columns, types)); + return qb.buildSQL(); + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/theme/WhiteDrawableInterceptor.java b/twidere/src/main/java/org/mariotaku/twidere/util/theme/WhiteDrawableInterceptor.java index b57997ba3..6eaec178f 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/theme/WhiteDrawableInterceptor.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/theme/WhiteDrawableInterceptor.java @@ -26,11 +26,11 @@ public class WhiteDrawableInterceptor implements AccentResources.Interceptor { @Override public Drawable getDrawable(final Resources res, final AccentPalette palette, final int resId) { - if (resId == R.drawable.solid_pressed_white_intercepted) + if (resId == R.drawable.solid_white_pressed) return new ColorDrawable(mAccentPalette.getAccentColor(PRESSED_ALPHA)); - if (resId == R.drawable.solid_focused_white_intercepted) + if (resId == R.drawable.solid_white_focused) return new ColorDrawable(mAccentPalette.getAccentColor(FOCUSED_ALPHA)); - if (resId == R.drawable.rect_focused_background_white_intercepted) { + if (resId == R.drawable.rect_white_focused_background) { final int backColor = mAccentPalette.getAccentColor(0x55); final int borderColor = mAccentPalette.getAccentColor(0xAA); return new RectDrawable(mResources, backColor, 2f, borderColor); diff --git a/twidere/src/main/java/org/mariotaku/twidere/view/TwidereMenuBar.java b/twidere/src/main/java/org/mariotaku/twidere/view/TwidereMenuBar.java new file mode 100644 index 000000000..ae2f86940 --- /dev/null +++ b/twidere/src/main/java/org/mariotaku/twidere/view/TwidereMenuBar.java @@ -0,0 +1,26 @@ +package org.mariotaku.twidere.view; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.MenuInflater; + +import org.mariotaku.menucomponent.widget.MenuBar; +import org.mariotaku.twidere.menu.TwidereMenuInflater; + +/** + * Created by mariotaku on 14-7-29. + */ +public class TwidereMenuBar extends MenuBar { + public TwidereMenuBar(Context context) { + super(context); + } + + public TwidereMenuBar(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + public MenuInflater getMenuInflater() { + return new TwidereMenuInflater(getContext()); + } +} diff --git a/twidere/src/main/res/drawable/focused_background_white.xml b/twidere/src/main/res/drawable/focused_background_white.xml deleted file mode 100644 index 482c1e252..000000000 --- a/twidere/src/main/res/drawable/focused_background_white.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - diff --git a/twidere/src/main/res/drawable/list_selector_light_white.xml b/twidere/src/main/res/drawable/list_selector_light_white.xml deleted file mode 100644 index 7877e45da..000000000 --- a/twidere/src/main/res/drawable/list_selector_light_white.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/twidere/src/main/res/drawable/list_selector_white.xml b/twidere/src/main/res/drawable/list_selector_white.xml index b655ad8a8..210e73829 100644 --- a/twidere/src/main/res/drawable/list_selector_white.xml +++ b/twidere/src/main/res/drawable/list_selector_white.xml @@ -1,5 +1,4 @@ - - - + - - - - - - + + + + + + - \ No newline at end of file + diff --git a/twidere/src/main/res/drawable/list_selector_white_light.xml b/twidere/src/main/res/drawable/list_selector_white_light.xml new file mode 100644 index 000000000..9dbfc8a38 --- /dev/null +++ b/twidere/src/main/res/drawable/list_selector_white_light.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + diff --git a/twidere/src/main/res/drawable/list_selector_transition_white.xml b/twidere/src/main/res/drawable/list_selector_white_transition.xml similarity index 81% rename from twidere/src/main/res/drawable/list_selector_transition_white.xml rename to twidere/src/main/res/drawable/list_selector_white_transition.xml index ccf02b0f8..b61696ffb 100644 --- a/twidere/src/main/res/drawable/list_selector_transition_white.xml +++ b/twidere/src/main/res/drawable/list_selector_white_transition.xml @@ -14,9 +14,9 @@ See the License for the specific language governing permissions and limitations under the License. --> - + - - + + - \ No newline at end of file + diff --git a/twidere/src/main/res/layout/action_item_compose.xml b/twidere/src/main/res/layout/action_item_compose.xml index 5bae203a4..b93d2c34c 100644 --- a/twidere/src/main/res/layout/action_item_compose.xml +++ b/twidere/src/main/res/layout/action_item_compose.xml @@ -22,7 +22,7 @@ android:layout_height="wrap_content" android:contentDescription="@string/send" android:cropToPadding="false" - android:padding="@dimen/element_spacing_extra_small" + android:padding="@dimen/element_spacing_xsmall" android:scaleType="centerCrop" app:image="@drawable/ic_iconic_action_send" /> diff --git a/twidere/src/main/res/layout/activity_compose_actionbar.xml b/twidere/src/main/res/layout/activity_compose_actionbar.xml index 6351734f1..843ba8758 100644 --- a/twidere/src/main/res/layout/activity_compose_actionbar.xml +++ b/twidere/src/main/res/layout/activity_compose_actionbar.xml @@ -75,7 +75,7 @@ android:padding="2dp" android:visibility="gone" /> - - + android:padding="@dimen/element_spacing_xsmall"> + android:padding="@dimen/element_spacing_xsmall"/> \ No newline at end of file diff --git a/twidere/src/main/res/layout/gallery_item_compose_account.xml b/twidere/src/main/res/layout/gallery_item_compose_account.xml index 738660c99..ac83cbf3b 100644 --- a/twidere/src/main/res/layout/gallery_item_compose_account.xml +++ b/twidere/src/main/res/layout/gallery_item_compose_account.xml @@ -9,10 +9,10 @@ android:layout_height="match_parent" android:layout_alignParentBottom="true" android:layout_alignParentTop="true" - android:layout_margin="@dimen/element_spacing_extra_small" + android:layout_margin="@dimen/element_spacing_xsmall" android:background="?android:activatedBackgroundIndicator" android:foreground="?android:selectableItemBackground" - android:padding="@dimen/element_spacing_extra_small"/> + android:padding="@dimen/element_spacing_xsmall"/> + @style/Animation.Twidere.Activity + @android:color/black + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + @style/Widget.Twidere.ActionBar.Colored.Inverse + @style/Theme.Twidere.ActionBar.Colored.Dark + @drawable/list_selector_white + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + + @drawable/bg_card_item_dark + #1a1a1a + + @drawable/bg_card_item_message_incoming_dark + + + @drawable/bg_card_item_message_outgoing_dark + + + @drawable/bg_card_item_message_profile_image_incoming_dark + + + @drawable/bg_card_item_message_profile_image_outgoing_dark + + @drawable/ic_list_menu_moreoverflow_normal_holo_dark + + @style/Widget.CardItemView + - + + @drawable/bg_card_item_light + #f8f8f8 + + @drawable/bg_card_item_message_incoming_light + + + @drawable/bg_card_item_message_outgoing_light + + + @drawable/bg_card_item_message_profile_image_incoming_light + + + @drawable/bg_card_item_message_profile_image_outgoing_light + + @drawable/ic_list_menu_moreoverflow_normal_holo_light + + @style/Widget.CardItemView.Light + - + + @drawable/bg_card_item_light + #f8f8f8 + + @drawable/bg_card_item_message_incoming_light + + + @drawable/bg_card_item_message_outgoing_light + + + @drawable/bg_card_item_message_profile_image_incoming_light + + + @drawable/bg_card_item_message_profile_image_outgoing_light + + @drawable/ic_list_menu_moreoverflow_normal_holo_light + + @style/Widget.CardItemView.Light + - + \ No newline at end of file