this commit may fix wrong profile image bug
This commit is contained in:
parent
059360a942
commit
9c7bace28e
|
@ -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() {
|
||||
|
|
|
@ -39,7 +39,7 @@ public class BaseActivity extends BaseThemedActivity implements Constants {
|
|||
}
|
||||
|
||||
@Override
|
||||
public int getThemeColor() {
|
||||
public int getOverrideAccentColor() {
|
||||
return ThemeUtils.getUserThemeColor(this);
|
||||
}
|
||||
|
||||
|
|
|
@ -99,7 +99,7 @@ public abstract class BasePreferenceActivity extends PreferenceActivity implemen
|
|||
}
|
||||
|
||||
@Override
|
||||
public int getThemeColor() {
|
||||
public int getOverrideAccentColor() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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<Header> 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<Header> 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<Header> {
|
||||
private static class HeaderAdapter extends ArrayAdapter<Header> {
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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<String> 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<String> 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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -33,7 +33,7 @@ public interface IThemedActivity extends ITwidereContextWrapper {
|
|||
|
||||
public int getThemeBackgroundAlpha();
|
||||
|
||||
public int getThemeColor();
|
||||
public int getOverrideAccentColor();
|
||||
|
||||
public TwidereMenuInflater getTwidereMenuInflater();
|
||||
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -45,7 +45,7 @@ public class ImagePickerActivity extends BaseSupportThemedActivity {
|
|||
private Runnable mImageSelectedRunnable;
|
||||
|
||||
@Override
|
||||
public int getThemeColor() {
|
||||
public int getOverrideAccentColor() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -77,6 +77,7 @@ public class AccountsSpinnerAdapter extends ArrayAdapter<Account> {
|
|||
if (mDisplayProfileImage) {
|
||||
mImageLoader.displayProfileImage(icon, item.profile_image_url);
|
||||
} else {
|
||||
mImageLoader.cancelDisplayTask(icon);
|
||||
icon.setImageResource(R.drawable.ic_profile_image_default);
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -217,6 +217,7 @@ public abstract class BaseParcelableActivitiesAdapter extends BaseArrayAdapter<P
|
|||
view.setVisibility(View.VISIBLE);
|
||||
mImageLoader.displayProfileImage(view, urls[i]);
|
||||
} else {
|
||||
mImageLoader.cancelDisplayTask(view);
|
||||
view.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,17 +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.findStatusInDatabases;
|
||||
import static org.mariotaku.twidere.util.Utils.getAccountColor;
|
||||
import static org.mariotaku.twidere.util.Utils.getCardHighlightColor;
|
||||
import static org.mariotaku.twidere.util.Utils.getCardHighlightOptionInt;
|
||||
import static org.mariotaku.twidere.util.Utils.isFiltered;
|
||||
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.content.res.Resources;
|
||||
|
@ -59,438 +48,454 @@ import org.mariotaku.twidere.view.iface.ICardItemView.OnOverflowIconClickListene
|
|||
|
||||
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.findStatusInDatabases;
|
||||
import static org.mariotaku.twidere.util.Utils.getAccountColor;
|
||||
import static org.mariotaku.twidere.util.Utils.getCardHighlightColor;
|
||||
import static org.mariotaku.twidere.util.Utils.getCardHighlightOptionInt;
|
||||
import static org.mariotaku.twidere.util.Utils.isFiltered;
|
||||
import static org.mariotaku.twidere.util.Utils.openImage;
|
||||
import static org.mariotaku.twidere.util.Utils.openUserProfile;
|
||||
|
||||
public class CursorStatusesAdapter extends BaseCursorAdapter implements IStatusesAdapter<Cursor>, 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -62,6 +62,7 @@ public class MediaPreviewAdapter extends ArrayAdapter<String> 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);
|
||||
|
|
|
@ -184,17 +184,12 @@ public class ParcelableStatusesAdapter extends BaseArrayAdapter<ParcelableStatus
|
|||
holder.setDisplayProfileImage(isDisplayProfileImage());
|
||||
holder.setCardHighlightOption(mCardHighlightOption);
|
||||
|
||||
final ImageLoaderWrapper loader = getImageLoader();
|
||||
if (!showGap) {
|
||||
final TwidereLinkify linkify = getLinkify();
|
||||
final ImageLoaderWrapper loader = getImageLoader();
|
||||
final int highlightOption = getLinkHighlightOption();
|
||||
final boolean mShowAccountColor = isShowAccountColor();
|
||||
|
||||
// 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);
|
||||
|
||||
holder.setAccountColorEnabled(mShowAccountColor);
|
||||
|
||||
if (highlightOption != VALUE_LINK_HIGHLIGHT_OPTION_CODE_NONE) {
|
||||
|
@ -259,6 +254,8 @@ public class ParcelableStatusesAdapter extends BaseArrayAdapter<ParcelableStatus
|
|||
holder.profile_image.setTag(position);
|
||||
holder.my_profile_image.setTag(position);
|
||||
} else {
|
||||
loader.cancelDisplayTask(holder.profile_image);
|
||||
loader.cancelDisplayTask(holder.my_profile_image);
|
||||
holder.profile_image.setVisibility(View.GONE);
|
||||
holder.my_profile_image.setVisibility(View.GONE);
|
||||
}
|
||||
|
@ -280,7 +277,13 @@ public class ParcelableStatusesAdapter extends BaseArrayAdapter<ParcelableStatus
|
|||
final int count = status.medias.length;
|
||||
holder.image_preview_count.setText(res.getQuantityString(R.plurals.N_medias, count, count));
|
||||
holder.image_preview.setTag(position);
|
||||
} else {
|
||||
loader.cancelDisplayTask(holder.image_preview);
|
||||
}
|
||||
} else {
|
||||
loader.cancelDisplayTask(holder.profile_image);
|
||||
loader.cancelDisplayTask(holder.my_profile_image);
|
||||
loader.cancelDisplayTask(holder.image_preview);
|
||||
}
|
||||
if (position > mMaxAnimationPosition) {
|
||||
if (mAnimationEnabled) {
|
||||
|
|
|
@ -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<ParcelableUserList> 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<ParcelableUserList> data) {
|
||||
setData(data, false);
|
||||
}
|
||||
public void appendData(final List<ParcelableUserList> 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<ParcelableUserList> 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<ParcelableUserList> 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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<ParcelableUser> 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<ParcelableUser> data) {
|
||||
setData(data, false);
|
||||
}
|
||||
public void setData(final List<ParcelableUser> data) {
|
||||
setData(data, false);
|
||||
}
|
||||
|
||||
public void setData(final List<ParcelableUser> 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<ParcelableUser> 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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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<ParcelableUserList> 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<ParcelableUserList> data) {
|
||||
setData(data, false);
|
||||
}
|
||||
public void appendData(final List<ParcelableUserList> 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<ParcelableUserList> 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<ParcelableUserList> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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<ParcelableUser> 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<ParcelableUser> data) {
|
||||
setData(data, false);
|
||||
}
|
||||
|
||||
public void setData(final List<ParcelableUser> data) {
|
||||
setData(data, false);
|
||||
}
|
||||
|
||||
public void setData(final List<ParcelableUser> 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<ParcelableUser> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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<Cursor>, 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<Cursor> 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<Cursor> 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<Cursor> loader) {
|
||||
mAdapter.changeCursor(null);
|
||||
}
|
||||
@Override
|
||||
public void onLoaderReset(final Loader<Cursor> loader) {
|
||||
mAdapter.changeCursor(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadFinished(final Loader<Cursor> loader, final Cursor cursor) {
|
||||
mAdapter.changeCursor(cursor);
|
||||
setListShown(true);
|
||||
}
|
||||
@Override
|
||||
public void onLoadFinished(final Loader<Cursor> 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<String, CustomTabConfiguration> map = getConfiguraionMap();
|
||||
final List<Entry<String, CustomTabConfiguration>> tabs = new ArrayList<Entry<String, CustomTabConfiguration>>(
|
||||
map.entrySet());
|
||||
Collections.sort(tabs, CustomTabConfigurationComparator.SINGLETON);
|
||||
for (final Entry<String, CustomTabConfiguration> 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<String, CustomTabConfiguration> map = getConfiguraionMap();
|
||||
final List<Entry<String, CustomTabConfiguration>> tabs = new ArrayList<Entry<String, CustomTabConfiguration>>(
|
||||
map.entrySet());
|
||||
Collections.sort(tabs, CustomTabConfigurationComparator.SINGLETON);
|
||||
for (final Entry<String, CustomTabConfiguration> 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<Integer> 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<Integer> 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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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: {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
* <em>something</em> 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 {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<Object> 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<String> allMentions = new TreeSet<String>(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<ContentValues> valuesList = new ArrayList<ContentValues>();
|
||||
final Set<Long> userIds = new HashSet<Long>();
|
||||
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<Object> 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<String> allMentions = new TreeSet<String>(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<ContentValues> valuesList = new ArrayList<ContentValues>();
|
||||
final Set<Long> userIds = new HashSet<Long>();
|
||||
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));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<String, String> accountsAlias = new HashMap<String, String>();
|
||||
final HashMap<String, String> filtersAlias = new HashMap<String, String>();
|
||||
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<String, String> accountsAlias = new HashMap<String, String>();
|
||||
final HashMap<String, String> filtersAlias = new HashMap<String, String>();
|
||||
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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
|
@ -1,21 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright 2013 NEGU Soft
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
|
||||
<item android:drawable="@drawable/rect_focused_background_white_intercepted"/>
|
||||
|
||||
</layer-list>
|
|
@ -1,28 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright 2013 NEGU Soft
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<item android:drawable="@android:color/transparent" android:state_window_focused="false"/>
|
||||
|
||||
<!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. -->
|
||||
<item android:drawable="@color/ha__selector_disabled_light" android:state_enabled="false" android:state_focused="true" android:state_pressed="true"/>
|
||||
<item android:drawable="@color/ha__selector_disabled_light" android:state_enabled="false" android:state_focused="true"/>
|
||||
<item android:drawable="@drawable/list_selector_transition_white" android:state_focused="true" android:state_pressed="true"/>
|
||||
<item android:drawable="@drawable/list_selector_transition_white" android:state_focused="false" android:state_pressed="true"/>
|
||||
<item android:drawable="@drawable/focused_background_white" android:state_focused="true"/>
|
||||
|
||||
</selector>
|
|
@ -1,5 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
<?xml version="1.0" encoding="utf-8"?><!--
|
||||
Copyright 2013 NEGU Soft
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
|
@ -16,13 +15,13 @@
|
|||
-->
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<item android:drawable="@android:color/transparent" android:state_window_focused="false"/>
|
||||
<item android:state_window_focused="false" android:drawable="@android:color/transparent" />
|
||||
|
||||
<!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. -->
|
||||
<item android:drawable="@color/ha__selector_disabled" android:state_enabled="false" android:state_focused="true" android:state_pressed="true"/>
|
||||
<item android:drawable="@color/ha__selector_disabled" android:state_enabled="false" android:state_focused="true"/>
|
||||
<item android:drawable="@drawable/list_selector_transition_white" android:state_focused="true" android:state_pressed="true"/>
|
||||
<item android:drawable="@drawable/list_selector_transition_white" android:state_focused="false" android:state_pressed="true"/>
|
||||
<item android:drawable="@drawable/focused_background_white" android:state_focused="true"/>
|
||||
<!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. -->
|
||||
<item android:state_focused="true" android:state_enabled="false" android:state_pressed="true" android:drawable="@color/ha__selector_disabled" />
|
||||
<item android:state_focused="true" android:state_enabled="false" android:drawable="@color/ha__selector_disabled" />
|
||||
<item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/list_selector_white_transition" />
|
||||
<item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/list_selector_white_transition" />
|
||||
<item android:state_focused="true" android:drawable="@drawable/rect_white_focused_background" />
|
||||
|
||||
</selector>
|
||||
</selector>
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright 2013 NEGU Soft
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<item android:state_window_focused="false" android:drawable="@android:color/transparent" />
|
||||
|
||||
<!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. -->
|
||||
<item android:state_focused="true" android:state_enabled="false" android:state_pressed="true" android:drawable="@color/ha__selector_disabled_light" />
|
||||
<item android:state_focused="true" android:state_enabled="false" android:drawable="@color/ha__selector_disabled_light" />
|
||||
<item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/ha__list_selector_transition" />
|
||||
<item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/ha__list_selector_transition" />
|
||||
<item android:state_focused="true" android:drawable="@drawable/ha__rect_focused_background" />
|
||||
|
||||
</selector>
|
|
@ -14,9 +14,9 @@
|
|||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<transition xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<transition xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
|
||||
<item android:drawable="@drawable/solid_pressed_white_intercepted"/>
|
||||
<item android:drawable="@drawable/solid_focused_white_intercepted"/>
|
||||
<item android:drawable="@drawable/solid_white_pressed"/>
|
||||
<item android:drawable="@drawable/solid_white_focused"/>
|
||||
|
||||
</transition>
|
||||
</transition>
|
|
@ -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" />
|
||||
|
||||
|
|
|
@ -75,7 +75,7 @@
|
|||
android:padding="2dp"
|
||||
android:visibility="gone" />
|
||||
|
||||
<org.mariotaku.menucomponent.widget.MenuBar
|
||||
<org.mariotaku.twidere.view.TwidereMenuBar
|
||||
android:id="@+id/action_menu"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
android:layout_height="match_parent"
|
||||
android:layout_weight="0">
|
||||
|
||||
<org.mariotaku.menucomponent.widget.MenuBar
|
||||
<org.mariotaku.twidere.view.TwidereMenuBar
|
||||
android:id="@+id/bottom_menu"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<org.mariotaku.menucomponent.widget.MenuBar xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<org.mariotaku.twidere.view.TwidereMenuBar xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/menu_bar"
|
||||
style="?android:actionBarSplitStyle"
|
||||
android:layout_width="match_parent"
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<org.mariotaku.menucomponent.widget.MenuBar xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<org.mariotaku.twidere.view.TwidereMenuBar xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/menu_bar"
|
||||
style="?android:actionBarSplitStyle"
|
||||
android:layout_width="match_parent"
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<org.mariotaku.twidere.view.SquareRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:padding="@dimen/element_spacing_extra_small">
|
||||
android:padding="@dimen/element_spacing_xsmall">
|
||||
|
||||
<org.mariotaku.twidere.view.ForegroundColorView
|
||||
android:id="@+id/color"
|
||||
|
@ -12,6 +12,6 @@
|
|||
android:layout_alignParentTop="true"
|
||||
android:background="?android:activatedBackgroundIndicator"
|
||||
android:foreground="?android:selectableItemBackground"
|
||||
android:padding="@dimen/element_spacing_extra_small"/>
|
||||
android:padding="@dimen/element_spacing_xsmall"/>
|
||||
|
||||
</org.mariotaku.twidere.view.SquareRelativeLayout>
|
|
@ -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"/>
|
||||
<!--
|
||||
<org.mariotaku.twidere.view.ActivatedCheckBox
|
||||
android:layout_width="wrap_content"
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/element_spacing_extra_small"
|
||||
android:layout_height="@dimen/element_spacing_xsmall"
|
||||
android:layout_above="@+id/profile_name_container"
|
||||
android:background="@drawable/shadow_top"/>
|
||||
<!--
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/list_header_title"
|
||||
style="?android:attr/listSeparatorTextViewStyle"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingBottom="2dip"
|
||||
android:paddingLeft="5dip"
|
||||
android:paddingTop="2dip"/>
|
||||
android:id="@+id/list_header_title"
|
||||
style="?android:attr/listSeparatorTextViewStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingBottom="@dimen/element_spacing_xsmall"
|
||||
android:paddingLeft="@dimen/element_spacing_small"
|
||||
android:paddingTop="@dimen/element_spacing_xsmall" />
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
android:layout_alignTop="@+id/status_content"/>
|
||||
</RelativeLayout>
|
||||
|
||||
<org.mariotaku.menucomponent.widget.MenuBar
|
||||
<org.mariotaku.twidere.view.TwidereMenuBar
|
||||
android:id="@+id/actionbar_split"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="?android:actionBarSize"
|
||||
|
|
Before Width: | Height: | Size: 172 B After Width: | Height: | Size: 172 B |
|
@ -0,0 +1,3 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
</resources>
|
|
@ -2,7 +2,7 @@
|
|||
<resources>
|
||||
|
||||
<dimen name="element_size_default">48dp</dimen>
|
||||
<dimen name="element_spacing_extra_small">2dp</dimen>
|
||||
<dimen name="element_spacing_xsmall">2dp</dimen>
|
||||
<dimen name="element_spacing_small">4dp</dimen>
|
||||
<dimen name="element_spacing_normal">8dp</dimen>
|
||||
<dimen name="element_spacing_large">16dp</dimen>
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<item name="solid_pressed_white_intercepted" type="drawable"/>
|
||||
<item name="solid_focused_white_intercepted" type="drawable"/>
|
||||
<item name="rect_focused_background_white_intercepted" type="drawable"/>
|
||||
<item name="solid_white_pressed" type="drawable"/>
|
||||
<item name="solid_white_focused" type="drawable"/>
|
||||
<item name="rect_white_focused_background" type="drawable"/>
|
||||
|
||||
</resources>
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue