redesigned profile editor screen

continue migrating statuses list to new implementation
This commit is contained in:
Mariotaku Lee 2014-12-05 21:25:27 +08:00
parent c77c655f59
commit 55c33033b1
63 changed files with 1102 additions and 1311 deletions

View File

@ -57,7 +57,7 @@ import org.mariotaku.twidere.model.SupportTabSpec;
import org.mariotaku.twidere.preference.WizardPageHeaderPreference;
import org.mariotaku.twidere.preference.WizardPageNavPreference;
import org.mariotaku.twidere.provider.TweetStore.Tabs;
import org.mariotaku.twidere.task.AsyncTask;
import org.mariotaku.twidere.task.TwidereAsyncTask;
import org.mariotaku.twidere.util.CustomTabUtils;
import org.mariotaku.twidere.util.MathUtils;
import org.mariotaku.twidere.util.ParseUtils;
@ -87,15 +87,15 @@ public class SettingsWizardActivity extends Activity implements Constants {
private AbsInitialSettingsTask mTask;
public void applyInitialSettings() {
if (mTask != null && mTask.getStatus() == AsyncTask.Status.RUNNING) return;
if (mTask != null && mTask.getStatus() == TwidereAsyncTask.Status.RUNNING) return;
mTask = new InitialSettingsTask(this);
mTask.execute();
mTask.executeTask();
}
public void applyInitialTabSettings() {
if (mTask != null && mTask.getStatus() == AsyncTask.Status.RUNNING) return;
if (mTask != null && mTask.getStatus() == TwidereAsyncTask.Status.RUNNING) return;
mTask = new InitialTabSettingsTask(this);
mTask.execute();
mTask.executeTask();
}
public void exitWizard() {
@ -478,7 +478,7 @@ public class SettingsWizardActivity extends Activity implements Constants {
}
}
static abstract class AbsInitialSettingsTask extends AsyncTask<Void, Void, Boolean> {
static abstract class AbsInitialSettingsTask extends TwidereAsyncTask<Void, Void, Boolean> {
private static final String FRAGMENT_TAG = "initial_settings_dialog";

View File

@ -40,7 +40,7 @@ import android.widget.Toast;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.provider.TweetStore.Accounts;
import org.mariotaku.twidere.task.AsyncTask;
import org.mariotaku.twidere.task.TwidereAsyncTask;
import org.mariotaku.twidere.util.OAuthPasswordAuthenticator;
import org.mariotaku.twidere.util.ParseUtils;
import org.mariotaku.twidere.util.Utils;
@ -119,10 +119,10 @@ public class BrowserSignInActivity extends BaseSupportDialogActivity implements
}
private void getRequestToken() {
if (mRequestToken != null || mTask != null && mTask.getStatus() == AsyncTask.Status.RUNNING)
if (mRequestToken != null || mTask != null && mTask.getStatus() == TwidereAsyncTask.Status.RUNNING)
return;
mTask = new GetRequestTokenTask(this);
mTask.execute();
mTask.executeTask();
}
private void loadUrl(final String url) {
@ -207,7 +207,7 @@ public class BrowserSignInActivity extends BaseSupportDialogActivity implements
}
static class GetRequestTokenTask extends AsyncTask<Void, Void, RequestToken> {
static class GetRequestTokenTask extends TwidereAsyncTask<Void, Void, RequestToken> {
private final String mConsumerKey, mConsumerSecret;
private final TwidereApplication mApplication;

View File

@ -93,7 +93,7 @@ import org.mariotaku.twidere.model.ParcelableStatusUpdate;
import org.mariotaku.twidere.model.ParcelableUser;
import org.mariotaku.twidere.preference.ServicePickerPreference;
import org.mariotaku.twidere.provider.TweetStore.Drafts;
import org.mariotaku.twidere.task.AsyncTask;
import org.mariotaku.twidere.task.TwidereAsyncTask;
import org.mariotaku.twidere.util.ArrayUtils;
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
import org.mariotaku.twidere.util.ContentValuesCreator;
@ -170,7 +170,7 @@ public class ComposeActivity extends BaseSupportDialogActivity implements TextWa
private ParcelableLocation mRecentLocation;
private ContentResolver mResolver;
private AsyncTask<Void, Void, ?> mTask;
private TwidereAsyncTask<Void, Void, ?> mTask;
private IListPopupWindow mAccountSelectorPopup;
private TextView mTitleView, mSubtitleView;
private GridView mMediaPreviewGrid;
@ -250,7 +250,7 @@ public class ComposeActivity extends BaseSupportDialogActivity implements TextWa
break;
}
case MENU_DELETE: {
new DeleteImageTask(this).execute();
new DeleteImageTask(this).executeTask();
break;
}
case MENU_TOGGLE_SENSITIVE: {
@ -323,7 +323,7 @@ public class ComposeActivity extends BaseSupportDialogActivity implements TextWa
case REQUEST_TAKE_PHOTO: {
if (resultCode == Activity.RESULT_OK) {
mTask = new AddMediaTask(this, mTempPhotoUri, createTempImageUri(), ParcelableMedia.TYPE_IMAGE,
true).execute();
true).executeTask();
mTempPhotoUri = null;
}
break;
@ -332,7 +332,7 @@ public class ComposeActivity extends BaseSupportDialogActivity implements TextWa
if (resultCode == Activity.RESULT_OK) {
final Uri src = intent.getData();
mTask = new AddMediaTask(this, src, createTempImageUri(), ParcelableMedia.TYPE_IMAGE, false)
.execute();
.executeTask();
}
break;
}
@ -340,7 +340,7 @@ public class ComposeActivity extends BaseSupportDialogActivity implements TextWa
if (resultCode == Activity.RESULT_OK) {
final Uri src = intent.getData();
mTask = new AddMediaTask(this, src, createTempImageUri(), ParcelableMedia.TYPE_IMAGE, false)
.execute();
.executeTask();
}
break;
}
@ -379,7 +379,7 @@ public class ComposeActivity extends BaseSupportDialogActivity implements TextWa
@Override
public void onBackPressed() {
if (mTask != null && mTask.getStatus() == AsyncTask.Status.RUNNING) return;
if (mTask != null && mTask.getStatus() == TwidereAsyncTask.Status.RUNNING) return;
final String text = mEditText != null ? ParseUtils.parseString(mEditText.getText()) : null;
final boolean textChanged = text != null && !text.isEmpty() && !text.equals(mOriginalText);
final boolean isEditingDraft = INTENT_ACTION_EDIT_DRAFT.equals(getIntent().getAction());
@ -388,7 +388,7 @@ public class ComposeActivity extends BaseSupportDialogActivity implements TextWa
Toast.makeText(this, R.string.status_saved_to_draft, Toast.LENGTH_SHORT).show();
finish();
} else {
mTask = new DiscardTweetTask(this).execute();
mTask = new DiscardTweetTask(this).executeTask();
}
}
@ -750,14 +750,14 @@ public class ComposeActivity extends BaseSupportDialogActivity implements TextWa
final Uri extraStream = intent.getParcelableExtra(Intent.EXTRA_STREAM);
//TODO handle share_screenshot extra (Bitmap)
if (extraStream != null) {
new AddMediaTask(this, extraStream, createTempImageUri(), ParcelableMedia.TYPE_IMAGE, false).execute();
new AddMediaTask(this, extraStream, createTempImageUri(), ParcelableMedia.TYPE_IMAGE, false).executeTask();
} else if (data != null) {
new AddMediaTask(this, data, createTempImageUri(), ParcelableMedia.TYPE_IMAGE, false).execute();
new AddMediaTask(this, data, createTempImageUri(), ParcelableMedia.TYPE_IMAGE, false).executeTask();
} else if (intent.hasExtra(EXTRA_SHARE_SCREENSHOT)) {
final Bitmap bitmap = intent.getParcelableExtra(EXTRA_SHARE_SCREENSHOT);
if (bitmap != null) {
try {
new AddBitmapTask(this, bitmap, createTempImageUri(), ParcelableMedia.TYPE_IMAGE).execute();
new AddBitmapTask(this, bitmap, createTempImageUri(), ParcelableMedia.TYPE_IMAGE).executeTask();
} catch (IOException e) {
// ignore
bitmap.recycle();
@ -1164,7 +1164,7 @@ public class ComposeActivity extends BaseSupportDialogActivity implements TextWa
}
case DialogInterface.BUTTON_NEGATIVE: {
if (activity instanceof ComposeActivity) {
new DiscardTweetTask((ComposeActivity) activity).execute();
new DiscardTweetTask((ComposeActivity) activity).executeTask();
} else {
activity.finish();
}
@ -1331,7 +1331,7 @@ public class ComposeActivity extends BaseSupportDialogActivity implements TextWa
}
private static class AddMediaTask extends AsyncTask<Void, Void, Boolean> {
private static class AddMediaTask extends TwidereAsyncTask<Void, Void, Boolean> {
private final ComposeActivity activity;
private final int media_type;
@ -1389,7 +1389,7 @@ public class ComposeActivity extends BaseSupportDialogActivity implements TextWa
}
}
private static class DeleteImageTask extends AsyncTask<Void, Void, Boolean> {
private static class DeleteImageTask extends TwidereAsyncTask<Void, Void, Boolean> {
final ComposeActivity mActivity;
private final ParcelableMediaUpdate[] mMedia;
@ -1435,7 +1435,7 @@ public class ComposeActivity extends BaseSupportDialogActivity implements TextWa
}
}
private static class DiscardTweetTask extends AsyncTask<Void, Void, Void> {
private static class DiscardTweetTask extends TwidereAsyncTask<Void, Void, Void> {
final ComposeActivity mActivity;

View File

@ -60,7 +60,7 @@ import org.mariotaku.twidere.model.DraftItem;
import org.mariotaku.twidere.model.ParcelableMediaUpdate;
import org.mariotaku.twidere.model.ParcelableStatusUpdate;
import org.mariotaku.twidere.provider.TweetStore.Drafts;
import org.mariotaku.twidere.task.AsyncTask;
import org.mariotaku.twidere.task.TwidereAsyncTask;
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
import org.mariotaku.twidere.util.ThemeUtils;
@ -275,7 +275,7 @@ public class DraftsActivity extends BaseSupportActivity implements LoaderCallbac
final Bundle args = getArguments();
if (args == null) return;
final DeleteDraftsTask task = new DeleteDraftsTask(getActivity(), args.getLongArray(EXTRA_IDS));
task.execute();
task.executeTask();
break;
}
}
@ -293,7 +293,7 @@ public class DraftsActivity extends BaseSupportActivity implements LoaderCallbac
}
private static class DeleteDraftsTask extends AsyncTask<Void, Void, Integer> {
private static class DeleteDraftsTask extends TwidereAsyncTask<Void, Void, Integer> {
private static final String FRAGMENT_TAG_DELETING_DRAFTS = "deleting_drafts";
private final FragmentActivity mActivity;

View File

@ -37,6 +37,7 @@ import android.graphics.Rect;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.NonNull;
@ -80,7 +81,7 @@ import org.mariotaku.twidere.graphic.EmptyDrawable;
import org.mariotaku.twidere.model.ParcelableAccount;
import org.mariotaku.twidere.model.SupportTabSpec;
import org.mariotaku.twidere.provider.TweetStore.Accounts;
import org.mariotaku.twidere.task.AsyncTask;
import org.mariotaku.twidere.task.TwidereAsyncTask;
import org.mariotaku.twidere.util.ActivityAccessor;
import org.mariotaku.twidere.util.ActivityAccessor.TaskDescriptionCompat;
import org.mariotaku.twidere.util.ArrayUtils;
@ -452,9 +453,9 @@ public class HomeActivity extends BaseSupportActivity implements OnClickListener
public void updateUnreadCount() {
if (mTabIndicator == null || mUpdateUnreadCountTask != null
&& mUpdateUnreadCountTask.getStatus() == AsyncTask.Status.RUNNING) return;
&& mUpdateUnreadCountTask.getStatus() == TwidereAsyncTask.Status.RUNNING) return;
mUpdateUnreadCountTask = new UpdateUnreadCountTask(mTabIndicator);
mUpdateUnreadCountTask.execute();
mUpdateUnreadCountTask.executeTask();
mTabIndicator.setDisplayBadge(mPreferences.getBoolean(KEY_UNREAD_COUNT, true));
}
@ -488,8 +489,12 @@ public class HomeActivity extends BaseSupportActivity implements OnClickListener
protected void onCreate(final Bundle savedInstanceState) {
setUiOptions(getWindow());
final Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
window.requestFeature(Window.FEATURE_NO_TITLE);
window.requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
window.requestFeature(Window.FEATURE_ACTION_MODE_OVERLAY);
super.onCreate(savedInstanceState);
if (!isDatabaseReady(this)) {
Toast.makeText(this, R.string.preparing_database_toast, Toast.LENGTH_SHORT).show();
@ -957,7 +962,7 @@ public class HomeActivity extends BaseSupportActivity implements OnClickListener
}
private static class UpdateUnreadCountTask extends AsyncTask<Void, Void, int[]> {
private static class UpdateUnreadCountTask extends TwidereAsyncTask<Void, Void, int[]> {
private final Context mContext;
private final TabPagerIndicator mIndicator;

View File

@ -203,6 +203,8 @@ public class LinkHandlerActivity extends BaseSupportActivity implements OnClickL
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
window.addFlags(LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
window.requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
window.requestFeature(Window.FEATURE_ACTION_MODE_OVERLAY);
final int transitionRes;
switch (linkId) {
case LINK_ID_USER: {

View File

@ -121,7 +121,7 @@ public class RequestPermissionsActivity extends BaseSupportDialogActivity implem
mPermissions = permissions;
mCallingPackage = pname;
final StringBuilder builder = new StringBuilder();
builder.append(HtmlEscapeHelper.escape(getString(R.string.permissions_request_message)) + "<br/>");
builder.append(HtmlEscapeHelper.escape(getString(R.string.permissions_request_message))).append("<br/>");
if (PermissionsManager.isPermissionValid(permissions)) {
if (PermissionsManager.hasPermissions(permissions, PERMISSION_PREFERENCES)) {
appendPermission(builder, getString(R.string.permission_description_preferences), true);
@ -148,8 +148,7 @@ public class RequestPermissionsActivity extends BaseSupportDialogActivity implem
} catch (final NameNotFoundException e) {
setResult(RESULT_CANCELED);
finish();
return;
}
}
}
}

View File

@ -50,7 +50,7 @@ import org.mariotaku.twidere.activity.SettingsActivity;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.fragment.support.BaseSupportDialogFragment;
import org.mariotaku.twidere.provider.TweetStore.Accounts;
import org.mariotaku.twidere.task.AsyncTask;
import org.mariotaku.twidere.task.TwidereAsyncTask;
import org.mariotaku.twidere.util.OAuthPasswordAuthenticator;
import org.mariotaku.twidere.util.OAuthPasswordAuthenticator.AuthenticationException;
import org.mariotaku.twidere.util.OAuthPasswordAuthenticator.AuthenticityTokenException;
@ -150,12 +150,12 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta
@Override
public void onBackPressed() {
if (mTask != null && mTask.getStatus() == AsyncTask.Status.RUNNING && !mBackPressed) {
if (mTask != null && mTask.getStatus() == TwidereAsyncTask.Status.RUNNING && !mBackPressed) {
final Toast toast = Toast.makeText(this, R.string.signing_in_please_wait, Toast.LENGTH_SHORT);
toast.show();
return;
}
if (mTask != null && mTask.getStatus() == AsyncTask.Status.RUNNING) {
if (mTask != null && mTask.getStatus() == TwidereAsyncTask.Status.RUNNING) {
mTask.cancel(false);
}
super.onBackPressed();
@ -215,13 +215,13 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta
break;
}
case MENU_SETTINGS: {
if (mTask != null && mTask.getStatus() == AsyncTask.Status.RUNNING) return false;
if (mTask != null && mTask.getStatus() == TwidereAsyncTask.Status.RUNNING) return false;
final Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);
break;
}
case MENU_EDIT_API: {
if (mTask != null && mTask.getStatus() == AsyncTask.Status.RUNNING) return false;
if (mTask != null && mTask.getStatus() == TwidereAsyncTask.Status.RUNNING) return false;
setDefaultAPI();
final Intent intent = new Intent(this, APIEditorActivity.class);
intent.putExtra(Accounts.API_URL_FORMAT, mAPIUrlFormat);
@ -235,7 +235,7 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta
}
case MENU_OPEN_IN_BROWSER: {
if (mAuthType != Accounts.AUTH_TYPE_OAUTH || mTask != null
&& mTask.getStatus() == AsyncTask.Status.RUNNING) return false;
&& mTask.getStatus() == TwidereAsyncTask.Status.RUNNING) return false;
saveEditedText();
final Intent intent = new Intent(this, BrowserSignInActivity.class);
intent.putExtra(Accounts.CONSUMER_KEY, mConsumerKey);
@ -315,7 +315,7 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta
}
private void doLogin() {
if (mTask != null && mTask.getStatus() == AsyncTask.Status.RUNNING) {
if (mTask != null && mTask.getStatus() == TwidereAsyncTask.Status.RUNNING) {
mTask.cancel(true);
}
saveEditedText();
@ -323,12 +323,12 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta
final Configuration conf = getConfiguration();
mTask = new SignInTask(this, conf, mUsername, mPassword, mAuthType, mAPIUrlFormat,
mSameOAuthSigningUrl, mNoVersionSuffix);
mTask.execute();
mTask.executeTask();
}
private void doLogin(final Intent intent) {
if (intent == null) return;
if (mTask != null && mTask.getStatus() == AsyncTask.Status.RUNNING) {
if (mTask != null && mTask.getStatus() == TwidereAsyncTask.Status.RUNNING) {
mTask.cancel(true);
}
saveEditedText();
@ -339,7 +339,7 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta
final String verifier = intent.getStringExtra(EXTRA_OAUTH_VERIFIER);
mTask = new BrowserSignInTask(this, conf, token, secret, verifier, mAPIUrlFormat,
mSameOAuthSigningUrl, mNoVersionSuffix);
mTask.execute();
mTask.executeTask();
}
private Configuration getConfiguration() {
@ -495,7 +495,7 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta
mSignUpButton.setEnabled(false);
}
public static abstract class AbstractSignInTask extends AsyncTask<Void, Void, SignInResponse> {
public static abstract class AbstractSignInTask extends TwidereAsyncTask<Void, Void, SignInResponse> {
protected final Configuration conf;
protected final SignInActivity callback;

View File

@ -47,7 +47,7 @@ import org.mariotaku.twidere.fragment.support.SupportProgressDialogFragment;
import org.mariotaku.twidere.model.ParcelableUser;
import org.mariotaku.twidere.model.ParcelableUserList;
import org.mariotaku.twidere.model.SingleResponse;
import org.mariotaku.twidere.task.AsyncTask;
import org.mariotaku.twidere.task.TwidereAsyncTask;
import twitter4j.ResponseList;
import twitter4j.Twitter;
@ -207,7 +207,7 @@ public class UserListSelectorActivity extends BaseSupportDialogActivity implemen
if (screen_name == null) return;
mScreenName = screen_name;
final GetUserListsTask task = new GetUserListsTask(this, getAccountId(), screen_name);
task.execute();
task.executeTask();
}
private boolean isSelectingUser() {
@ -216,7 +216,7 @@ public class UserListSelectorActivity extends BaseSupportDialogActivity implemen
private void searchUser(final String name) {
final SearchUsersTask task = new SearchUsersTask(this, getAccountId(), name);
task.execute();
task.executeTask();
}
private void setUserListsData(final List<ParcelableUserList> data, final boolean is_my_account) {
@ -226,7 +226,7 @@ public class UserListSelectorActivity extends BaseSupportDialogActivity implemen
mCreateUserListContainer.setVisibility(is_my_account ? View.VISIBLE : View.GONE);
}
private static class GetUserListsTask extends AsyncTask<Void, Void, SingleResponse<List<ParcelableUserList>>> {
private static class GetUserListsTask extends TwidereAsyncTask<Void, Void, SingleResponse<List<ParcelableUserList>>> {
private static final String FRAGMENT_TAG_GET_USER_LISTS = "get_user_lists";
private final UserListSelectorActivity mActivity;
@ -288,7 +288,7 @@ public class UserListSelectorActivity extends BaseSupportDialogActivity implemen
}
private static class SearchUsersTask extends AsyncTask<Void, Void, SingleResponse<List<ParcelableUser>>> {
private static class SearchUsersTask extends TwidereAsyncTask<Void, Void, SingleResponse<List<ParcelableUser>>> {
private static final String FRAGMENT_TAG_SEARCH_USERS = "search_users";
private final UserListSelectorActivity mActivity;

View File

@ -32,10 +32,6 @@ import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.Loader;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuItem.OnMenuItemClickListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
@ -43,23 +39,23 @@ import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
import org.mariotaku.menucomponent.widget.PopupMenu;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.loader.support.ParcelableUserLoader;
import org.mariotaku.twidere.model.ParcelableUser;
import org.mariotaku.twidere.model.SingleResponse;
import org.mariotaku.twidere.provider.TweetStore.Accounts;
import org.mariotaku.twidere.task.AsyncTask;
import org.mariotaku.twidere.task.AsyncTask.Status;
import org.mariotaku.twidere.task.TwidereAsyncTask;
import org.mariotaku.twidere.task.TwidereAsyncTask.Status;
import org.mariotaku.twidere.util.AsyncTaskManager;
import org.mariotaku.twidere.util.AsyncTwitterWrapper.UpdateProfileBannerImageTask;
import org.mariotaku.twidere.util.AsyncTwitterWrapper.UpdateProfileImageTask;
import org.mariotaku.twidere.util.AsyncTwitterWrapper.UpdateProfileTask;
import org.mariotaku.twidere.util.ImageLoaderWrapper;
import org.mariotaku.twidere.util.ParseUtils;
import org.mariotaku.twidere.util.ThemeUtils;
import org.mariotaku.twidere.util.TwitterWrapper;
import org.mariotaku.twidere.view.ProfileImageBannerLayout;
import org.mariotaku.twidere.util.accessor.ViewAccessor;
import org.mariotaku.twidere.view.iface.IExtendedView.OnSizeChangedListener;
import java.io.File;
@ -80,19 +76,21 @@ public class UserProfileEditorActivity extends BaseSupportActivity implements On
private ImageLoaderWrapper mLazyImageLoader;
private AsyncTaskManager mAsyncTaskManager;
private AsyncTask<Void, Void, ?> mTask;
private TwidereAsyncTask<Void, Void, ?> mTask;
private ProfileImageBannerLayout mProfileImageBannerLayout;
private ImageView mProfileImageView;
private ImageView mProfileBannerView;
private EditText mEditName, mEditDescription, mEditLocation, mEditUrl;
private View mProgress, mContent;
private View mProgressContainer, mContent;
private View mProfileImageCamera;
private View mProfileImageGallery;
private View mProfileBannerGallery;
private View mProfileBannerRemove;
private View mActionBarOverlay;
private View mCancelButton;
private View mDoneButton;
private PopupMenu mPopupMenu;
private boolean mBackPressed;
private long mAccountId;
private int mBannerWidth;
private ParcelableUser mUser;
private boolean mUserInfoLoaderInitialized;
@ -105,82 +103,14 @@ public class UserProfileEditorActivity extends BaseSupportActivity implements On
public void onReceive(final Context context, final Intent intent) {
final String action = intent.getAction();
if (BROADCAST_PROFILE_UPDATED.equals(action)) {
if (mUser == null || intent.getLongExtra(EXTRA_USER_ID, -1) == mUser.id) {
final ParcelableUser user = mUser;
if (user == null || intent.getLongExtra(EXTRA_USER_ID, -1) == user.id) {
getUserInfo();
}
}
}
};
private final OnMenuItemClickListener mProfileBannerImageMenuListener = new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(final MenuItem item) {
if (mUser == null) return false;
switch (item.getItemId()) {
case MENU_TAKE_PHOTO: {
final Uri uri = createTempFileUri();
final Intent intent = createTakePhotoIntent(uri, null, null, 2, 1, true);
startActivityForResult(intent, REQUEST_UPLOAD_PROFILE_BANNER_IMAGE);
mTask = new UpdateProfileBannerImageTaskInternal(UserProfileEditorActivity.this, mAsyncTaskManager,
mAccountId, uri, true);
break;
}
case MENU_PICK_FROM_GALLERY: {
final Uri uri = createTempFileUri();
final Intent intent = createPickImageIntent(uri, null, null, 2, 1, true);
try {
startActivityForResult(intent, REQUEST_UPLOAD_PROFILE_BANNER_IMAGE);
mTask = new UpdateProfileBannerImageTaskInternal(UserProfileEditorActivity.this,
mAsyncTaskManager, mAccountId, uri, true);
} catch (final Exception e) {
Log.w(LOGTAG, e);
}
break;
}
case MENU_DELETE: {
mTask = new RemoveProfileBannerTaskInternal(mUser.account_id);
mTask.execute();
break;
}
}
return true;
}
};
private final OnMenuItemClickListener mProfileImageMenuListener = new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(final MenuItem item) {
if (mUser == null) return false;
switch (item.getItemId()) {
case MENU_TAKE_PHOTO: {
final Uri uri = createTempFileUri();
final Intent intent = createTakePhotoIntent(uri, null, null, 1, 1, true);
startActivityForResult(intent, REQUEST_UPLOAD_PROFILE_IMAGE);
mTask = new UpdateProfileImageTaskInternal(UserProfileEditorActivity.this, mAsyncTaskManager,
mAccountId, uri, true);
break;
}
case MENU_PICK_FROM_GALLERY: {
final Uri uri = createTempFileUri();
final Intent intent = createPickImageIntent(uri, null, null, 1, 1, true);
try {
startActivityForResult(intent, REQUEST_UPLOAD_PROFILE_IMAGE);
mTask = new UpdateProfileImageTaskInternal(UserProfileEditorActivity.this, mAsyncTaskManager,
mAccountId, uri, true);
} catch (final Exception e) {
Log.w(LOGTAG, e);
}
break;
}
}
return true;
}
};
@Override
public void afterTextChanged(final Editable s) {
}
@ -189,77 +119,89 @@ public class UserProfileEditorActivity extends BaseSupportActivity implements On
public void beforeTextChanged(final CharSequence s, final int length, final int start, final int end) {
}
@Override
public void onBackPressed() {
if (mHasUnsavedChanges() && !mBackPressed) {
final Toast toast = Toast.makeText(this, R.string.unsaved_change_back_pressed, Toast.LENGTH_SHORT);
toast.show();
return;
}
super.onBackPressed();
}
@Override
public void onClick(final View view) {
if (mUser == null) return;
if (mPopupMenu != null) {
mPopupMenu.dismiss();
}
final ParcelableUser user = mUser;
if (user == null || (mTask != null && mTask.getStatus() == Status.RUNNING)) return;
switch (view.getId()) {
case ProfileImageBannerLayout.VIEW_ID_PROFILE_IMAGE: {
mPopupMenu = PopupMenu.getInstance(this, view);
mPopupMenu.inflate(R.menu.action_profile_image);
mPopupMenu.setOnMenuItemClickListener(mProfileImageMenuListener);
case R.id.profile_image: {
break;
}
case ProfileImageBannerLayout.VIEW_ID_PROFILE_BANNER: {
mPopupMenu = PopupMenu.getInstance(this, view);
mPopupMenu.inflate(R.menu.action_profile_banner_image);
final Menu menu = mPopupMenu.getMenu();
final MenuItem delete_submenu = menu.findItem(MENU_DELETE_SUBMENU);
final boolean has_profile_banner = !isEmpty(mUser.profile_banner_url);
delete_submenu.setVisible(has_profile_banner);
delete_submenu.setEnabled(has_profile_banner);
mPopupMenu.setOnMenuItemClickListener(mProfileBannerImageMenuListener);
case R.id.profile_banner: {
break;
}
default: {
return;
case R.id.profile_image_camera: {
final Uri uri = createTempFileUri();
final Intent intent = createTakePhotoIntent(uri, null, null, 1, 1, true);
mTask = new UpdateProfileImageTaskInternal(this, mAsyncTaskManager, mAccountId, uri, true);
startActivityForResult(intent, REQUEST_UPLOAD_PROFILE_IMAGE);
break;
}
case R.id.profile_image_gallery: {
final Uri uri = createTempFileUri();
final Intent intent = createPickImageIntent(uri, null, null, 1, 1, true);
mTask = new UpdateProfileImageTaskInternal(this, mAsyncTaskManager, mAccountId, uri, true);
startActivityForResult(intent, REQUEST_UPLOAD_PROFILE_IMAGE);
break;
}
case R.id.profile_banner_gallery: {
final Uri uri = createTempFileUri();
final Intent intent = createPickImageIntent(uri, null, null, 2, 1, true);
mTask = new UpdateProfileBannerImageTaskInternal(this, mAsyncTaskManager, mAccountId, uri, true);
startActivityForResult(intent, REQUEST_UPLOAD_PROFILE_BANNER_IMAGE);
break;
}
case R.id.profile_banner_remove: {
mTask = new RemoveProfileBannerTaskInternal(user.account_id);
mTask.executeTask();
break;
}
case R.id.actionbar_cancel: {
finish();
break;
}
case R.id.actionbar_done: {
final String name = ParseUtils.parseString(mEditName.getText());
final String url = ParseUtils.parseString(mEditUrl.getText());
final String location = ParseUtils.parseString(mEditLocation.getText());
final String description = ParseUtils.parseString(mEditDescription.getText());
mTask = new UpdateProfileTaskInternal(this, mAsyncTaskManager, mAccountId, name, url, location,
description);
mTask.executeTask();
break;
}
}
mPopupMenu.show();
}
@Override
public void onContentChanged() {
super.onContentChanged();
mProgress = findViewById(R.id.progress);
mProgressContainer = findViewById(R.id.progress_container);
mContent = findViewById(R.id.content);
mProfileImageBannerLayout = (ProfileImageBannerLayout) findViewById(R.id.profile_image_banner);
mProfileBannerView = mProfileImageBannerLayout.getProfileBannerImageView();
mProfileImageView = mProfileImageBannerLayout.getProfileImageView();
mProfileBannerView = (ImageView) findViewById(R.id.profile_banner);
mProfileImageView = (ImageView) findViewById(R.id.profile_image);
mEditName = (EditText) findViewById(R.id.name);
mEditDescription = (EditText) findViewById(R.id.description);
mEditLocation = (EditText) findViewById(R.id.location);
mEditUrl = (EditText) findViewById(R.id.url);
mActionBarOverlay = findViewById(R.id.actionbar_overlay);
mProfileImageCamera = findViewById(R.id.profile_image_camera);
mProfileImageGallery = findViewById(R.id.profile_image_gallery);
mProfileBannerGallery = findViewById(R.id.profile_banner_gallery);
mProfileBannerRemove = findViewById(R.id.profile_banner_remove);
mCancelButton = findViewById(R.id.actionbar_cancel);
mDoneButton = findViewById(R.id.actionbar_done);
}
@Override
public Loader<SingleResponse<ParcelableUser>> onCreateLoader(final int id, final Bundle args) {
mProgress.setVisibility(View.VISIBLE);
mProgressContainer.setVisibility(View.VISIBLE);
mContent.setVisibility(View.GONE);
setProgressBarIndeterminateVisibility(true);
return new ParcelableUserLoader(UserProfileEditorActivity.this, mAccountId, mAccountId, null, getIntent()
.getExtras(), false, false);
}
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
getMenuInflater().inflate(R.menu.menu_edit_user_profile, menu);
return true;
}
@Override
public void onLoaderReset(final Loader<SingleResponse<ParcelableUser>> loader) {
@ -276,36 +218,6 @@ public class UserProfileEditorActivity extends BaseSupportActivity implements On
setProgressBarIndeterminateVisibility(false);
}
@Override
public boolean onOptionsItemSelected(final MenuItem item) {
switch (item.getItemId()) {
case MENU_HOME: {
onBackPressed();
break;
}
case MENU_SAVE: {
final String name = ParseUtils.parseString(mEditName.getText());
final String url = ParseUtils.parseString(mEditUrl.getText());
final String location = ParseUtils.parseString(mEditLocation.getText());
final String description = ParseUtils.parseString(mEditDescription.getText());
mTask = new UpdateProfileTaskInternal(this, mAsyncTaskManager, mAccountId, name, url, location,
description);
mTask.execute();
return true;
}
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onPrepareOptionsMenu(final Menu menu) {
final MenuItem save = menu.findItem(MENU_SAVE);
if (save != null) {
save.setEnabled(mHasUnsavedChanges() && (mTask == null || mTask.getStatus() != AsyncTask.Status.RUNNING));
}
return super.onPrepareOptionsMenu(menu);
}
@Override
public void onSizeChanged(final View view, final int w, final int h, final int oldw, final int oldh) {
}
@ -321,11 +233,11 @@ public class UserProfileEditorActivity extends BaseSupportActivity implements On
if (mTask == null || mTask.getStatus() != Status.PENDING) return;
switch (requestCode) {
case REQUEST_UPLOAD_PROFILE_BANNER_IMAGE: {
mTask.execute();
mTask.executeTask();
break;
}
case REQUEST_UPLOAD_PROFILE_IMAGE: {
mTask.execute();
mTask.executeTask();
break;
}
}
@ -334,7 +246,7 @@ public class UserProfileEditorActivity extends BaseSupportActivity implements On
@Override
protected void onCreate(final Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
final Intent intent = getIntent();
final long accountId = intent.getLongExtra(EXTRA_ACCOUNT_ID, -1);
@ -345,16 +257,24 @@ public class UserProfileEditorActivity extends BaseSupportActivity implements On
mAsyncTaskManager = TwidereApplication.getInstance(this).getAsyncTaskManager();
mLazyImageLoader = TwidereApplication.getInstance(this).getImageLoaderWrapper();
mAccountId = accountId;
setContentView(R.layout.edit_user_profile);
setContentView(R.layout.activity_user_profile_editor);
ViewAccessor.setBackground(mActionBarOverlay, ThemeUtils.getWindowContentOverlay(this));
// setOverrideExitAniamtion(false);
getActionBar().setDisplayHomeAsUpEnabled(true);
mProfileImageBannerLayout.setOnSizeChangedListener(this);
mEditName.addTextChangedListener(this);
mEditDescription.addTextChangedListener(this);
mEditLocation.addTextChangedListener(this);
mEditUrl.addTextChangedListener(this);
mProfileImageView.setOnClickListener(this);
mProfileBannerView.setOnClickListener(this);
mProfileImageCamera.setOnClickListener(this);
mProfileImageGallery.setOnClickListener(this);
mProfileBannerGallery.setOnClickListener(this);
mProfileBannerRemove.setOnClickListener(this);
mCancelButton.setOnClickListener(this);
mDoneButton.setOnClickListener(this);
if (savedInstanceState != null && savedInstanceState.getParcelable(EXTRA_USER) != null) {
final ParcelableUser user = savedInstanceState.getParcelable(EXTRA_USER);
displayUser(user);
@ -401,7 +321,7 @@ public class UserProfileEditorActivity extends BaseSupportActivity implements On
mGetUserInfoCalled = false;
mUser = user;
if (user != null && user.id > 0) {
mProgress.setVisibility(View.GONE);
mProgressContainer.setVisibility(View.GONE);
mContent.setVisibility(View.VISIBLE);
mEditName.setText(user.name);
mEditDescription.setText(user.description_expanded);
@ -409,10 +329,9 @@ public class UserProfileEditorActivity extends BaseSupportActivity implements On
mEditUrl.setText(isEmpty(user.url_expanded) ? user.url : user.url_expanded);
mLazyImageLoader.displayProfileImage(mProfileImageView, user.profile_image_url);
final int def_width = getResources().getDisplayMetrics().widthPixels;
final int width = mBannerWidth > 0 ? mBannerWidth : def_width;
mLazyImageLoader.displayProfileBanner(mProfileBannerView, user.profile_banner_url, width);
mLazyImageLoader.displayProfileBanner(mProfileBannerView, user.profile_banner_url, def_width);
} else {
mProgress.setVisibility(View.GONE);
mProgressContainer.setVisibility(View.GONE);
mContent.setVisibility(View.GONE);
}
}
@ -501,7 +420,7 @@ public class UserProfileEditorActivity extends BaseSupportActivity implements On
}
class RemoveProfileBannerTaskInternal extends AsyncTask<Void, Void, SingleResponse<Boolean>> {
class RemoveProfileBannerTaskInternal extends TwidereAsyncTask<Void, Void, SingleResponse<Boolean>> {
private final long account_id;

View File

@ -162,24 +162,18 @@ public class UserHashtagAutoCompleteAdapter extends SimpleCursorAdapter implemen
if (filter != null) return filter.runQuery(constraint);
}
mToken = token;
final String constraint_escaped = constraint != null ? constraint.toString().replaceAll("_", "^_") : null;
final String constraintEscaped = constraint != null ? constraint.toString().replaceAll("_", "^_") : null;
if (isAtSymbol(token)) {
final StringBuilder builder = new StringBuilder();
builder.append(CachedUsers.SCREEN_NAME + " LIKE ?||'%' ESCAPE '^'");
builder.append(" OR ");
builder.append(CachedUsers.NAME + " LIKE ?||'%' ESCAPE '^'");
builder.append(" OR ");
builder.append(Expression.in(new Column(CachedUsers.USER_ID),
new RawItemArray(getMatchedNicknameIds(ParseUtils.parseString(constraint)))).getSQL());
final String selection = constraint_escaped != null ? builder.toString() : null;
final String[] selectionArgs = constraint_escaped != null ? new String[]{constraint_escaped,
constraint_escaped} : null;
final String selection = constraintEscaped != null ? (CachedUsers.SCREEN_NAME + " LIKE ?||'%' ESCAPE '^'") + " OR " + CachedUsers.NAME + " LIKE ?||'%' ESCAPE '^'" + " OR " + Expression.in(new Column(CachedUsers.USER_ID),
new RawItemArray(getMatchedNicknameIds(ParseUtils.parseString(constraint)))).getSQL() : null;
final String[] selectionArgs = constraintEscaped != null ? new String[]{constraintEscaped,
constraintEscaped} : null;
final String orderBy = CachedUsers.SCREEN_NAME + ", " + CachedUsers.NAME;
return mResolver.query(CachedUsers.CONTENT_URI, CACHED_USERS_COLUMNS, selection, selectionArgs, orderBy);
} else {
final String selection = constraint_escaped != null ? CachedHashtags.NAME + " LIKE ?||'%' ESCAPE '^'"
final String selection = constraintEscaped != null ? CachedHashtags.NAME + " LIKE ?||'%' ESCAPE '^'"
: null;
final String[] selectionArgs = constraint_escaped != null ? new String[]{constraint_escaped} : null;
final String[] selectionArgs = constraintEscaped != null ? new String[]{constraintEscaped} : null;
return mDatabase.query(true, CachedHashtags.TABLE_NAME, CachedHashtags.COLUMNS, selection, selectionArgs,
null, null, CachedHashtags.NAME, null);
}

View File

@ -84,7 +84,8 @@ public interface IntentConstants {
public static final String BROADCAST_FRIENDSHIP_ACCEPTED = INTENT_PACKAGE_PREFIX + "FRIENDSHIP_ACCEPTED";
public static final String BROADCAST_FRIENDSHIP_DENIED = INTENT_PACKAGE_PREFIX + "FRIENDSHIP_DENIED";
public static final String BROADCAST_FAVORITE_CHANGED = INTENT_PACKAGE_PREFIX + "FAVORITE_CHANGED";
public static final String BROADCAST_STATUS_FAVORITE_CREATED = INTENT_PACKAGE_PREFIX + "STATUS_FAVORITE_CREATED";
public static final String BROADCAST_STATUS_FAVORITE_DESTROYED = INTENT_PACKAGE_PREFIX + "STATUS_FAVORITE_DESTROYED";
public static final String BROADCAST_STATUS_RETWEETED = INTENT_PACKAGE_PREFIX + "STATUS_RETWEETED";
public static final String BROADCAST_STATUS_DESTROYED = INTENT_PACKAGE_PREFIX + "STATUS_DESTROYED";
public static final String BROADCAST_USER_LIST_MEMBERS_DELETED = INTENT_PACKAGE_PREFIX + "USER_LIST_MEMBER_DELETED";

View File

@ -53,7 +53,7 @@ import android.widget.TextView;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.adapter.ArrayAdapter;
import org.mariotaku.twidere.task.AsyncTask;
import org.mariotaku.twidere.task.TwidereAsyncTask;
import org.mariotaku.twidere.util.HostsFileParser;
import org.mariotaku.twidere.util.ParseUtils;
import org.mariotaku.twidere.util.ThemeUtils;
@ -297,7 +297,7 @@ public class HostMappingsListFragment extends BaseListFragment implements MultiC
}
static class ImportHostsTask extends AsyncTask<Void, Void, Boolean> {
static class ImportHostsTask extends TwidereAsyncTask<Void, Void, Boolean> {
private final SharedPreferences mPreferences;
private final HostMappingsListFragment mActivity;

View File

@ -43,7 +43,7 @@ import org.mariotaku.twidere.adapter.iface.IStatusesListAdapter;
import org.mariotaku.twidere.model.ParcelableAccount;
import org.mariotaku.twidere.model.ParcelableAccount.ParcelableAccountWithCredentials;
import org.mariotaku.twidere.model.ParcelableStatus;
import org.mariotaku.twidere.task.AsyncTask;
import org.mariotaku.twidere.task.TwidereAsyncTask;
import org.mariotaku.twidere.util.AsyncTaskManager;
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
import org.mariotaku.twidere.util.ClipboardUtils;
@ -559,13 +559,13 @@ abstract class BaseStatusesListFragment<Data> extends BasePullToRefreshListFragm
}
private void removeUnreadCounts() {
if (mRemoveUnreadCountsTask != null && mRemoveUnreadCountsTask.getStatus() == AsyncTask.Status.RUNNING)
if (mRemoveUnreadCountsTask != null && mRemoveUnreadCountsTask.getStatus() == TwidereAsyncTask.Status.RUNNING)
return;
mRemoveUnreadCountsTask = new RemoveUnreadCountsTask<Data>(mReadPositions, this);
mRemoveUnreadCountsTask.execute();
mRemoveUnreadCountsTask.executeTask();
}
static class RemoveUnreadCountsTask<T> extends AsyncTask<Void, Void, Void> {
static class RemoveUnreadCountsTask<T> extends TwidereAsyncTask<Void, Void, Void> {
private final List<Integer> read_positions;
private final IStatusesListAdapter<T> adapter;
private final BaseStatusesListFragment<T> fragment;

View File

@ -20,8 +20,6 @@
package org.mariotaku.twidere.fragment.support;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.net.Uri;
@ -34,7 +32,7 @@ import org.mariotaku.querybuilder.Expression;
import org.mariotaku.querybuilder.RawItemArray;
import org.mariotaku.twidere.adapter.CursorStatusesAdapter;
import org.mariotaku.twidere.provider.TweetStore.Statuses;
import org.mariotaku.twidere.task.AsyncTask;
import org.mariotaku.twidere.task.TwidereAsyncTask;
import org.mariotaku.twidere.util.Utils;
import static org.mariotaku.twidere.util.Utils.buildStatusFilterWhereClause;
@ -71,7 +69,7 @@ public abstract class CursorStatusesFragment extends AbsStatusesFragment<Cursor>
@Override
public boolean triggerRefresh() {
new AsyncTask<Void, Void, long[][]>() {
new TwidereAsyncTask<Void, Void, long[][]>() {
@Override
protected long[][] doInBackground(final Void... params) {
@ -86,7 +84,7 @@ public abstract class CursorStatusesFragment extends AbsStatusesFragment<Cursor>
getStatuses(result[0], result[1], result[2]);
}
}.execute();
}.executeTask();
return true;
}
@ -108,7 +106,7 @@ public abstract class CursorStatusesFragment extends AbsStatusesFragment<Cursor>
@Override
protected void onLoadMoreStatuses() {
new AsyncTask<Void, Void, long[][]>() {
new TwidereAsyncTask<Void, Void, long[][]>() {
@Override
protected long[][] doInBackground(final Void... params) {
@ -123,7 +121,7 @@ public abstract class CursorStatusesFragment extends AbsStatusesFragment<Cursor>
getStatuses(result[0], result[1], result[2]);
}
}.execute();
}.executeTask();
}
protected Expression getFiltersWhere(String table) {

View File

@ -70,7 +70,7 @@ import org.mariotaku.twidere.model.ParcelableUser;
import org.mariotaku.twidere.provider.TweetStore;
import org.mariotaku.twidere.provider.TweetStore.DirectMessages;
import org.mariotaku.twidere.provider.TweetStore.DirectMessages.Conversation;
import org.mariotaku.twidere.task.AsyncTask;
import org.mariotaku.twidere.task.TwidereAsyncTask;
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
import org.mariotaku.twidere.util.ClipboardUtils;
import org.mariotaku.twidere.util.ImageLoaderWrapper;
@ -386,7 +386,7 @@ public class DirectMessagesConversationFragment extends BasePullToRefreshListFra
@Override
public void onRefreshFromEnd() {
new AsyncTask<Void, Void, long[][]>() {
new TwidereAsyncTask<Void, Void, long[][]>() {
@Override
protected long[][] doInBackground(final Void... params) {
@ -404,7 +404,7 @@ public class DirectMessagesConversationFragment extends BasePullToRefreshListFra
twitter.getSentDirectMessagesAsync(result[0], null, null);
}
}.execute();
}.executeTask();
}
@Override
@ -519,7 +519,7 @@ public class DirectMessagesConversationFragment extends BasePullToRefreshListFra
private void loadMoreMessages() {
if (isRefreshing()) return;
new AsyncTask<Void, Void, long[][]>() {
new TwidereAsyncTask<Void, Void, long[][]>() {
@Override
protected long[][] doInBackground(final Void... params) {
@ -538,7 +538,7 @@ public class DirectMessagesConversationFragment extends BasePullToRefreshListFra
twitter.getSentDirectMessagesAsync(result[0], result[2], null);
}
}.execute();
}.executeTask();
}
private void sendDirectMessage() {

View File

@ -44,7 +44,7 @@ import org.mariotaku.twidere.adapter.DirectMessageConversationEntriesAdapter;
import org.mariotaku.twidere.provider.TweetStore.Accounts;
import org.mariotaku.twidere.provider.TweetStore.DirectMessages;
import org.mariotaku.twidere.provider.TweetStore.Statuses;
import org.mariotaku.twidere.task.AsyncTask;
import org.mariotaku.twidere.task.TwidereAsyncTask;
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
import org.mariotaku.twidere.util.MultiSelectManager;
import org.mariotaku.twidere.util.content.SupportFragmentReloadCursorObserver;
@ -178,7 +178,7 @@ public class DirectMessagesFragment extends BasePullToRefreshListFragment implem
@Override
public void onRefreshFromStart() {
if (isRefreshing()) return;
new AsyncTask<Void, Void, long[][]>() {
new TwidereAsyncTask<Void, Void, long[][]>() {
@Override
protected long[][] doInBackground(final Void... params) {
@ -196,7 +196,7 @@ public class DirectMessagesFragment extends BasePullToRefreshListFragment implem
twitter.getSentDirectMessagesAsync(result[0], null, null);
}
}.execute();
}.executeTask();
}
@Override
@ -312,7 +312,7 @@ public class DirectMessagesFragment extends BasePullToRefreshListFragment implem
private void loadMoreMessages() {
if (isRefreshing()) return;
new AsyncTask<Void, Void, long[][]>() {
new TwidereAsyncTask<Void, Void, long[][]>() {
@Override
protected long[][] doInBackground(final Void... params) {
@ -331,17 +331,17 @@ public class DirectMessagesFragment extends BasePullToRefreshListFragment implem
twitter.getSentDirectMessagesAsync(result[0], result[2], null);
}
}.execute();
}.executeTask();
}
private void removeUnreadCounts() {
if (mRemoveUnreadCountsTask != null && mRemoveUnreadCountsTask.getStatus() == AsyncTask.Status.RUNNING)
if (mRemoveUnreadCountsTask != null && mRemoveUnreadCountsTask.getStatus() == TwidereAsyncTask.Status.RUNNING)
return;
mRemoveUnreadCountsTask = new RemoveUnreadCountsTask(mReadPositions, this);
mRemoveUnreadCountsTask.execute();
mRemoveUnreadCountsTask.executeTask();
}
static class RemoveUnreadCountsTask extends AsyncTask<Void, Void, Void> {
static class RemoveUnreadCountsTask extends TwidereAsyncTask<Void, Void, Void> {
private final Set<Integer> read_positions;
private final DirectMessageConversationEntriesAdapter adapter;
private final DirectMessagesFragment fragment;

View File

@ -36,21 +36,6 @@ import java.util.List;
*/
public abstract class ParcelableStatusesFragment extends AbsStatusesFragment<List<ParcelableStatus>> {
@Override
protected void onSetIntentFilter(IntentFilter filter) {
filter.addAction(BROADCAST_STATUS_DESTROYED);
}
@Override
protected void onReceivedBroadcast(Intent intent, String action) {
switch (action) {
case BROADCAST_STATUS_DESTROYED: {
deleteStatus(intent.getLongExtra(EXTRA_STATUS_ID, -1));
break;
}
}
}
public final void deleteStatus(final long statusId) {
final List<ParcelableStatus> data = getAdapterData();
if (statusId <= 0 || data == null) return;
@ -94,6 +79,21 @@ public abstract class ParcelableStatusesFragment extends AbsStatusesFragment<Lis
getStatuses(null, maxIds, null);
}
@Override
protected void onReceivedBroadcast(Intent intent, String action) {
switch (action) {
case BROADCAST_STATUS_DESTROYED: {
deleteStatus(intent.getLongExtra(EXTRA_STATUS_ID, -1));
break;
}
}
}
@Override
protected void onSetIntentFilter(IntentFilter filter) {
filter.addAction(BROADCAST_STATUS_DESTROYED);
}
@Override
public boolean triggerRefresh() {
final IStatusesAdapter<List<ParcelableStatus>> adapter = getAdapter();
@ -112,4 +112,8 @@ public abstract class ParcelableStatusesFragment extends AbsStatusesFragment<Lis
return args != null ? args.getLong(EXTRA_ACCOUNT_ID, -1) : -1;
}
protected String[] getSavedStatusesFileArgs() {
return null;
}
}

View File

@ -19,49 +19,41 @@
package org.mariotaku.twidere.fragment.support;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.content.Loader;
import org.mariotaku.twidere.adapter.iface.IStatusesListAdapter;
import org.mariotaku.twidere.loader.support.RetweetsOfMeLoader;
import org.mariotaku.twidere.model.ParcelableStatus;
import java.util.List;
public class RetweetsOfMeFragment extends ParcelableStatusesListFragment {
public class RetweetsOfMeFragment extends ParcelableStatusesFragment {
@Override
public Loader<List<ParcelableStatus>> newLoaderInstance(final Context context, final Bundle args) {
if (args == null) return null;
final long account_id = args.getLong(EXTRA_ACCOUNT_ID, -1);
final long max_id = args.getLong(EXTRA_MAX_ID, -1);
final long since_id = args.getLong(EXTRA_SINCE_ID, -1);
final int tab_position = args.getInt(EXTRA_TAB_POSITION, -1);
return new RetweetsOfMeLoader(context, account_id, max_id, since_id, getData(), getSavedStatusesFileArgs(),
tab_position);
}
@Override
public Loader<List<ParcelableStatus>> onCreateLoader(final int id, final Bundle args) {
final long accountId = args.getLong(EXTRA_ACCOUNT_ID, -1);
final long maxId = args.getLong(EXTRA_MAX_ID, -1);
final long sinceId = args.getLong(EXTRA_SINCE_ID, -1);
final int tabPosition = args.getInt(EXTRA_TAB_POSITION, -1);
return new RetweetsOfMeLoader(getActivity(), accountId, maxId, sinceId, getAdapterData(),
getSavedStatusesFileArgs(), tabPosition);
}
@Override
public void onActivityCreated(final Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
final IStatusesListAdapter<List<ParcelableStatus>> adapter = getListAdapter();
adapter.setIndicateMyStatusDisabled(false);
adapter.setFiltersEnabled(true);
adapter.setIgnoredFilterFields(true, false, false, false, false);
}
@Override
public void onActivityCreated(final Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// final IStatusesListAdapter<List<ParcelableStatus>> adapter = getAdapter();
// adapter.setIndicateMyStatusDisabled(false);
// adapter.setFiltersEnabled(true);
// adapter.setIgnoredFilterFields(true, false, false, false, false);
}
@Override
protected String[] getSavedStatusesFileArgs() {
final Bundle args = getArguments();
if (args == null) return null;
final long account_id = args.getLong(EXTRA_ACCOUNT_ID, -1);
return new String[] { AUTHORITY_RETWEETS_OF_ME, "account" + account_id };
}
@Override
protected boolean shouldShowAccountColor() {
return false;
}
@Override
protected String[] getSavedStatusesFileArgs() {
final Bundle args = getArguments();
if (args == null) return null;
final long account_id = args.getLong(EXTRA_ACCOUNT_ID, -1);
return new String[]{AUTHORITY_RETWEETS_OF_ME, "account" + account_id};
}
}

View File

@ -78,7 +78,7 @@ public class SearchFragment extends BaseSupportFragment implements RefreshScroll
final Bundle args = getArguments();
final FragmentActivity activity = getActivity();
mAdapter = new SupportTabsAdapter(activity, getChildFragmentManager(), null, 1);
mAdapter.addTab(SearchStatusesFragment.class, args, getString(R.string.statuses),
mAdapter.addTab(StatusesSearchFragment.class, args, getString(R.string.statuses),
R.drawable.ic_action_twitter, 0);
mAdapter.addTab(SearchUsersFragment.class, args, getString(R.string.users), R.drawable.ic_action_user, 1);
mViewPager.setAdapter(mAdapter);

View File

@ -1,86 +0,0 @@
/*
* Twidere - Twitter client for Android
*
* Copyright (C) 2012-2014 Mariotaku Lee <mariotaku.lee@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.mariotaku.twidere.fragment.support;
import static org.mariotaku.twidere.util.Utils.getActivatedAccountIds;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.content.Loader;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import org.mariotaku.twidere.adapter.iface.IStatusesListAdapter;
import org.mariotaku.twidere.loader.support.TweetSearchLoader;
import org.mariotaku.twidere.model.ParcelableStatus;
import java.util.List;
public class SearchStatusesFragment extends ParcelableStatusesListFragment {
@Override
public Loader<List<ParcelableStatus>> newLoaderInstance(final Context context, final Bundle args) {
if (args == null) return null;
final long accountId = args.getLong(EXTRA_ACCOUNT_ID, -1);
final long maxId = args.getLong(EXTRA_MAX_ID, -1);
final long sinceId = args.getLong(EXTRA_SINCE_ID, -1);
final String query = args.getString(EXTRA_QUERY);
final int tabPosition = args.getInt(EXTRA_TAB_POSITION, -1);
final IStatusesListAdapter<List<ParcelableStatus>> adapter = getListAdapter();
adapter.setHighlightKeyword(query.split(" "));
return new TweetSearchLoader(getActivity(), accountId, query, maxId, sinceId, getData(),
getSavedStatusesFileArgs(), tabPosition);
}
@Override
public void onActivityCreated(final Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
final IStatusesListAdapter<List<ParcelableStatus>> adapter = getListAdapter();
adapter.setFiltersEnabled(true);
adapter.setIgnoredFilterFields(false, false, false, false, false);
}
@Override
public void onScrollStateChanged(final AbsListView view, final int scrollState) {
super.onScrollStateChanged(view, scrollState);
if (scrollState == OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {
final Fragment parent = getParentFragment();
if (parent instanceof SearchFragment) {
((SearchFragment) parent).hideIndicator();
}
}
}
@Override
protected String[] getSavedStatusesFileArgs() {
final Bundle args = getArguments();
if (args == null) return null;
final long account_id = args.getLong(EXTRA_ACCOUNT_ID, -1);
final String query = args.getString(EXTRA_QUERY);
return new String[] { AUTHORITY_SEARCH_TWEETS, "account" + account_id, "query" + query };
}
@Override
protected boolean shouldShowAccountColor() {
return getActivatedAccountIds(getActivity()).length > 1;
}
}

View File

@ -80,7 +80,7 @@ import org.mariotaku.twidere.model.ParcelableLocation;
import org.mariotaku.twidere.model.ParcelableMedia;
import org.mariotaku.twidere.model.ParcelableStatus;
import org.mariotaku.twidere.model.SingleResponse;
import org.mariotaku.twidere.task.AsyncTask;
import org.mariotaku.twidere.task.TwidereAsyncTask;
import org.mariotaku.twidere.text.method.StatusContentMovementMethod;
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
import org.mariotaku.twidere.util.ClipboardUtils;
@ -195,7 +195,7 @@ public class StatusFragment extends ParcelableStatusesListFragment implements On
}
break;
}
case BROADCAST_FAVORITE_CHANGED: {
case BROADCAST_STATUS_FAVORITE_CREATED: {
final ParcelableStatus status = intent.getParcelableExtra(EXTRA_STATUS);
if (mStatus != null && status != null && isSameAccount(context, status.account_id, mStatus.account_id)
&& status.id == getStatusId()) {
@ -326,7 +326,7 @@ public class StatusFragment extends ParcelableStatusesListFragment implements On
} else {
setSelection(0);
}
if (mConversationTask != null && mConversationTask.getStatus() == AsyncTask.Status.RUNNING) {
if (mConversationTask != null && mConversationTask.getStatus() == TwidereAsyncTask.Status.RUNNING) {
mConversationTask.cancel(true);
}
mStatus = status;
@ -636,7 +636,7 @@ public class StatusFragment extends ParcelableStatusesListFragment implements On
lm.destroyLoader(LOADER_ID_STATUS);
lm.destroyLoader(LOADER_ID_LOCATION);
lm.destroyLoader(LOADER_ID_FOLLOW);
if (mConversationTask != null && mConversationTask.getStatus() == AsyncTask.Status.RUNNING) {
if (mConversationTask != null && mConversationTask.getStatus() == TwidereAsyncTask.Status.RUNNING) {
mConversationTask.cancel(true);
}
super.onDestroyView();
@ -688,7 +688,7 @@ public class StatusFragment extends ParcelableStatusesListFragment implements On
super.onStart();
final IntentFilter filter = new IntentFilter();
filter.addAction(BROADCAST_FRIENDSHIP_CHANGED);
filter.addAction(BROADCAST_FAVORITE_CHANGED);
filter.addAction(BROADCAST_STATUS_FAVORITE_CREATED);
filter.addAction(BROADCAST_STATUS_RETWEETED);
registerReceiver(mStatusReceiver, filter);
updateUserColor();
@ -920,7 +920,7 @@ public class StatusFragment extends ParcelableStatusesListFragment implements On
}
private void showConversation() {
if (mConversationTask != null && mConversationTask.getStatus() == AsyncTask.Status.RUNNING) {
if (mConversationTask != null && mConversationTask.getStatus() == TwidereAsyncTask.Status.RUNNING) {
mConversationTask.cancel(true);
return;
}
@ -935,7 +935,7 @@ public class StatusFragment extends ParcelableStatusesListFragment implements On
}
if (status == null || status.in_reply_to_status_id <= 0) return;
mConversationTask = new LoadConversationTask(this);
mConversationTask.execute(status);
mConversationTask.executeTask(status);
}
private void showFollowInfo(final boolean force) {
@ -1063,7 +1063,7 @@ public class StatusFragment extends ParcelableStatusesListFragment implements On
}
}
static class LoadConversationTask extends AsyncTask<ParcelableStatus, Void, SingleResponse<Boolean>> {
static class LoadConversationTask extends TwidereAsyncTask<ParcelableStatus, Void, SingleResponse<Boolean>> {
final Handler handler;
final Context context;

View File

@ -19,10 +19,6 @@
package org.mariotaku.twidere.fragment.support;
import static org.mariotaku.twidere.util.CompareUtils.objectEquals;
import static org.mariotaku.twidere.util.Utils.getAccountScreenName;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.content.Loader;
@ -31,33 +27,29 @@ import org.mariotaku.twidere.model.ParcelableStatus;
import java.util.List;
public class StatusRepliesListFragment extends SearchStatusesFragment {
public class StatusRepliesListFragment extends StatusesSearchFragment {
@Override
public Loader<List<ParcelableStatus>> newLoaderInstance(final Context context, final Bundle args) {
if (args == null) return null;
final long accountId = args.getLong(EXTRA_ACCOUNT_ID, -1);
final String screenName = args.getString(EXTRA_SCREEN_NAME);
final long statusId = args.getLong(EXTRA_STATUS_ID, -1);
if (accountId <= 0 || statusId <= 0 || screenName == null) return null;
final long maxId = args.getLong(EXTRA_MAX_ID, -1);
final long sinceId = args.getLong(EXTRA_SINCE_ID, -1);
final int tabPosition = args.getInt(EXTRA_TAB_POSITION, -1);
getListAdapter().setMentionsHightlightDisabled(
objectEquals(getAccountScreenName(getActivity(), accountId), screenName));
return new StatusRepliesLoader(getActivity(), accountId, screenName, statusId, maxId, sinceId, getData(),
getSavedStatusesFileArgs(), tabPosition);
}
@Override
public Loader<List<ParcelableStatus>> onCreateLoader(final int id, final Bundle args) {
final long accountId = args.getLong(EXTRA_ACCOUNT_ID, -1);
final String screenName = args.getString(EXTRA_SCREEN_NAME);
final long statusId = args.getLong(EXTRA_STATUS_ID, -1);
final long maxId = args.getLong(EXTRA_MAX_ID, -1);
final long sinceId = args.getLong(EXTRA_SINCE_ID, -1);
final int tabPosition = args.getInt(EXTRA_TAB_POSITION, -1);
return new StatusRepliesLoader(getActivity(), accountId, screenName, statusId, maxId,
sinceId, getAdapterData(), getSavedStatusesFileArgs(), tabPosition);
}
@Override
protected String[] getSavedStatusesFileArgs() {
final Bundle args = getArguments();
if (args == null) return null;
final long accountId = args.getLong(EXTRA_ACCOUNT_ID, -1);
final String screenName = args.getString(EXTRA_SCREEN_NAME);
final long statusId = args.getLong(EXTRA_STATUS_ID);
return new String[] { AUTHORITY_STATUS_REPLIES, "account" + accountId, "screen_name" + screenName,
"status_id" + statusId };
}
@Override
protected String[] getSavedStatusesFileArgs() {
final Bundle args = getArguments();
if (args == null) return null;
final long accountId = args.getLong(EXTRA_ACCOUNT_ID, -1);
final String screenName = args.getString(EXTRA_SCREEN_NAME);
final long statusId = args.getLong(EXTRA_STATUS_ID);
return new String[]{AUTHORITY_STATUS_REPLIES, "account" + accountId, "screen_name" + screenName,
"status_id" + statusId};
}
}

View File

@ -19,7 +19,6 @@
package org.mariotaku.twidere.fragment.support;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.content.Loader;
@ -28,32 +27,30 @@ import org.mariotaku.twidere.model.ParcelableStatus;
import java.util.List;
public class StatusesListFragment extends ParcelableStatusesListFragment {
public class StatusesListFragment extends ParcelableStatusesFragment {
@Override
public Loader<List<ParcelableStatus>> newLoaderInstance(final Context context, final Bundle args) {
if (args == null) return null;
if (args.containsKey(EXTRA_STATUSES)) return new IntentExtrasStatusesLoader(getActivity(), args, getData());
return null;
}
@Override
public Loader<List<ParcelableStatus>> onCreateLoader(final int id, final Bundle args) {
return new IntentExtrasStatusesLoader(getActivity(), getArguments(), getAdapterData());
}
@Override
protected String[] getSavedStatusesFileArgs() {
return null;
}
@Override
protected String[] getSavedStatusesFileArgs() {
return null;
}
@Override
protected boolean shouldShowAccountColor() {
final List<ParcelableStatus> data = getData();
if (data != null) {
long account_id = -1;
for (final ParcelableStatus status : data) {
final long prev = account_id;
account_id = status.account_id;
if (prev > 0 && account_id != prev) return true;
}
}
return false;
}
// @Override
// protected boolean shouldShowAccountColor() {
// final List<ParcelableStatus> data = getData();
// if (data != null) {
// long account_id = -1;
// for (final ParcelableStatus status : data) {
// final long prev = account_id;
// account_id = status.account_id;
// if (prev > 0 && account_id != prev) return true;
// }
// }
// return false;
// }
}

View File

@ -0,0 +1,57 @@
/*
* Twidere - Twitter client for Android
*
* Copyright (C) 2012-2014 Mariotaku Lee <mariotaku.lee@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.mariotaku.twidere.fragment.support;
import android.os.Bundle;
import android.support.v4.content.Loader;
import org.mariotaku.twidere.loader.support.TweetSearchLoader;
import org.mariotaku.twidere.model.ParcelableStatus;
import java.util.List;
/**
* Created by mariotaku on 14/12/2.
*/
public class StatusesSearchFragment extends ParcelableStatusesFragment {
@Override
public Loader<List<ParcelableStatus>> onCreateLoader(int id, Bundle args) {
setRefreshing(true);
final long accountId = args.getLong(EXTRA_ACCOUNT_ID, -1);
final long maxId = args.getLong(EXTRA_MAX_ID, -1);
final long sinceId = args.getLong(EXTRA_SINCE_ID, -1);
final String query = args.getString(EXTRA_QUERY);
final int tabPosition = args.getInt(EXTRA_TAB_POSITION, -1);
return new TweetSearchLoader(getActivity(), accountId, query, maxId, sinceId, getAdapterData(),
getSavedStatusesFileArgs(), tabPosition);
}
@Override
protected String[] getSavedStatusesFileArgs() {
final Bundle args = getArguments();
if (args == null) return null;
final long account_id = args.getLong(EXTRA_ACCOUNT_ID, -1);
final String query = args.getString(EXTRA_QUERY);
return new String[]{AUTHORITY_SEARCH_TWEETS, "account" + account_id, "query" + query};
}
}

View File

@ -20,6 +20,8 @@
package org.mariotaku.twidere.fragment.support;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v4.content.Loader;
@ -28,11 +30,39 @@ import org.mariotaku.twidere.model.ParcelableStatus;
import java.util.List;
import static org.mariotaku.twidere.util.Utils.isSameAccount;
/**
* Created by mariotaku on 14/12/2.
*/
public class UserFavoritesFragment extends ParcelableStatusesFragment {
@Override
protected void onReceivedBroadcast(Intent intent, String action) {
switch (action) {
case BROADCAST_STATUS_FAVORITE_DESTROYED: {
final Context context = getActivity();
final ParcelableStatus status = intent.getParcelableExtra(EXTRA_STATUS);
final Bundle args = getArguments();
if (context == null || status == null || args == null) return;
final long userId = args.getLong(EXTRA_USER_ID, -1);
final String screenName = args.getString(EXTRA_SCREEN_NAME);
if (isSameAccount(context, status.account_id, userId)
|| isSameAccount(context, status.account_id, screenName)) {
deleteStatus(status.id);
}
return;
}
}
super.onReceivedBroadcast(intent, action);
}
@Override
protected void onSetIntentFilter(IntentFilter filter) {
super.onSetIntentFilter(filter);
filter.addAction(BROADCAST_STATUS_FAVORITE_DESTROYED);
}
@Override
public Loader<List<ParcelableStatus>> onCreateLoader(int id, Bundle args) {
setRefreshing(true);

View File

@ -1,118 +0,0 @@
/*
* Twidere - Twitter client for Android
*
* Copyright (C) 2012-2014 Mariotaku Lee <mariotaku.lee@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.mariotaku.twidere.fragment.support;
import static org.mariotaku.twidere.util.Utils.getAccountId;
import static org.mariotaku.twidere.util.Utils.isSameAccount;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v4.content.Loader;
import org.mariotaku.twidere.adapter.iface.IStatusesListAdapter;
import org.mariotaku.twidere.loader.support.UserFavoritesLoader;
import org.mariotaku.twidere.model.ParcelableStatus;
import java.util.List;
public class UserFavoritesFragmentOld extends ParcelableStatusesListFragment {
private long mUserId;
private String mUserScreenName;
private final BroadcastReceiver mStateReceiver = new BroadcastReceiver() {
@Override
public void onReceive(final Context context, final Intent intent) {
if (getActivity() == null || !isAdded() || isDetached()) return;
final String action = intent.getAction();
if (BROADCAST_FAVORITE_CHANGED.equals(action)) {
final ParcelableStatus status = intent.getParcelableExtra(EXTRA_STATUS);
if (status == null) return;
if ((isSameAccount(context, status.account_id, mUserId) || isSameAccount(context, status.account_id,
mUserScreenName)) && status.id > 0 && !intent.getBooleanExtra(EXTRA_FAVORITED, true)) {
deleteStatus(status.id);
}
}
}
};
@Override
public Loader<List<ParcelableStatus>> newLoaderInstance(final Context context, final Bundle args) {
if (args == null) return null;
final long account_id = args.getLong(EXTRA_ACCOUNT_ID);
final long user_id = args.getLong(EXTRA_USER_ID, -1);
final long max_id = args.getLong(EXTRA_MAX_ID, -1);
final long since_id = args.getLong(EXTRA_SINCE_ID, -1);
final String screen_name = args.getString(EXTRA_SCREEN_NAME);
final int tab_position = args.getInt(EXTRA_TAB_POSITION, -1);
mUserId = user_id;
mUserScreenName = screen_name;
return new UserFavoritesLoader(getActivity(), account_id, user_id, screen_name, max_id, since_id, getData(),
getSavedStatusesFileArgs(), tab_position);
}
@Override
public void onActivityCreated(final Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
final Bundle args = getArguments();
final long account_id = args != null ? args.getLong(EXTRA_ACCOUNT_ID, -1) : -1;
final long user_id = args != null ? args.getLong(EXTRA_USER_ID, -1) : -1;
final String screen_name = args != null ? args.getString(EXTRA_SCREEN_NAME) : null;
final boolean is_my_timeline = user_id > 0 ? account_id == user_id : account_id == getAccountId(getActivity(),
screen_name);
final IStatusesListAdapter<List<ParcelableStatus>> adapter = getListAdapter();
adapter.setFavoritesHightlightDisabled(is_my_timeline);
adapter.setFiltersEnabled(false);
}
@Override
public void onStart() {
super.onStart();
final IntentFilter filter = new IntentFilter(BROADCAST_FAVORITE_CHANGED);
registerReceiver(mStateReceiver, filter);
}
@Override
public void onStop() {
unregisterReceiver(mStateReceiver);
super.onStop();
}
@Override
protected String[] getSavedStatusesFileArgs() {
final Bundle args = getArguments();
if (args == null) return null;
final long account_id = args.getLong(EXTRA_ACCOUNT_ID, -1);
final long user_id = args.getLong(EXTRA_USER_ID, -1);
final String screen_name = args.getString(EXTRA_SCREEN_NAME);
return new String[] { AUTHORITY_USER_FAVORITES, "account" + account_id, "user" + user_id, "name" + screen_name };
}
@Override
protected boolean shouldShowAccountColor() {
return false;
}
}

View File

@ -32,7 +32,7 @@ import org.mariotaku.twidere.loader.support.CursorSupportUsersLoader;
import org.mariotaku.twidere.loader.support.UserListMembersLoader;
import org.mariotaku.twidere.model.ParcelableUser;
import org.mariotaku.twidere.model.ParcelableUserList;
import org.mariotaku.twidere.task.AsyncTask;
import org.mariotaku.twidere.task.TwidereAsyncTask;
import twitter4j.Twitter;
import twitter4j.TwitterException;
@ -86,7 +86,7 @@ public class UserListMembersFragment extends CursorSupportUsersListFragment impl
final long user_id = args.getLong(EXTRA_USER_ID, -1);
final String screen_name = args.getString(EXTRA_SCREEN_NAME);
final String list_name = args.getString(EXTRA_LIST_NAME);
new GetUserListTask(account_id, list_id, list_name, user_id, screen_name).execute();
new GetUserListTask(account_id, list_id, list_name, user_id, screen_name).executeTask();
}
}
@ -130,7 +130,7 @@ public class UserListMembersFragment extends CursorSupportUsersListFragment impl
return R.menu.action_user_list_member;
}
private class GetUserListTask extends AsyncTask<Void, Void, ParcelableUserList> {
private class GetUserListTask extends TwidereAsyncTask<Void, Void, ParcelableUserList> {
private final long account_id, user_id;
private final int list_id;

View File

@ -45,7 +45,7 @@ public class UserListTimelineFragment extends ParcelableStatusesFragment {
final String listName = args.getString(EXTRA_LIST_NAME);
final int tabPosition = args.getInt(EXTRA_TAB_POSITION, -1);
return new UserListTimelineLoader(getActivity(), accountId, listId, userId, screenName,
listName, maxId, sinceId, getAdapterData(), null, tabPosition);
listName, maxId, sinceId, getAdapterData(), getSavedStatusesFileArgs(), tabPosition);
}
}

View File

@ -1,75 +0,0 @@
/*
* Twidere - Twitter client for Android
*
* Copyright (C) 2012-2014 Mariotaku Lee <mariotaku.lee@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.mariotaku.twidere.fragment.support;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.content.Loader;
import org.mariotaku.twidere.adapter.iface.IStatusesListAdapter;
import org.mariotaku.twidere.loader.support.UserListTimelineLoader;
import org.mariotaku.twidere.model.ParcelableStatus;
import java.util.List;
public class UserListTimelineListFragment extends ParcelableStatusesListFragment {
@Override
public Loader<List<ParcelableStatus>> newLoaderInstance(final Context context, final Bundle args) {
if (args == null) return null;
final int list_id = args.getInt(EXTRA_LIST_ID, -1);
final long account_id = args.getLong(EXTRA_ACCOUNT_ID, -1);
final long max_id = args.getLong(EXTRA_MAX_ID, -1);
final long since_id = args.getLong(EXTRA_SINCE_ID, -1);
final long user_id = args.getLong(EXTRA_USER_ID, -1);
final String screen_name = args.getString(EXTRA_SCREEN_NAME);
final String list_name = args.getString(EXTRA_LIST_NAME);
final int tab_position = args.getInt(EXTRA_TAB_POSITION, -1);
return new UserListTimelineLoader(getActivity(), account_id, list_id, user_id, screen_name, list_name, max_id,
since_id, getData(), getSavedStatusesFileArgs(), tab_position);
}
@Override
public void onActivityCreated(final Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
final IStatusesListAdapter<List<ParcelableStatus>> adapter = getListAdapter();
adapter.setFiltersEnabled(true);
adapter.setIgnoredFilterFields(false, false, false, false, false);
}
@Override
protected String[] getSavedStatusesFileArgs() {
final Bundle args = getArguments();
if (args == null) return null;
final int list_id = args.getInt(EXTRA_LIST_ID, -1);
final long account_id = args.getLong(EXTRA_ACCOUNT_ID, -1);
final long user_id = args.getLong(EXTRA_USER_ID, -1);
final String screen_name = args.getString(EXTRA_SCREEN_NAME);
final String list_name = args.getString(EXTRA_LIST_NAME);
return new String[] { AUTHORITY_USER_LIST_TIMELINE, "account" + account_id, "list_id" + list_id,
"list_name" + list_name, "user" + user_id, "screen_name" + screen_name };
}
@Override
protected boolean shouldShowAccountColor() {
return false;
}
}

View File

@ -19,10 +19,6 @@
package org.mariotaku.twidere.fragment.support;
import static org.mariotaku.twidere.util.CompareUtils.objectEquals;
import static org.mariotaku.twidere.util.Utils.getAccountScreenName;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.content.Loader;
@ -31,30 +27,27 @@ import org.mariotaku.twidere.model.ParcelableStatus;
import java.util.List;
public class UserMentionsFragment extends SearchStatusesFragment {
public class UserMentionsFragment extends StatusesSearchFragment {
@Override
public Loader<List<ParcelableStatus>> newLoaderInstance(final Context context, final Bundle args) {
if (args == null) return null;
final String screenName = args.getString(EXTRA_SCREEN_NAME);
if (screenName == null) return null;
final long accountId = args.getLong(EXTRA_ACCOUNT_ID, -1);
final long maxId = args.getLong(EXTRA_MAX_ID, -1);
final long sinceId = args.getLong(EXTRA_SINCE_ID, -1);
final int tabPosition = args.getInt(EXTRA_TAB_POSITION, -1);
getListAdapter().setMentionsHightlightDisabled(
objectEquals(getAccountScreenName(getActivity(), accountId), screenName));
return new UserMentionsLoader(getActivity(), accountId, screenName, maxId, sinceId, getData(),
getSavedStatusesFileArgs(), tabPosition);
}
@Override
public Loader<List<ParcelableStatus>> onCreateLoader(final int id, final Bundle args) {
if (args == null) return null;
final String screenName = args.getString(EXTRA_SCREEN_NAME);
final long accountId = args.getLong(EXTRA_ACCOUNT_ID, -1);
final long maxId = args.getLong(EXTRA_MAX_ID, -1);
final long sinceId = args.getLong(EXTRA_SINCE_ID, -1);
final int tabPosition = args.getInt(EXTRA_TAB_POSITION, -1);
return new UserMentionsLoader(getActivity(), accountId, screenName, maxId, sinceId,
getAdapterData(), getSavedStatusesFileArgs(), tabPosition);
}
@Override
protected String[] getSavedStatusesFileArgs() {
final Bundle args = getArguments();
if (args == null) return null;
final long account_id = args.getLong(EXTRA_ACCOUNT_ID, -1);
final String screen_name = args.getString(EXTRA_SCREEN_NAME);
return new String[] { AUTHORITY_USER_MENTIONS, "account" + account_id, "screen_name" + screen_name };
}
@Override
protected String[] getSavedStatusesFileArgs() {
final Bundle args = getArguments();
if (args == null) return null;
final long account_id = args.getLong(EXTRA_ACCOUNT_ID, -1);
final String screen_name = args.getString(EXTRA_SCREEN_NAME);
return new String[]{AUTHORITY_USER_MENTIONS, "account" + account_id, "screen_name" + screen_name};
}
}

View File

@ -1,94 +0,0 @@
/*
* Twidere - Twitter client for Android
*
* Copyright (C) 2012-2014 Mariotaku Lee <mariotaku.lee@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.mariotaku.twidere.fragment.support;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.content.Loader;
import org.mariotaku.twidere.adapter.iface.IStatusesListAdapter;
import org.mariotaku.twidere.loader.support.UserTimelineLoader;
import org.mariotaku.twidere.model.ParcelableStatus;
import java.util.List;
import static org.mariotaku.twidere.util.Utils.getAccountId;
import static org.mariotaku.twidere.util.Utils.getAccountScreenName;
public class UserTimelineFragmentOld extends ParcelableStatusesListFragment {
@Override
public Loader<List<ParcelableStatus>> newLoaderInstance(final Context context, final Bundle args) {
if (args == null) return null;
final long accountId = args.getLong(EXTRA_ACCOUNT_ID, -1);
final long maxId = args.getLong(EXTRA_MAX_ID, -1);
final long sinceId = args.getLong(EXTRA_SINCE_ID, -1);
final long userId = args.getLong(EXTRA_USER_ID, -1);
final String screenName = args.getString(EXTRA_SCREEN_NAME);
final int tabPosition = args.getInt(EXTRA_TAB_POSITION, -1);
return new UserTimelineLoader(context, accountId, userId, screenName, maxId, sinceId, getData(),
getSavedStatusesFileArgs(), tabPosition);
}
@Override
public void onActivityCreated(final Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
final Bundle args = getArguments();
final long accountId = args != null ? args.getLong(EXTRA_ACCOUNT_ID, -1) : -1;
final long userId = args != null ? args.getLong(EXTRA_USER_ID, -1) : -1;
final String screenName = args != null ? args.getString(EXTRA_SCREEN_NAME) : null;
final boolean isMyTimeline = userId > 0 ? accountId == userId : accountId == getAccountId(getActivity(),
screenName);
final IStatusesListAdapter<List<ParcelableStatus>> adapter = getListAdapter();
adapter.setIndicateMyStatusDisabled(isMyTimeline);
adapter.setFiltersEnabled(!isMyTimeline);
adapter.setIgnoredFilterFields(true, false, false, false, false);
}
@Override
protected String[] getSavedStatusesFileArgs() {
final Bundle args = getArguments();
if (args == null) return null;
final long accountId = args.getLong(EXTRA_ACCOUNT_ID, -1);
final long userId = args.getLong(EXTRA_USER_ID, -1);
final String screenName = args.getString(EXTRA_SCREEN_NAME);
return new String[]{AUTHORITY_USER_TIMELINE, "account" + accountId, "user" + userId + "name" + screenName};
}
@Override
protected boolean isMyTimeline() {
final Bundle args = getArguments();
if (args != null) {
final long accountId = args.getLong(EXTRA_ACCOUNT_ID, -1);
final long userId = args.getLong(EXTRA_USER_ID, -1);
final String screenName = args.getString(EXTRA_SCREEN_NAME);
if (accountId == userId || screenName != null
&& screenName.equals(getAccountScreenName(getActivity(), accountId)))
return true;
}
return false;
}
@Override
protected boolean shouldShowAccountColor() {
return false;
}
}

View File

@ -32,167 +32,175 @@ import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.NonNull;
import org.mariotaku.twidere.Constants;
import org.mariotaku.twidere.util.ParseUtils;
import org.mariotaku.twidere.util.PermissionsManager;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ExtensionsListLoader extends AsyncTaskLoader<List<ExtensionsListLoader.ExtensionInfo>> implements
Constants {
Constants {
private PackageIntentReceiver mPackageObserver;
private final InterestingConfigChanges mLastConfig = new InterestingConfigChanges();
private final PackageManager mPackageManager;
private PackageIntentReceiver mPackageObserver;
private final InterestingConfigChanges mLastConfig = new InterestingConfigChanges();
private final PackageManager mPackageManager;
public ExtensionsListLoader(final Context context, final PackageManager pm) {
super(context);
mPackageManager = pm;
}
public ExtensionsListLoader(final Context context, final PackageManager pm) {
super(context);
mPackageManager = pm;
}
@Override
public List<ExtensionInfo> loadInBackground() {
final List<ApplicationInfo> apps = mPackageManager.getInstalledApplications(PackageManager.GET_META_DATA);
final List<ExtensionInfo> extensions = new ArrayList<ExtensionInfo>();
for (final ApplicationInfo info : apps) {
final Bundle meta = info.metaData;
if (meta != null && meta.getBoolean(METADATA_KEY_EXTENSION, false)) {
extensions.add(new ExtensionInfo(info, mPackageManager));
}
}
return extensions;
}
@Override
public List<ExtensionInfo> loadInBackground() {
final List<ApplicationInfo> apps = mPackageManager.getInstalledApplications(PackageManager.GET_META_DATA);
final List<ExtensionInfo> extensions = new ArrayList<ExtensionInfo>();
for (final ApplicationInfo info : apps) {
final Bundle meta = info.metaData;
if (meta != null && meta.getBoolean(METADATA_KEY_EXTENSION, false)) {
extensions.add(new ExtensionInfo(info, mPackageManager));
}
}
return extensions;
}
/**
* Handles a request to completely reset the Loader.
*/
@Override
protected void onReset() {
super.onReset();
/**
* Handles a request to completely reset the Loader.
*/
@Override
protected void onReset() {
super.onReset();
// Ensure the loader is stopped
onStopLoading();
// Ensure the loader is stopped
onStopLoading();
// Stop monitoring for changes.
if (mPackageObserver != null) {
getContext().unregisterReceiver(mPackageObserver);
mPackageObserver = null;
}
}
// Stop monitoring for changes.
if (mPackageObserver != null) {
getContext().unregisterReceiver(mPackageObserver);
mPackageObserver = null;
}
}
/**
* Handles a request to start the Loader.
*/
@Override
protected void onStartLoading() {
/**
* Handles a request to start the Loader.
*/
@Override
protected void onStartLoading() {
// Start watching for changes in the app data.
if (mPackageObserver == null) {
mPackageObserver = new PackageIntentReceiver(this);
}
// Start watching for changes in the app data.
if (mPackageObserver == null) {
mPackageObserver = new PackageIntentReceiver(this);
}
// Has something interesting in the configuration changed since we
// last built the app list?
final boolean configChange = mLastConfig.applyNewConfig(getContext().getResources());
// Has something interesting in the configuration changed since we
// last built the app list?
final boolean configChange = mLastConfig.applyNewConfig(getContext().getResources());
if (takeContentChanged() || configChange) {
// If the data has changed since the last time it was loaded
// or is not currently available, start a load.
forceLoad();
}
}
if (takeContentChanged() || configChange) {
// If the data has changed since the last time it was loaded
// or is not currently available, start a load.
forceLoad();
}
}
/**
* Handles a request to stop the Loader.
*/
@Override
protected void onStopLoading() {
// Attempt to cancel the current load task if possible.
cancelLoad();
}
/**
* Handles a request to stop the Loader.
*/
@Override
protected void onStopLoading() {
// Attempt to cancel the current load task if possible.
cancelLoad();
}
public static class ExtensionInfo implements Comparable<ExtensionInfo> {
public final String[] permissions;
public final String label, description;
public final String pname, settings;
public final Drawable icon;
public static class ExtensionInfo implements Comparable<ExtensionInfo> {
public final String[] permissions;
public final String label, description;
public final String pname, settings;
public final Drawable icon;
ExtensionInfo(final ApplicationInfo info, final PackageManager pm) {
final Bundle meta = info.metaData;
final String permissionString = meta.getString(METADATA_KEY_EXTENSION_PERMISSIONS);
permissions = permissionString != null ? permissionString
.split(PermissionsManager.SEPARATOR_PERMISSION_REGEX) : null;
settings = meta.getString(METADATA_KEY_EXTENSION_SETTINGS);
icon = info.loadIcon(pm);
pname = info.packageName;
label = ParseUtils.parseString(info.loadLabel(pm), pname);
description = ParseUtils.parseString(info.loadDescription(pm));
}
ExtensionInfo(final ApplicationInfo info, final PackageManager pm) {
final Bundle meta = info.metaData;
final String permissionString = meta.getString(METADATA_KEY_EXTENSION_PERMISSIONS);
permissions = permissionString != null ? permissionString
.split(PermissionsManager.SEPARATOR_PERMISSION_REGEX) : null;
settings = meta.getString(METADATA_KEY_EXTENSION_SETTINGS);
icon = info.loadIcon(pm);
pname = info.packageName;
label = ParseUtils.parseString(info.loadLabel(pm), pname);
description = ParseUtils.parseString(info.loadDescription(pm));
}
@Override
public int compareTo(final ExtensionInfo another) {
return label.compareToIgnoreCase(another.label);
}
@Override
public int compareTo(@NonNull final ExtensionInfo another) {
return label.compareToIgnoreCase(another.label);
}
@Override
public String toString() {
return "ExtensionInfo{permission=" + permissions + ", label=" + label + ", description=" + description
+ ", pname=" + pname + ", settings=" + settings + ", icon=" + icon + "}";
}
}
@Override
public String toString() {
return "ExtensionInfo{" +
"permissions=" + Arrays.toString(permissions) +
", label='" + label + '\'' +
", description='" + description + '\'' +
", pname='" + pname + '\'' +
", settings='" + settings + '\'' +
", icon=" + icon +
'}';
}
}
/**
* Helper for determining if the configuration has changed in an interesting
* way so we need to rebuild the app list.
*/
public static class InterestingConfigChanges {
/**
* Helper for determining if the configuration has changed in an interesting
* way so we need to rebuild the app list.
*/
public static class InterestingConfigChanges {
final Configuration mLastConfiguration = new Configuration();
int mLastDensity;
final Configuration mLastConfiguration = new Configuration();
int mLastDensity;
boolean applyNewConfig(final Resources res) {
final int configChanges = mLastConfiguration.updateFrom(res.getConfiguration());
final boolean densityChanged = mLastDensity != res.getDisplayMetrics().densityDpi;
if (densityChanged
|| (configChanges & (ActivityInfo.CONFIG_LOCALE | ActivityInfo.CONFIG_UI_MODE | ActivityInfo.CONFIG_SCREEN_LAYOUT)) != 0) {
mLastDensity = res.getDisplayMetrics().densityDpi;
return true;
}
return false;
}
}
boolean applyNewConfig(final Resources res) {
final int configChanges = mLastConfiguration.updateFrom(res.getConfiguration());
final boolean densityChanged = mLastDensity != res.getDisplayMetrics().densityDpi;
if (densityChanged
|| (configChanges & (ActivityInfo.CONFIG_LOCALE | ActivityInfo.CONFIG_UI_MODE | ActivityInfo.CONFIG_SCREEN_LAYOUT)) != 0) {
mLastDensity = res.getDisplayMetrics().densityDpi;
return true;
}
return false;
}
}
/**
* Helper class to look for interesting changes to the installed apps so
* that the loader can be updated.
*/
public static class PackageIntentReceiver extends BroadcastReceiver {
/**
* Helper class to look for interesting changes to the installed apps so
* that the loader can be updated.
*/
public static class PackageIntentReceiver extends BroadcastReceiver {
final ExtensionsListLoader mLoader;
final ExtensionsListLoader mLoader;
public PackageIntentReceiver(final ExtensionsListLoader loader) {
mLoader = loader;
final IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
filter.addDataScheme("package");
mLoader.getContext().registerReceiver(this, filter);
// Register for events related to sdcard installation.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO) {
final IntentFilter sdFilter = new IntentFilter();
sdFilter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE);
sdFilter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE);
mLoader.getContext().registerReceiver(this, sdFilter);
}
}
public PackageIntentReceiver(final ExtensionsListLoader loader) {
mLoader = loader;
final IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
filter.addDataScheme("package");
mLoader.getContext().registerReceiver(this, filter);
// Register for events related to sdcard installation.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO) {
final IntentFilter sdFilter = new IntentFilter();
sdFilter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE);
sdFilter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE);
mLoader.getContext().registerReceiver(this, sdFilter);
}
}
@Override
public void onReceive(final Context context, final Intent intent) {
// Tell the loader about the change.
mLoader.onContentChanged();
}
}
@Override
public void onReceive(final Context context, final Intent intent) {
// Tell the loader about the change.
mLoader.onContentChanged();
}
}
}

View File

@ -29,24 +29,22 @@ import java.util.List;
public class IntentExtrasStatusesLoader extends ParcelableStatusesLoader {
private final Bundle mExtras;
private final Bundle mExtras;
public IntentExtrasStatusesLoader(final Context context, final Bundle extras, final List<ParcelableStatus> data) {
super(context, data, -1);
mExtras = extras;
}
public IntentExtrasStatusesLoader(final Context context, final Bundle extras, final List<ParcelableStatus> data) {
super(context, data, -1);
mExtras = extras;
}
@Override
public List<ParcelableStatus> loadInBackground() {
final List<ParcelableStatus> data = getData();
if (mExtras != null) {
final List<ParcelableStatus> users = mExtras.getParcelableArrayList(EXTRA_STATUSES);
if (users != null) {
data.addAll(users);
Collections.sort(data);
}
}
return data;
}
@Override
public List<ParcelableStatus> loadInBackground() {
final List<ParcelableStatus> data = getData();
if (mExtras != null && mExtras.containsKey(EXTRA_STATUSES)) {
final List<ParcelableStatus> users = mExtras.getParcelableArrayList(EXTRA_STATUSES);
data.addAll(users);
Collections.sort(data);
}
return data;
}
}

View File

@ -46,7 +46,7 @@ import org.mariotaku.twidere.Constants;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.model.ParcelableAccount;
import org.mariotaku.twidere.task.AsyncTask;
import org.mariotaku.twidere.task.TwidereAsyncTask;
import org.mariotaku.twidere.util.ImageLoaderWrapper;
import org.mariotaku.twidere.util.Utils;
@ -90,7 +90,7 @@ public abstract class AccountsListPreference extends PreferenceCategory implemen
@Override
protected void onAttachedToHierarchy(final PreferenceManager preferenceManager) {
super.onAttachedToHierarchy(preferenceManager);
new LoadAccountsTask(this).execute();
new LoadAccountsTask(this).executeTask();
}
protected abstract void setupPreference(AccountItemPreference preference, ParcelableAccount account);
@ -213,7 +213,7 @@ public abstract class AccountsListPreference extends PreferenceCategory implemen
}
}
private static class LoadAccountsTask extends AsyncTask<Void, Void, List<ParcelableAccount>> {
private static class LoadAccountsTask extends TwidereAsyncTask<Void, Void, List<ParcelableAccount>> {
private final AccountsListPreference mPreference;

View File

@ -284,7 +284,7 @@ public final class TwidereDataProvider extends ContentProvider implements Consta
restoreUnreadItems();
// final GetWritableDatabaseTask task = new
// GetWritableDatabaseTask(context, helper, mDatabaseWrapper);
// task.execute();
// task.executeTask();
return true;
}

View File

@ -44,7 +44,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class CacheUsersStatusesTask extends AsyncTask<Void, Void, Void> implements Constants {
public class CacheUsersStatusesTask extends TwidereAsyncTask<Void, Void, Void> implements Constants {
private final TwitterListResponse<twitter4j.Status>[] all_statuses;
private final ContentResolver resolver;
@ -127,7 +127,7 @@ public class CacheUsersStatusesTask extends AsyncTask<Void, Void, Void> implemen
@Override
public void run() {
new CacheUsersStatusesTask(context, all_statuses).execute();
new CacheUsersStatusesTask(context, all_statuses).executeTask();
}
}
}

View File

@ -25,7 +25,7 @@ import android.content.Intent;
import org.mariotaku.twidere.Constants;
import org.mariotaku.twidere.util.AsyncTaskManager;
public abstract class ManagedAsyncTask<Params, Progress, Result> extends AsyncTask<Params, Progress, Result> implements
public abstract class ManagedAsyncTask<Params, Progress, Result> extends TwidereAsyncTask<Params, Progress, Result> implements
Constants {
private final AsyncTaskManager manager;

View File

@ -23,7 +23,7 @@ import android.os.Handler;
import java.util.concurrent.ExecutorService;
public abstract class AsyncTask<Param, Progress, Result> {
public abstract class TwidereAsyncTask<Param, Progress, Result> {
private Thread mThread;
private final Handler mHandler;
@ -34,19 +34,19 @@ public abstract class AsyncTask<Param, Progress, Result> {
private Param[] mParams;
private Status mStatus = Status.PENDING;
public AsyncTask() {
public TwidereAsyncTask() {
this(new Handler(), null);
}
public AsyncTask(final ExecutorService executor) {
public TwidereAsyncTask(final ExecutorService executor) {
this(new Handler(), executor);
}
public AsyncTask(final Handler handler) {
public TwidereAsyncTask(final Handler handler) {
this(handler, null);
}
public AsyncTask(final Handler handler, final ExecutorService executor) {
public TwidereAsyncTask(final Handler handler, final ExecutorService executor) {
if (handler == null) throw new NullPointerException();
mHandler = handler;
mExecutor = executor;
@ -62,7 +62,7 @@ public abstract class AsyncTask<Param, Progress, Result> {
mStatus = Status.FINISHED;
}
public AsyncTask<Param, Progress, Result> execute(final Param... params) {
public TwidereAsyncTask<Param, Progress, Result> executeTask(final Param... params) {
switch (mStatus) {
case RUNNING:
throw new IllegalStateException("Cannot execute task:" + " the task is already running.");

View File

@ -21,17 +21,20 @@ package org.mariotaku.twidere.util;
import android.os.Handler;
import org.mariotaku.twidere.task.AsyncTask;
import org.mariotaku.twidere.task.ManagedAsyncTask;
import org.mariotaku.twidere.task.TwidereAsyncTask;
import java.util.ArrayList;
import java.util.ConcurrentModificationException;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public final class AsyncTaskManager {
private final CopyOnWriteArrayList<ManagedAsyncTask<?, ?, ?>> mTasks = new CopyOnWriteArrayList<>();
private final Handler mHandler;
private final ExecutorService mExecutor;
private static AsyncTaskManager sInstance;
AsyncTaskManager() {
@ -40,6 +43,7 @@ public final class AsyncTaskManager {
AsyncTaskManager(final Handler handler) {
mHandler = handler;
mExecutor = Executors.newCachedThreadPool();
}
@SafeVarargs
@ -80,7 +84,7 @@ public final class AsyncTaskManager {
public final <T> boolean execute(final int hashCode, final T... params) {
final ManagedAsyncTask<T, ?, ?> task = (ManagedAsyncTask<T, ?, ?>) findTask(hashCode);
if (task != null) {
task.execute(params);
task.executeTask(params);
return true;
}
return false;
@ -112,7 +116,7 @@ public final class AsyncTaskManager {
public boolean isExecuting(final int hashCode) {
final ManagedAsyncTask<?, ?, ?> task = findTask(hashCode);
if (task != null && task.getStatus() == AsyncTask.Status.RUNNING) return true;
if (task != null && task.getStatus() == TwidereAsyncTask.Status.RUNNING) return true;
return false;
}

View File

@ -33,8 +33,8 @@ import org.mariotaku.querybuilder.Expression;
import org.mariotaku.querybuilder.RawItemArray;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.model.ParcelableAccount;
import org.mariotaku.twidere.model.ListResponse;
import org.mariotaku.twidere.model.ParcelableAccount;
import org.mariotaku.twidere.model.ParcelableLocation;
import org.mariotaku.twidere.model.ParcelableMediaUpdate;
import org.mariotaku.twidere.model.ParcelableStatus;
@ -51,7 +51,7 @@ import org.mariotaku.twidere.provider.TweetStore.DirectMessages;
import org.mariotaku.twidere.provider.TweetStore.Mentions;
import org.mariotaku.twidere.provider.TweetStore.Statuses;
import org.mariotaku.twidere.service.BackgroundOperationService;
import org.mariotaku.twidere.task.AsyncTask;
import org.mariotaku.twidere.task.TwidereAsyncTask;
import org.mariotaku.twidere.task.CacheUsersStatusesTask;
import org.mariotaku.twidere.task.ManagedAsyncTask;
@ -130,12 +130,12 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
public void clearNotificationAsync(final int notificationId, final long notificationAccount) {
final ClearNotificationTask task = new ClearNotificationTask(notificationId, notificationAccount);
task.execute();
task.executeTask();
}
public void clearUnreadCountAsync(final int position) {
final ClearUnreadCountTask task = new ClearUnreadCountTask(position);
task.execute();
task.executeTask();
}
public int createBlockAsync(final long accountId, final long user_id) {
@ -272,7 +272,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
for (final ManagedAsyncTask<?, ?, ?> task : mAsyncTaskManager.getTaskSpecList()) {
if (task instanceof CreateFriendshipTask) {
final CreateFriendshipTask create_friendship = (CreateFriendshipTask) task;
if (create_friendship.getStatus() == AsyncTask.Status.RUNNING
if (create_friendship.getStatus() == TwidereAsyncTask.Status.RUNNING
&& create_friendship.getAccountId() == accountId && create_friendship.getUserId() == user_id)
return true;
}
@ -284,7 +284,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
for (final ManagedAsyncTask<?, ?, ?> task : mAsyncTaskManager.getTaskSpecList()) {
if (task instanceof DestroyFriendshipTask) {
final DestroyFriendshipTask create_friendship = (DestroyFriendshipTask) task;
if (create_friendship.getStatus() == AsyncTask.Status.RUNNING
if (create_friendship.getStatus() == TwidereAsyncTask.Status.RUNNING
&& create_friendship.getAccountId() == accountId && create_friendship.getUserId() == user_id)
return true;
}
@ -345,7 +345,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
public void removeUnreadCountsAsync(final int position, final Map<Long, Set<Long>> counts) {
final RemoveUnreadCountsTask task = new RemoveUnreadCountsTask(position, counts);
task.execute();
task.executeTask();
}
public int reportMultiSpam(final long accountId, final long[] user_ids) {
@ -646,7 +646,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
}
final class ClearNotificationTask extends AsyncTask<Void, Void, Integer> {
final class ClearNotificationTask extends TwidereAsyncTask<Void, Void, Integer> {
private final int notificationType;
private final long accountId;
@ -662,7 +662,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
}
final class ClearUnreadCountTask extends AsyncTask<Void, Void, Integer> {
final class ClearUnreadCountTask extends TwidereAsyncTask<Void, Void, Integer> {
private final int position;
ClearUnreadCountTask(final int position) {
@ -803,9 +803,8 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
@Override
protected void onPostExecute(final SingleResponse<ParcelableStatus> result) {
if (result.hasData()) {
final Intent intent = new Intent(BROADCAST_FAVORITE_CHANGED);
final Intent intent = new Intent(BROADCAST_STATUS_FAVORITE_CREATED);
intent.putExtra(EXTRA_STATUS, result.getData());
intent.putExtra(EXTRA_FAVORITED, true);
mContext.sendBroadcast(intent);
mMessagesManager.showOkMessage(R.string.status_favorited, false);
} else {
@ -1326,9 +1325,8 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
@Override
protected void onPostExecute(final SingleResponse<ParcelableStatus> result) {
if (result.hasData()) {
final Intent intent = new Intent(BROADCAST_FAVORITE_CHANGED);
final Intent intent = new Intent(BROADCAST_STATUS_FAVORITE_DESTROYED);
intent.putExtra(EXTRA_STATUS, result.getData());
intent.putExtra(EXTRA_FAVORITED, false);
mContext.sendBroadcast(intent);
mMessagesManager.showInfoMessage(R.string.status_unfavorited, false);
} else {
@ -1888,7 +1886,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
}
final class RemoveUnreadCountsTask extends AsyncTask<Void, Void, Integer> {
final class RemoveUnreadCountsTask extends TwidereAsyncTask<Void, Void, Integer> {
private final int position;
private final Map<Long, Set<Long>> counts;
@ -2246,7 +2244,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
protected void onPreExecute() {
super.onPreExecute();
final StatusListResponse[] array = new StatusListResponse[responses.size()];
new CacheUsersStatusesTask(mContext, responses.toArray(array)).execute();
new CacheUsersStatusesTask(mContext, responses.toArray(array)).executeTask();
}
}

View File

@ -39,7 +39,7 @@ import org.mariotaku.twidere.fragment.support.HomeTimelineFragment;
import org.mariotaku.twidere.fragment.support.InvalidTabFragment;
import org.mariotaku.twidere.fragment.support.MentionsTimelineFragment;
import org.mariotaku.twidere.fragment.support.RetweetsOfMeFragment;
import org.mariotaku.twidere.fragment.support.SearchStatusesFragment;
import org.mariotaku.twidere.fragment.support.StatusesSearchFragment;
import org.mariotaku.twidere.fragment.support.TrendsSuggectionsFragment;
import org.mariotaku.twidere.fragment.support.UserFavoritesFragment;
import org.mariotaku.twidere.fragment.support.UserListTimelineFragment;
@ -83,7 +83,7 @@ public class CustomTabUtils implements Constants {
UserTimelineFragment.class, R.string.users_statuses, R.drawable.ic_action_quote,
CustomTabConfiguration.ACCOUNT_REQUIRED, CustomTabConfiguration.FIELD_TYPE_USER, 5));
CUSTOM_TABS_CONFIGURATION_MAP.put(TAB_TYPE_SEARCH_STATUSES, new CustomTabConfiguration(
SearchStatusesFragment.class, R.string.search_statuses, R.drawable.ic_action_search,
StatusesSearchFragment.class, R.string.search_statuses, R.drawable.ic_action_search,
CustomTabConfiguration.ACCOUNT_REQUIRED, CustomTabConfiguration.FIELD_TYPE_TEXT, R.string.query,
EXTRA_QUERY, 6));
CUSTOM_TABS_CONFIGURATION_MAP.put(TAB_TYPE_LIST_TIMELINE, new CustomTabConfiguration(

View File

@ -64,7 +64,7 @@ public class OAuthPasswordAuthenticator implements Constants {
}
try {
final String oauthToken = requestToken.getToken();
final String authorizationUrl = requestToken.getAuthorizationURL().toString();
final String authorizationUrl = requestToken.getAuthorizationURL();
final String authenticityToken = readAuthenticityTokenFromHtml(client.get(authorizationUrl,
authorizationUrl, null, null).asReader());
if (authenticityToken == null) throw new AuthenticityTokenException();
@ -74,21 +74,15 @@ public class OAuthPasswordAuthenticator implements Constants {
params[1] = new HttpParameter("oauth_token", oauthToken);
params[2] = new HttpParameter("session[username_or_email]", username);
params[3] = new HttpParameter("session[password]", password);
final String oAuthAuthorizationUrl = conf.getOAuthAuthorizationURL().toString();
final String oAuthAuthorizationUrl = conf.getOAuthAuthorizationURL();
final String oauthPin = readOAuthPINFromHtml(client.post(oAuthAuthorizationUrl, oAuthAuthorizationUrl,
params).asReader());
if (isEmpty(oauthPin)) throw new WrongUserPassException();
return twitter.getOAuthAccessToken(requestToken, oauthPin);
} catch (final IOException e) {
throw new AuthenticationException(e);
} catch (final TwitterException e) {
throw new AuthenticationException(e);
} catch (final NullPointerException e) {
throw new AuthenticationException(e);
} catch (final XmlPullParserException e) {
} catch (final IOException | TwitterException | NullPointerException | XmlPullParserException e) {
throw new AuthenticationException(e);
}
}
}
public static String readAuthenticityTokenFromHtml(final Reader in) throws IOException, XmlPullParserException {
final XmlPullParserFactory f = XmlPullParserFactory.newInstance();

View File

@ -2708,15 +2708,13 @@ public final class Utils implements Constants, TwitterConstants {
if (!selection_args.isEmpty()) {
builder.append(" OR ");
}
builder.append("(SELECT " + user_id + " IN (SELECT " + Filters.Users.USER_ID + " FROM "
+ Filters.Users.TABLE_NAME + "))");
builder.append("(SELECT ").append(user_id).append(" IN (SELECT ").append(Users.USER_ID).append(" FROM ").append(Users.TABLE_NAME).append("))");
}
if (retweeted_by_id > 0) {
if (!selection_args.isEmpty()) {
builder.append(" OR ");
}
builder.append("(SELECT " + retweeted_by_id + " IN (SELECT " + Filters.Users.USER_ID + " FROM "
+ Filters.Users.TABLE_NAME + "))");
builder.append("(SELECT ").append(retweeted_by_id).append(" IN (SELECT ").append(Users.USER_ID).append(" FROM ").append(Users.TABLE_NAME).append("))");
}
if (source != null) {
if (!selection_args.isEmpty()) {

View File

@ -59,14 +59,14 @@ public class ContentResolverUtils {
final StringBuilder where = new StringBuilder(in_column + " IN(" + ArrayUtils.toStringForSQL(block)
+ ")");
if (!isEmpty(extra_where)) {
where.append("AND " + extra_where);
where.append("AND ").append(extra_where);
}
rows_deleted += resolver.delete(uri, where.toString(), block);
} else {
final StringBuilder where = new StringBuilder(in_column + " IN("
+ ArrayUtils.toString(block, ',', true) + ")");
if (!isEmpty(extra_where)) {
where.append("AND " + extra_where);
where.append("AND ").append(extra_where);
}
rows_deleted += resolver.delete(uri, where.toString(), null);
}

View File

@ -21,6 +21,7 @@ package org.mariotaku.twidere.view;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.TypedArray;
import android.graphics.PorterDuff.Mode;
import android.graphics.drawable.Drawable;
@ -33,20 +34,20 @@ import org.mariotaku.twidere.R;
/**
* Created by mariotaku on 14/11/20.
*/
public class CardActionTextView extends TextView {
public class ActionIconTextView extends TextView {
private int mColor;
private int mActivatedColor;
public CardActionTextView(Context context) {
public ActionIconTextView(Context context) {
this(context, null);
}
public CardActionTextView(Context context, AttributeSet attrs) {
public ActionIconTextView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public CardActionTextView(Context context, AttributeSet attrs, int defStyleAttr) {
public ActionIconTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
final TypedArray defaultValues = context.obtainStyledAttributes(
new int[]{android.R.attr.colorActivatedHighlight});
@ -64,7 +65,10 @@ public class CardActionTextView extends TextView {
}
public int getColor() {
return mColor != 0 ? mColor : getCurrentTextColor();
if (mColor != 0) return mColor;
final ColorStateList colors = getTextColors();
if (colors != null) return colors.getDefaultColor();
return getCurrentTextColor();
}
@Override

View File

@ -1,119 +0,0 @@
/*
* Twidere - Twitter client for Android
*
* Copyright (C) 2012-2014 Mariotaku Lee <mariotaku.lee@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.mariotaku.twidere.view;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.support.annotation.IdRes;
import android.support.v4.view.ViewCompat;
import android.util.AttributeSet;
import android.view.Gravity;
import android.widget.FrameLayout;
import android.widget.ImageView;
public class ProfileImageBannerLayout extends ExtendedFrameLayout {
@IdRes
public static final int VIEW_ID_PROFILE_IMAGE = 0x10000001;
@IdRes
public static final int VIEW_ID_PROFILE_BANNER = 0x10000002;
private static final double PROFILE_IMAGE_WIDTH_FACTOR = 0.1425;
private static final double PROFILE_IMAGE_TOP_MARGIN_FACTOR = 0.0875;
private final int mBorderWidth;
private final ImageView mProfileBannerImageView;
private final ImageView mProfileImageView;
public ProfileImageBannerLayout(final Context context) {
this(context, null);
}
public ProfileImageBannerLayout(final Context context, final AttributeSet attrs) {
this(context, attrs, 0);
}
public ProfileImageBannerLayout(final Context context, final AttributeSet attrs, final int defStyle) {
super(context, attrs, defStyle);
mBorderWidth = (int) (getResources().getDisplayMetrics().density * 2);
mProfileBannerImageView = new ProfileBannerImageView(context);
mProfileBannerImageView.setId(VIEW_ID_PROFILE_BANNER);
addView(mProfileBannerImageView, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
mProfileImageView = new ProfileImageViewInternal(context, mBorderWidth);
mProfileImageView.setId(VIEW_ID_PROFILE_IMAGE);
addView(mProfileImageView, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,
Gravity.CENTER_HORIZONTAL));
}
public ImageView getProfileBannerImageView() {
return mProfileBannerImageView;
}
public ImageView getProfileImageView() {
return mProfileImageView;
}
@Override
protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
final int width = MeasureSpec.getSize(widthMeasureSpec), height = width / 2;
setMeasuredDimension(width, height);
super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY));
if (width > 0) {
final int profile_size = (int) (width * PROFILE_IMAGE_WIDTH_FACTOR);
final LayoutParams profile_lp = (FrameLayout.LayoutParams) mProfileImageView.getLayoutParams();
profile_lp.width = profile_size + mBorderWidth * 2;
profile_lp.height = profile_size + mBorderWidth * 2;
profile_lp.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL;
profile_lp.topMargin = (int) (height * PROFILE_IMAGE_TOP_MARGIN_FACTOR) - mBorderWidth;
mProfileImageView.setLayoutParams(profile_lp);
}
}
private static class ProfileImageViewInternal extends ImageView {
private final Paint mWhitePaint, mBlackPaint;
private final int mPaddings;
private ProfileImageViewInternal(final Context context, final int padding) {
super(context, null, 0);
ViewCompat.setLayerType(this, LAYER_TYPE_SOFTWARE, null);
mWhitePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mWhitePaint.setColor(Color.WHITE);
mBlackPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mBlackPaint.setColor(Color.BLACK);
mPaddings = padding;
setPadding(padding, padding, padding, padding);
}
@Override
protected void onDraw(final Canvas canvas) {
canvas.drawColor(Color.WHITE);
final int width = getWidth(), height = getHeight();
if (width > 0 && height > 0) {
canvas.drawRect(mPaddings, mPaddings, width - mPaddings, height - mPaddings, mBlackPaint);
canvas.drawRect(mPaddings / 2, mPaddings / 2, width - mPaddings / 2, height - mPaddings / 2,
mWhitePaint);
}
super.onDraw(canvas);
}
}
}

View File

@ -19,6 +19,7 @@ package twitter4j;
import twitter4j.http.HttpParameter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
@ -518,9 +519,7 @@ public final class Query {
appendParameter("result_type", resultType, params);
params.add(WITH_TWITTER_USER_ID);
if (extraParams != null) {
for (final HttpParameter param : extraParams) {
params.add(param);
}
Collections.addAll(params, extraParams);
}
final HttpParameter[] paramArray = new HttpParameter[params.size()];
return params.toArray(paramArray);

View File

@ -39,10 +39,8 @@ public class AccessToken extends OAuthToken {
} catch (final IndexOutOfBoundsException e) {
throw new IllegalArgumentException("Invalid access token format.");
}
if (sUserId != null) {
userId = Long.parseLong(sUserId);
}
}
userId = Long.parseLong(sUserId);
}
AccessToken(final HttpResponse res) throws TwitterException {
this(res.asString());

View File

@ -18,6 +18,7 @@ import twitter4j.UserList;
import twitter4j.conf.Configuration;
import twitter4j.http.HttpResponse;
import java.util.Arrays;
import java.util.Date;
class ActivityJSONImpl extends TwitterResponseImpl implements Activity {
@ -119,16 +120,26 @@ class ActivityJSONImpl extends TwitterResponseImpl implements Activity {
return targetUsers;
}
@Override
public String toString() {
return "ActivityJSONImpl{action=" + action + ", createdAt=" + createdAt + ", sources=" + sources
+ ", targetUsers=" + targetUsers + ", targetObjects=" + targetObjectStatuses + ", targetStatuses="
+ targetStatuses + ", maxPosition=" + maxPosition + ", minPosition=" + minPosition
+ ", targetObjectsSize=" + targetObjectsSize + ", targetsSize=" + targetsSize + ", sourcesSize="
+ sourcesSize + "}";
}
@Override
public String toString() {
return "ActivityJSONImpl{" +
"action=" + action +
", createdAt=" + createdAt +
", sources=" + Arrays.toString(sources) +
", targetUsers=" + Arrays.toString(targetUsers) +
", targetObjectStatuses=" + Arrays.toString(targetObjectStatuses) +
", targetStatuses=" + Arrays.toString(targetStatuses) +
", targetUserLists=" + Arrays.toString(targetUserLists) +
", targetObjectUserLists=" + Arrays.toString(targetObjectUserLists) +
", maxPosition=" + maxPosition +
", minPosition=" + minPosition +
", targetObjectsSize=" + targetObjectsSize +
", targetsSize=" + targetsSize +
", sourcesSize=" + sourcesSize +
'}';
}
final void init(final JSONObject json) throws TwitterException {
final void init(final JSONObject json) throws TwitterException {
try {
action = Action.fromString(getRawString("action", json));
maxPosition = getLong("max_position", json);

View File

@ -36,6 +36,7 @@ import twitter4j.UserMentionEntity;
import twitter4j.conf.Configuration;
import twitter4j.http.HttpResponse;
import java.util.Arrays;
import java.util.Date;
/**
@ -186,16 +187,27 @@ import java.util.Date;
return (int) id;
}
@Override
public String toString() {
return "DirectMessageJSONImpl{id=" + id + ", text=" + text + ", rawText=" + rawText + ", senderId=" + senderId
+ ", recipientId=" + recipientId + ", createdAt=" + createdAt + ", senderScreenName="
+ senderScreenName + ", recipientScreenName=" + recipientScreenName + ", userMentionEntities="
+ userMentionEntities + ", urlEntities=" + urlEntities + ", hashtagEntities=" + hashtagEntities
+ ", sender=" + sender + ", recipient=" + recipient + "}";
}
@Override
public String toString() {
return "DirectMessageJSONImpl{" +
"id=" + id +
", text='" + text + '\'' +
", rawText='" + rawText + '\'' +
", senderId=" + senderId +
", recipientId=" + recipientId +
", createdAt=" + createdAt +
", senderScreenName='" + senderScreenName + '\'' +
", recipientScreenName='" + recipientScreenName + '\'' +
", userMentionEntities=" + Arrays.toString(userMentionEntities) +
", urlEntities=" + Arrays.toString(urlEntities) +
", hashtagEntities=" + Arrays.toString(hashtagEntities) +
", mediaEntities=" + Arrays.toString(mediaEntities) +
", sender=" + sender +
", recipient=" + recipient +
'}';
}
private void init(final JSONObject json) throws TwitterException {
private void init(final JSONObject json) throws TwitterException {
id = getLong("id", json);
text = getUnescapedString("text", json);
rawText = getRawString("text", json);

View File

@ -194,10 +194,18 @@ import java.util.Arrays;
return result;
}
@Override
public String toString() {
return "QueryResultJSONImpl{" + "sinceId=" + sinceId + ", maxId=" + maxId + ", refreshUrl='" + refreshUrl
+ '\'' + ", resultsPerPage=" + resultsPerPage + ", warning='" + warning + '\'' + ", completedIn="
+ completedIn + ", page=" + page + ", query='" + query + '\'' + ", statuses=" + statuses + '}';
}
@Override
public String toString() {
return "QueryResultJSONImpl{" +
"sinceId=" + sinceId +
", maxId=" + maxId +
", refreshUrl='" + refreshUrl + '\'' +
", resultsPerPage=" + resultsPerPage +
", warning='" + warning + '\'' +
", completedIn=" + completedIn +
", page=" + page +
", query='" + query + '\'' +
", statuses=" + Arrays.toString(statuses) +
'}';
}
}

View File

@ -0,0 +1,28 @@
<!--
Copyright 2013 The Android Open Source Project
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.
-->
<LinearLayout style="?android:actionBarStyle"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="?android:attr/dividerVertical"
android:dividerPadding="12dp"
android:orientation="horizontal"
android:showDividers="middle">
<include layout="@layout/include_cancel_button" />
<include layout="@layout/include_done_button" />
</LinearLayout>

View File

@ -0,0 +1,316 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:layout_below="@+id/done_bar"
android:animateLayoutChanges="true">
<ScrollView
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="0dp"
app:cardElevation="0dp"
app:cardPreventCornerOverlap="false"
app:cardUseCompatPadding="false">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="@dimen/element_spacing_normal">
<org.mariotaku.twidere.view.ForegroundImageView
android:id="@+id/profile_image"
android:layout_width="@dimen/element_size_mlarge"
android:layout_height="@dimen/element_size_mlarge"
android:layout_gravity="center"
android:foreground="?android:selectableItemBackground"
android:scaleType="centerCrop"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/element_spacing_normal"
android:paddingTop="@dimen/element_spacing_normal"
android:text="@string/profile_image"
android:textAllCaps="true"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="?android:textColorPrimary"
android:textStyle="bold"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:splitMotionEvents="false">
<org.mariotaku.twidere.view.ActionIconTextView
android:id="@+id/profile_image_camera"
style="?android:borderlessButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:drawableLeft="@drawable/ic_action_camera"
android:paddingBottom="0dp"
android:paddingLeft="@dimen/element_spacing_normal"
android:paddingRight="@dimen/element_spacing_normal"
android:paddingTop="0dp"
android:text="@string/photo"/>
<org.mariotaku.twidere.view.ActionIconTextView
android:id="@+id/profile_image_gallery"
style="?android:borderlessButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:drawableLeft="@drawable/ic_action_gallery"
android:paddingBottom="0dp"
android:paddingLeft="@dimen/element_spacing_normal"
android:paddingRight="@dimen/element_spacing_normal"
android:paddingTop="0dp"
android:text="@string/gallery"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</android.support.v7.widget.CardView>
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/element_spacing_normal"
app:cardCornerRadius="0dp"
app:cardElevation="0dp"
app:cardPreventCornerOverlap="false"
app:cardUseCompatPadding="false">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="@dimen/element_spacing_normal">
<org.mariotaku.twidere.view.ForegroundImageView
android:id="@+id/profile_banner"
android:layout_width="@dimen/element_size_mlarge"
android:layout_height="@dimen/element_size_mlarge"
android:layout_gravity="center"
android:foreground="?android:selectableItemBackground"
android:scaleType="centerCrop"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/element_spacing_normal"
android:paddingTop="@dimen/element_spacing_normal"
android:text="@string/profile_banner"
android:textAllCaps="true"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="?android:textColorPrimary"
android:textStyle="bold"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:splitMotionEvents="false">
<org.mariotaku.twidere.view.ActionIconTextView
android:id="@+id/profile_banner_gallery"
style="?android:borderlessButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:drawableLeft="@drawable/ic_action_gallery"
android:paddingBottom="0dp"
android:paddingLeft="@dimen/element_spacing_normal"
android:paddingRight="@dimen/element_spacing_normal"
android:paddingTop="0dp"
android:text="@string/gallery"/>
<org.mariotaku.twidere.view.ActionIconTextView
android:id="@+id/profile_banner_remove"
style="?android:borderlessButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:drawableLeft="@drawable/ic_action_cancel"
android:paddingBottom="0dp"
android:paddingLeft="@dimen/element_spacing_normal"
android:paddingRight="@dimen/element_spacing_normal"
android:paddingTop="0dp"
android:text="@string/remove"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</android.support.v7.widget.CardView>
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/element_spacing_normal"
app:cardCornerRadius="0dp"
app:cardElevation="0dp"
app:cardPreventCornerOverlap="false"
app:cardUseCompatPadding="false">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="@dimen/element_spacing_normal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/element_spacing_small"
android:text="@string/name"
android:textAllCaps="true"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="?android:textColorPrimary"
android:textStyle="bold"/>
<EditText
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:inputType="textPersonName"
android:maxLength="20"
android:singleLine="true"
android:textAppearance="?android:attr/textAppearanceMedium"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/element_spacing_small"
android:text="@string/description"
android:textAllCaps="true"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="?android:textColorPrimary"
android:textStyle="bold"/>
<EditText
android:id="@+id/description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:inputType="textMultiLine"
android:maxLength="160"
android:minLines="4"
android:singleLine="false"
android:textAppearance="?android:attr/textAppearanceMedium"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/element_spacing_small"
android:singleLine="true"
android:text="@string/location"
android:textAllCaps="true"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="?android:textColorPrimary"
android:textStyle="bold"/>
<EditText
android:id="@+id/location"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPostalAddress"
android:maxLength="30"
android:singleLine="true"
android:textAppearance="?android:attr/textAppearanceMedium"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/element_spacing_small"
android:singleLine="true"
android:text="@string/url"
android:textAllCaps="true"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="?android:textColorPrimary"
android:textStyle="bold"/>
<EditText
android:id="@+id/url"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textUri"
android:maxLength="100"
android:singleLine="true"
android:textAppearance="?android:attr/textAppearanceMedium"/>
</LinearLayout>
</android.support.v7.widget.CardView>
</LinearLayout>
</ScrollView>
<FrameLayout
android:id="@+id/progress_container"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ProgressBar
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
</FrameLayout>
</FrameLayout>
<org.mariotaku.twidere.view.ActionBarThemedContainer
android:id="@+id/done_bar"
style="?android:actionBarStyle"
android:layout_width="match_parent"
android:layout_height="?android:actionBarSize"
android:layout="@layout/actionbar_custom_view_done_cancel"/>
<View
android:id="@+id/actionbar_overlay"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:layout_below="@+id/done_bar"/>
</RelativeLayout>

View File

@ -29,7 +29,7 @@
android:layout_marginTop="@dimen/element_spacing_small"
android:scaleType="centerCrop"/>
<org.mariotaku.twidere.view.CardActionTextView
<org.mariotaku.twidere.view.ActionIconTextView
android:id="@+id/reply_retweet_status"
android:layout_width="match_parent"
android:layout_height="@dimen/element_size_small"
@ -186,7 +186,7 @@
android:gravity="center_vertical"
android:orientation="horizontal">
<org.mariotaku.twidere.view.CardActionTextView
<org.mariotaku.twidere.view.ActionIconTextView
android:id="@+id/reply_count"
style="?cardActionButtonStyle"
android:layout_width="wrap_content"
@ -199,7 +199,7 @@
android:textAppearance="?android:textAppearanceSmall"
app:activatedColor="@color/highlight_reply"/>
<org.mariotaku.twidere.view.CardActionTextView
<org.mariotaku.twidere.view.ActionIconTextView
android:id="@+id/retweet_count"
style="?cardActionButtonStyle"
android:layout_width="wrap_content"
@ -212,7 +212,7 @@
android:textAppearance="?android:textAppearanceSmall"
app:activatedColor="@color/highlight_retweet"/>
<org.mariotaku.twidere.view.CardActionTextView
<org.mariotaku.twidere.view.ActionIconTextView
android:id="@+id/favorite_count"
style="?cardActionButtonStyle"
android:layout_width="wrap_content"

View File

@ -18,7 +18,7 @@
android:layout_marginLeft="@dimen/element_spacing_normal"
android:scaleType="centerCrop"/>
<org.mariotaku.twidere.view.CardActionTextView
<org.mariotaku.twidere.view.ActionIconTextView
android:id="@+id/reply_retweet_status"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -153,7 +153,7 @@
android:orientation="horizontal">
<org.mariotaku.twidere.view.CardActionTextView
<org.mariotaku.twidere.view.ActionIconTextView
android:id="@+id/reply_count"
style="?cardActionButtonStyle"
android:layout_width="wrap_content"
@ -166,7 +166,7 @@
android:textAppearance="?android:textAppearanceSmall"
app:activatedColor="@color/highlight_reply"/>
<org.mariotaku.twidere.view.CardActionTextView
<org.mariotaku.twidere.view.ActionIconTextView
android:id="@+id/retweet_count"
style="?cardActionButtonStyle"
android:layout_width="wrap_content"
@ -179,7 +179,7 @@
android:textAppearance="?android:textAppearanceSmall"
app:activatedColor="@color/highlight_retweet"/>
<org.mariotaku.twidere.view.CardActionTextView
<org.mariotaku.twidere.view.ActionIconTextView
android:id="@+id/favorite_count"
style="?cardActionButtonStyle"
android:layout_width="wrap_content"

View File

@ -1,134 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<ScrollView
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<org.mariotaku.twidere.view.ProfileImageBannerLayout
android:id="@+id/profile_image_banner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
<org.mariotaku.twidere.view.ColorLabelLinearLayout
android:id="@+id/profile_name_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:clickable="true"
android:gravity="center_vertical"
android:orientation="vertical"
android:padding="8dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/name"
android:textAppearance="?android:attr/textAppearanceMedium"/>
<EditText
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:inputType="textPersonName"
android:maxLength="20"
android:singleLine="true"
android:textAppearance="?android:attr/textAppearanceMedium"/>
</org.mariotaku.twidere.view.ColorLabelLinearLayout>
</FrameLayout>
<LinearLayout
android:id="@+id/description_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="4dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/description"
android:textAppearance="?android:attr/textAppearanceMedium"/>
<EditText
android:id="@+id/description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:inputType="textMultiLine"
android:maxLength="160"
android:minLines="4"
android:singleLine="false"
android:textAppearance="?android:attr/textAppearanceMedium"/>
</LinearLayout>
<LinearLayout
android:id="@+id/location_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="4dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:text="@string/location"
android:textAppearance="?android:attr/textAppearanceMedium"/>
<EditText
android:id="@+id/location"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPostalAddress"
android:maxLength="30"
android:singleLine="true"
android:textAppearance="?android:attr/textAppearanceMedium"/>
</LinearLayout>
<LinearLayout
android:id="@+id/url_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="4dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:text="@string/url"
android:textAppearance="?android:attr/textAppearanceMedium"/>
<EditText
android:id="@+id/url"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textUri"
android:maxLength="100"
android:singleLine="true"
android:textAppearance="?android:attr/textAppearanceMedium"/>
</LinearLayout>
</LinearLayout>
</ScrollView>
<ProgressBar
android:id="@+id/progress"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
</merge>

View File

@ -31,7 +31,6 @@
android:layout_height="@dimen/element_size_normal"
android:textColor="?android:textColorSecondary"
app:pstsTabBackground="?android:selectableItemBackground"
app:pstsShouldExpand="true"
app:pstsTabPaddingLeftRight="@dimen/element_spacing_large"/>
<android.support.v4.view.ViewPager

View File

@ -11,38 +11,6 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<View
android:layout_width="match_parent"
android:layout_height="@dimen/element_spacing_xsmall"
android:layout_above="@id/profile_name_container"
android:background="@drawable/shadow_top"/>
<!--<View-->
<!--android:id="@+id/profile_layer_bottom"-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="match_parent"-->
<!--android:layout_alignBottom="@id/card"-->
<!--android:layout_alignTop="@id/profile_name_container"/>-->
<org.mariotaku.twidere.view.CircularImageView
android:id="@+id/profile_image"
style="?profileImageStyleLarge"
android:layout_width="@dimen/icon_size_user_profile"
android:layout_height="@dimen/icon_size_user_profile"
android:layout_alignBottom="@id/profile_name_container"
android:layout_marginLeft="@dimen/element_spacing_normal"
android:contentDescription="@string/profile_image"
android:src="@drawable/ic_profile_image_default"/>
<ImageView
android:id="@+id/profile_type"
style="@style/Widget.ProfileType"
android:layout_width="@dimen/icon_size_profile_type_user_profile"
android:layout_height="@dimen/icon_size_profile_type_user_profile"
android:layout_alignBottom="@id/profile_image"
android:layout_alignRight="@id/profile_image"
android:scaleType="fitCenter"/>
<org.mariotaku.twidere.view.ColorLabelRelativeLayout
android:id="@+id/profile_name_container"
android:layout_width="match_parent"
@ -91,6 +59,12 @@
</org.mariotaku.twidere.view.ColorLabelRelativeLayout>
<View
android:layout_width="match_parent"
android:layout_height="@dimen/element_spacing_xsmall"
android:layout_above="@id/profile_name_container"
android:background="@drawable/shadow_top"/>
<android.support.v7.widget.CardView
android:id="@+id/card"
android:layout_width="match_parent"
@ -311,6 +285,25 @@
</android.support.v7.widget.CardView>
<org.mariotaku.twidere.view.CircularImageView
android:id="@+id/profile_image"
style="?profileImageStyleLarge"
android:layout_width="@dimen/icon_size_user_profile"
android:layout_height="@dimen/icon_size_user_profile"
android:layout_alignBottom="@id/profile_name_container"
android:layout_marginLeft="@dimen/element_spacing_normal"
android:contentDescription="@string/profile_image"
android:src="@drawable/ic_profile_image_default"/>
<ImageView
android:id="@+id/profile_type"
style="@style/Widget.ProfileType"
android:layout_width="@dimen/icon_size_profile_type_user_profile"
android:layout_height="@dimen/icon_size_profile_type_user_profile"
android:layout_alignBottom="@id/profile_image"
android:layout_alignRight="@id/profile_image"
android:scaleType="fitCenter"/>
<org.mariotaku.twidere.view.AssetFontTextView
android:id="@+id/uucky_footer"
android:layout_width="match_parent"

View File

@ -0,0 +1,35 @@
<!--
Copyright 2013 The Android Open Source Project
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.
-->
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
style="?android:actionButtonStyle"
android:id="@+id/actionbar_cancel"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1">
<org.mariotaku.twidere.view.ActionIconTextView
style="?android:actionBarTabTextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingRight="20dp"
android:drawableLeft="@drawable/ic_action_cancel"
android:drawablePadding="8dp"
android:gravity="center_vertical"
android:text="@android:string/cancel"/>
</FrameLayout>

View File

@ -0,0 +1,36 @@
<!--
Copyright 2013 The Android Open Source Project
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.
-->
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
style="?android:actionButtonStyle"
android:id="@+id/actionbar_done"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1">
<org.mariotaku.twidere.view.ActionIconTextView
style="?android:actionBarTabTextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingRight="20dp"
android:drawableLeft="@drawable/ic_action_ok"
android:drawablePadding="8dp"
android:gravity="center_vertical"
android:text="@android:string/ok"/>
</FrameLayout>

View File

@ -680,5 +680,8 @@
<string name="listed">Listed</string>
<string name="state_blocking">Blocking</string>
<string name="load_more">Load more</string>
<string name="photo">Photo</string>
<string name="gallery">Gallery</string>
<string name="remove">Remove</string>
</resources>

View File

@ -24,8 +24,6 @@
<!-- Window attributes -->
<!--<item name="android:windowAnimationStyle">@style/Animation.Twidere.Activity</item>-->
<!--<item name="android:windowBackground">@color/bg_color_dark</item>-->
<item name="android:windowActionBarOverlay">true</item>
<item name="android:windowActionModeOverlay">true</item>
<!-- ActionBar styles -->
<item name="android:actionBarStyle">@android:style/Widget.DeviceDefault.ActionBar.Solid
@ -71,8 +69,6 @@
<!-- Window attributes -->
<!--<item name="android:windowAnimationStyle">@style/Animation.Twidere.Activity</item>-->
<!--<item name="android:windowBackground">@color/bg_color_light</item>-->
<item name="android:windowActionBarOverlay">true</item>
<item name="android:windowActionModeOverlay">true</item>
<!-- ActionBar styles -->
<!--<item name="android:actionBarStyle">@style/Widget.Twidere.ActionBar.Light.DarkActionBar</item>-->
@ -250,8 +246,6 @@
<style name="Theme.Twidere.Viewer" parent="Theme.Base">
<!-- Window attributes -->
<item name="android:windowActionBarOverlay">true</item>
<item name="android:windowActionModeOverlay">true</item>
<!--<item name="android:windowAnimationStyle">@style/Animation.Twidere.Activity</item>-->
<item name="android:windowBackground">@android:color/black</item>
@ -336,8 +330,6 @@
</style>
<style name="Theme.Test" parent="Theme.Base">
<item name="android:windowActionBarOverlay">true</item>
<item name="android:windowActionModeOverlay">true</item>
</style>
<style name="Theme.Nyan" parent="Theme.Base.NoActionBar">