mirror of
https://github.com/TwidereProject/Twidere-Android
synced 2025-02-17 04:00:48 +01:00
redesigned profile editor screen
continue migrating statuses list to new implementation
This commit is contained in:
parent
c77c655f59
commit
55c33033b1
@ -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";
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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: {
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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";
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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) {
|
||||
|
@ -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() {
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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};
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
@ -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;
|
||||
|
@ -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};
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
// }
|
||||
|
||||
}
|
||||
|
@ -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};
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
@ -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};
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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.");
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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(
|
||||
|
@ -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();
|
||||
|
@ -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()) {
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@ -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);
|
||||
|
@ -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());
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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) +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
@ -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>
|
316
twidere/src/main/res/layout/activity_user_profile_editor.xml
Normal file
316
twidere/src/main/res/layout/activity_user_profile_editor.xml
Normal 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>
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -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>
|
@ -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
|
||||
|
@ -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"
|
||||
|
35
twidere/src/main/res/layout/include_cancel_button.xml
Normal file
35
twidere/src/main/res/layout/include_cancel_button.xml
Normal 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>
|
36
twidere/src/main/res/layout/include_done_button.xml
Normal file
36
twidere/src/main/res/layout/include_done_button.xml
Normal 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>
|
@ -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>
|
@ -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">
|
||||
|
Loading…
x
Reference in New Issue
Block a user