diff --git a/libraries/MenuComponent b/libraries/MenuComponent index e565ee636..42c1ffdeb 160000 --- a/libraries/MenuComponent +++ b/libraries/MenuComponent @@ -1 +1 @@ -Subproject commit e565ee636888197425aabf17c46a398544ba6dc3 +Subproject commit 42c1ffdeb547e4caa9a3a10249912b350453346e diff --git a/settings.gradle b/settings.gradle index 7bc181130..c5baa09ad 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,4 +1,5 @@ -include ':twidere', ':SlidingMenu', ':DragSortListView', ':MenuComponent', ':RefreshNow' +include ':twidere', ':twidere.wear' +include ':SlidingMenu', ':DragSortListView', ':MenuComponent', ':RefreshNow' project(':SlidingMenu').projectDir = file('libraries/SlidingMenu/library') project(':DragSortListView').projectDir = file('libraries/DragSortListView/library') diff --git a/twidere.wear/.gitignore b/twidere.wear/.gitignore new file mode 100644 index 000000000..796b96d1c --- /dev/null +++ b/twidere.wear/.gitignore @@ -0,0 +1 @@ +/build diff --git a/twidere.wear/build.gradle b/twidere.wear/build.gradle new file mode 100644 index 000000000..a8d740d42 --- /dev/null +++ b/twidere.wear/build.gradle @@ -0,0 +1,32 @@ +apply plugin: 'com.android.application' + + +android { + compileSdkVersion 20 + buildToolsVersion "21.0.2" + + defaultConfig { + applicationId "org.mariotaku.twidere" + minSdkVersion 20 + targetSdkVersion 20 + versionCode 1 + versionName "1.0" + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_7 + targetCompatibility JavaVersion.VERSION_1_7 + } + buildTypes { + release { + runProguard false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + compile fileTree(dir: 'libs', include: ['*.jar']) + compile 'com.google.android.support:wearable:1.0.0' + compile 'com.google.android.gms:play-services-wearable:6.1.11' +} diff --git a/twidere.wear/proguard-rules.pro b/twidere.wear/proguard-rules.pro new file mode 100644 index 000000000..bb65c6fe8 --- /dev/null +++ b/twidere.wear/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /Applications/Android Studio.app/sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/twidere.wear/src/main/AndroidManifest.xml b/twidere.wear/src/main/AndroidManifest.xml new file mode 100644 index 000000000..8577ea6ff --- /dev/null +++ b/twidere.wear/src/main/AndroidManifest.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + diff --git a/twidere.wear/src/main/java/org/mariotaku/twidere/extension/wear/MainActivity.java b/twidere.wear/src/main/java/org/mariotaku/twidere/extension/wear/MainActivity.java new file mode 100644 index 000000000..7ff41bdcb --- /dev/null +++ b/twidere.wear/src/main/java/org/mariotaku/twidere/extension/wear/MainActivity.java @@ -0,0 +1,24 @@ +package org.mariotaku.twidere.extension.wear; + +import android.app.Activity; +import android.os.Bundle; +import android.support.wearable.view.WatchViewStub; +import android.widget.TextView; + +public class MainActivity extends Activity { + + private TextView mTextView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + final WatchViewStub stub = (WatchViewStub) findViewById(R.id.watch_view_stub); + stub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() { + @Override + public void onLayoutInflated(WatchViewStub stub) { + mTextView = (TextView) stub.findViewById(R.id.text); + } + }); + } +} diff --git a/twidere.wear/src/main/res/drawable-hdpi/ic_launcher.png b/twidere.wear/src/main/res/drawable-hdpi/ic_launcher.png new file mode 100644 index 000000000..55621cc10 Binary files /dev/null and b/twidere.wear/src/main/res/drawable-hdpi/ic_launcher.png differ diff --git a/twidere.wear/src/main/res/drawable-mdpi/ic_launcher.png b/twidere.wear/src/main/res/drawable-mdpi/ic_launcher.png new file mode 100644 index 000000000..11ec2068b Binary files /dev/null and b/twidere.wear/src/main/res/drawable-mdpi/ic_launcher.png differ diff --git a/twidere.wear/src/main/res/drawable-xhdpi/ic_launcher.png b/twidere.wear/src/main/res/drawable-xhdpi/ic_launcher.png new file mode 100644 index 000000000..7c02b784a Binary files /dev/null and b/twidere.wear/src/main/res/drawable-xhdpi/ic_launcher.png differ diff --git a/twidere.wear/src/main/res/drawable-xxhdpi/ic_launcher.png b/twidere.wear/src/main/res/drawable-xxhdpi/ic_launcher.png new file mode 100644 index 000000000..915d91441 Binary files /dev/null and b/twidere.wear/src/main/res/drawable-xxhdpi/ic_launcher.png differ diff --git a/twidere.wear/src/main/res/layout/activity_main.xml b/twidere.wear/src/main/res/layout/activity_main.xml new file mode 100644 index 000000000..0d83a6897 --- /dev/null +++ b/twidere.wear/src/main/res/layout/activity_main.xml @@ -0,0 +1,13 @@ + + + diff --git a/twidere.wear/src/main/res/layout/rect_activity_main.xml b/twidere.wear/src/main/res/layout/rect_activity_main.xml new file mode 100644 index 000000000..9cea89757 --- /dev/null +++ b/twidere.wear/src/main/res/layout/rect_activity_main.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/twidere.wear/src/main/res/layout/round_activity_main.xml b/twidere.wear/src/main/res/layout/round_activity_main.xml new file mode 100644 index 000000000..b2eed694d --- /dev/null +++ b/twidere.wear/src/main/res/layout/round_activity_main.xml @@ -0,0 +1,16 @@ + + + + + diff --git a/twidere.wear/src/main/res/values/strings.xml b/twidere.wear/src/main/res/values/strings.xml new file mode 100644 index 000000000..aefd24a73 --- /dev/null +++ b/twidere.wear/src/main/res/values/strings.xml @@ -0,0 +1,9 @@ + + + + Twidere Wear Extension + MainActivity + Hello Round World! + Hello Square World! + + diff --git a/twidere/build.gradle b/twidere/build.gradle index 60470f9a9..5962846f1 100644 --- a/twidere/build.gradle +++ b/twidere/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.application' android { compileSdkVersion 21 - buildToolsVersion '21.0.1' + buildToolsVersion '21.0.2' defaultConfig { applicationId "org.mariotaku.twidere" @@ -69,7 +69,9 @@ android { } dependencies { + wearApp project(':twidere.wear') compile 'com.android.support:support-v13:21.0.0' + compile 'com.android.support:appcompat-v7:21.0.0' compile 'com.android.support:cardview-v7:21.0.0' compile 'com.android.support:recyclerview-v7:21.0.0' compile 'com.google.android.gms:play-services:6.1.11' diff --git a/twidere/src/main/java/org/mariotaku/gallery3d/ImageViewerGLActivity.java b/twidere/src/main/java/org/mariotaku/gallery3d/ImageViewerGLActivity.java index feeec2e74..817b51fbd 100644 --- a/twidere/src/main/java/org/mariotaku/gallery3d/ImageViewerGLActivity.java +++ b/twidere/src/main/java/org/mariotaku/gallery3d/ImageViewerGLActivity.java @@ -46,6 +46,7 @@ import org.mariotaku.gallery3d.ui.SynchronizedHandler; import org.mariotaku.gallery3d.util.GalleryUtils; import org.mariotaku.gallery3d.util.ThreadPool; import org.mariotaku.menucomponent.widget.MenuBar; +import org.mariotaku.menucomponent.widget.MenuBar.MenuBarListener; import org.mariotaku.twidere.Constants; import org.mariotaku.twidere.R; import org.mariotaku.twidere.activity.support.TwidereSwipeBackActivity; @@ -60,7 +61,7 @@ import me.imid.swipebacklayout.lib.SwipeBackLayout.SwipeListener; public final class ImageViewerGLActivity extends TwidereSwipeBackActivity implements Constants, PhotoView.Listener, GLImageLoader.DownloadListener, LoaderManager.LoaderCallbacks, OnMenuVisibilityListener, - SwipeListener, OnMenuItemClickListener { + SwipeListener, MenuBarListener { private final GLView mRootPane = new GLView() { @Override @@ -340,7 +341,7 @@ public final class ImageViewerGLActivity extends TwidereSwipeBackActivity implem if (savedInstanceState == null) { loadImage(); } - mMenuBar.setOnMenuItemClickListener(this); + mMenuBar.setMenuBarListener(this); mMenuBar.inflate(R.menu.menu_image_viewer); mMenuBar.setIsBottomBar(true); mMenuBar.show(); @@ -531,6 +532,11 @@ public final class ImageViewerGLActivity extends TwidereSwipeBackActivity implem Utils.addIntentToMenu(this, subMenu, shareIntent); } + @Override + public void onPreShowMenu(Menu menu) { + + } + private static class MyHandler extends SynchronizedHandler { ImageViewerGLActivity activity; diff --git a/twidere/src/main/java/org/mariotaku/twidere/Constants.java b/twidere/src/main/java/org/mariotaku/twidere/Constants.java index 1c81101cc..00930b42d 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/Constants.java +++ b/twidere/src/main/java/org/mariotaku/twidere/Constants.java @@ -28,7 +28,7 @@ package org.mariotaku.twidere; public interface Constants extends TwidereConstants { public static final String DATABASES_NAME = "twidere.sqlite"; - public static final int DATABASES_VERSION = 66; + public static final int DATABASES_VERSION = 67; public static final String GOOGLE_MAPS_API_KEY_RELEASE = "0kjPwJOe_zwYjzGc9uYak7vhm_Sf3eob-2L3Xzw"; public static final String GOOGLE_MAPS_API_KEY_DEBUG = "0kjPwJOe_zwY9p6kT-kygu4mxwysyOOpfkaXqTA"; diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/FiltersActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/FiltersActivity.java index 970214a09..351c931a3 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/FiltersActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/FiltersActivity.java @@ -61,10 +61,10 @@ import org.mariotaku.twidere.fragment.support.BaseSupportDialogFragment; import org.mariotaku.twidere.menu.TwidereMenuInflater; import org.mariotaku.twidere.model.ParcelableUser; import org.mariotaku.twidere.provider.TweetStore.Filters; +import org.mariotaku.twidere.util.ContentValuesCreator; import org.mariotaku.twidere.util.ParseUtils; import org.mariotaku.twidere.util.ThemeUtils; -import static org.mariotaku.twidere.util.ContentValuesCreator.makeFilterdUserContentValues; import static org.mariotaku.twidere.util.Utils.getDefaultAccountId; public class FiltersActivity extends BaseSupportActivity implements TabListener, OnPageChangeListener { @@ -204,7 +204,7 @@ public class FiltersActivity extends BaseSupportActivity implements TabListener, if (resultCode != RESULT_OK || !(filter instanceof FilteredUsersFragment) || !data.hasExtra(EXTRA_USER)) return; final ParcelableUser user = data.getParcelableExtra(EXTRA_USER); - final ContentValues values = makeFilterdUserContentValues(user); + final ContentValues values = ContentValuesCreator.makeFilteredUserContentValues(user); final ContentResolver resolver = getContentResolver(); resolver.delete(Filters.Users.CONTENT_URI, Where.equals(Filters.Users.USER_ID, user.id).getSQL(), null); resolver.insert(Filters.Users.CONTENT_URI, values); diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/APIEditorActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/support/APIEditorActivity.java index b1ed131d9..5ef1ce1e1 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/APIEditorActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/support/APIEditorActivity.java @@ -53,7 +53,7 @@ public class APIEditorActivity extends BaseSupportDialogActivity implements Twit OnClickListener { private EditText mEditAPIUrlFormat; - private CheckBox mEditSameOAuthSigningUrl; + private CheckBox mEditSameOAuthSigningUrl, mEditNoVersionSuffix; private EditText mEditConsumerKey, mEditConsumerSecret; private RadioGroup mEditAuthType; private RadioButton mButtonOAuth, mButtonxAuth, mButtonBasic, mButtonTwipOMode; @@ -111,6 +111,7 @@ public class APIEditorActivity extends BaseSupportDialogActivity implements Twit mAdvancedAPIConfigLabel = (TextView) findViewById(R.id.advanced_api_config_label); mAdvancedAPIConfigView = findViewById(R.id.advanced_api_config); mEditSameOAuthSigningUrl = (CheckBox) findViewById(R.id.same_oauth_signing_url); + mEditNoVersionSuffix = (CheckBox) findViewById(R.id.no_version_suffix); mEditConsumerKey = (EditText) findViewById(R.id.consumer_key); mEditConsumerSecret = (EditText) findViewById(R.id.consumer_secret); mSaveButton = (Button) findViewById(R.id.save); @@ -122,11 +123,13 @@ public class APIEditorActivity extends BaseSupportDialogActivity implements Twit final String apiUrlFormat = parseString(mEditAPIUrlFormat.getText()); final int authType = getCheckedAuthType(mEditAuthType.getCheckedRadioButtonId()); final boolean sameOAuthSigningUrl = mEditSameOAuthSigningUrl.isChecked(); + final boolean noVersionSuffix = mEditNoVersionSuffix.isChecked(); final String consumerKey = parseString(mEditConsumerKey.getText()); final String consumerSecret = parseString(mEditConsumerSecret.getText()); outState.putString(Accounts.API_URL_FORMAT, apiUrlFormat); outState.putInt(Accounts.AUTH_TYPE, authType); outState.putBoolean(Accounts.SAME_OAUTH_SIGNING_URL, sameOAuthSigningUrl); + outState.putBoolean(Accounts.NO_VERSION_SUFFIX, noVersionSuffix); outState.putString(Accounts.CONSUMER_KEY, consumerKey); outState.putString(Accounts.CONSUMER_SECRET, consumerSecret); super.onSaveInstanceState(outState); @@ -136,12 +139,14 @@ public class APIEditorActivity extends BaseSupportDialogActivity implements Twit final String apiUrlFormat = parseString(mEditAPIUrlFormat.getText()); final int authType = getCheckedAuthType(mEditAuthType.getCheckedRadioButtonId()); final boolean sameOAuthSigningUrl = mEditSameOAuthSigningUrl.isChecked(); + final boolean noVersionSuffix = mEditNoVersionSuffix.isChecked(); final String consumerKey = parseString(mEditConsumerKey.getText()); final String consumerSecret = parseString(mEditConsumerSecret.getText()); final Intent intent = new Intent(); intent.putExtra(Accounts.API_URL_FORMAT, apiUrlFormat); intent.putExtra(Accounts.AUTH_TYPE, authType); intent.putExtra(Accounts.SAME_OAUTH_SIGNING_URL, sameOAuthSigningUrl); + intent.putExtra(Accounts.NO_VERSION_SUFFIX, noVersionSuffix); intent.putExtra(Accounts.CONSUMER_KEY, consumerKey); intent.putExtra(Accounts.CONSUMER_SECRET, consumerSecret); setResult(RESULT_OK, intent); @@ -155,13 +160,14 @@ public class APIEditorActivity extends BaseSupportDialogActivity implements Twit String apiUrlFormat; int authType; - boolean sameOAuthSigningUrl; + boolean sameOAuthSigningUrl, noVersionSuffix; String consumerKey, consumerSecret; final SharedPreferences pref = getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); final String prefApiUrlFormat = getNonEmptyString(pref, KEY_API_URL_FORMAT, DEFAULT_REST_BASE_URL); final int prefAuthType = pref.getInt(KEY_AUTH_TYPE, Accounts.AUTH_TYPE_OAUTH); final boolean prefSameOAuthSigningUrl = pref.getBoolean(KEY_SAME_OAUTH_SIGNING_URL, false); + final boolean prefNoVersionSuffix = pref.getBoolean(KEY_NO_VERSION_SUFFIX, false); final String prefConsumerKey = getNonEmptyString(pref, KEY_CONSUMER_KEY, TWITTER_CONSUMER_KEY_2); final String prefConsumerSecret = getNonEmptyString(pref, KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET_2); if (savedInstanceState != null) { @@ -169,6 +175,8 @@ public class APIEditorActivity extends BaseSupportDialogActivity implements Twit authType = savedInstanceState.getInt(Accounts.AUTH_TYPE, prefAuthType); sameOAuthSigningUrl = savedInstanceState.getBoolean(Accounts.SAME_OAUTH_SIGNING_URL, prefSameOAuthSigningUrl); + noVersionSuffix = savedInstanceState.getBoolean(Accounts.NO_VERSION_SUFFIX, + prefNoVersionSuffix); consumerKey = trim(savedInstanceState.getString(Accounts.CONSUMER_KEY, prefConsumerKey)); consumerSecret = trim(savedInstanceState.getString(Accounts.CONSUMER_SECRET, prefConsumerSecret)); } else { @@ -177,6 +185,7 @@ public class APIEditorActivity extends BaseSupportDialogActivity implements Twit apiUrlFormat = trim(extras.getString(Accounts.API_URL_FORMAT, prefApiUrlFormat)); authType = extras.getInt(Accounts.AUTH_TYPE, prefAuthType); sameOAuthSigningUrl = extras.getBoolean(Accounts.SAME_OAUTH_SIGNING_URL, prefSameOAuthSigningUrl); + noVersionSuffix = extras.getBoolean(Accounts.NO_VERSION_SUFFIX, prefNoVersionSuffix); consumerKey = trim(extras.getString(Accounts.CONSUMER_KEY, prefConsumerKey)); consumerSecret = trim(extras.getString(Accounts.CONSUMER_SECRET, prefConsumerSecret)); } @@ -188,6 +197,7 @@ public class APIEditorActivity extends BaseSupportDialogActivity implements Twit mEditAPIUrlFormat.setText(apiUrlFormat); mEditSameOAuthSigningUrl.setChecked(sameOAuthSigningUrl); + mEditNoVersionSuffix.setChecked(noVersionSuffix); mEditConsumerKey.setText(consumerKey); mEditConsumerSecret.setText(consumerSecret); diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/BaseSupportThemedActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/support/BaseSupportThemedActivity.java index 07fc240db..c400475ea 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/BaseSupportThemedActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/support/BaseSupportThemedActivity.java @@ -21,9 +21,13 @@ package org.mariotaku.twidere.activity.support; import android.app.ActionBar; import android.content.res.Resources; +import android.graphics.Color; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.app.NavUtils; +import android.text.SpannableStringBuilder; +import android.text.Spanned; +import android.text.style.ForegroundColorSpan; import android.view.Menu; import org.mariotaku.twidere.Constants; @@ -143,6 +147,20 @@ public abstract class BaseSupportThemedActivity extends FragmentActivity impleme super.onStart(); } + @Override + protected void onTitleChanged(CharSequence title, int color) { + final SpannableStringBuilder builder = new SpannableStringBuilder(title); + super.onTitleChanged(title, color); + final int themeResId = getCurrentThemeResourceId(); + final int themeColor = getThemeColor(), contrastColor = Utils.getContrastYIQ(themeColor, 192); + if (ThemeUtils.isColoredActionBar(themeResId)) { + builder.setSpan(new ForegroundColorSpan(contrastColor), 0, builder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + } else { + final int titleColor = ThemeUtils.isLightActionBar(themeResId) ? Color.BLACK : Color.WHITE; + builder.setSpan(new ForegroundColorSpan(titleColor), 0, builder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + } + } + @Override protected void onResume() { super.onResume(); diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/ComposeActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/support/ComposeActivity.java index bbb7089c4..1e437bba9 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/ComposeActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/support/ComposeActivity.java @@ -43,6 +43,7 @@ import android.os.Bundle; import android.os.Environment; import android.os.Parcelable; import android.provider.MediaStore; +import android.support.annotation.NonNull; import android.support.v4.app.DialogFragment; import android.support.v4.util.LongSparseArray; import android.text.Editable; @@ -53,7 +54,6 @@ import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; -import android.view.MenuItem.OnMenuItemClickListener; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; @@ -78,6 +78,7 @@ import com.twitter.Extractor; import org.mariotaku.dynamicgridview.DraggableArrayAdapter; import org.mariotaku.menucomponent.widget.MenuBar; +import org.mariotaku.menucomponent.widget.MenuBar.MenuBarListener; import org.mariotaku.menucomponent.widget.PopupMenu; import org.mariotaku.twidere.R; import org.mariotaku.twidere.adapter.BaseArrayAdapter; @@ -148,7 +149,7 @@ import static org.mariotaku.twidere.util.Utils.showErrorMessage; import static org.mariotaku.twidere.util.Utils.showMenuItemToast; public class ComposeActivity extends BaseSupportDialogActivity implements TextWatcher, LocationListener, - OnMenuItemClickListener, OnClickListener, OnEditorActionListener, OnItemClickListener, OnItemLongClickListener, + MenuBarListener, OnClickListener, OnEditorActionListener, OnItemClickListener, OnItemLongClickListener, OnLongClickListener { private static final String FAKE_IMAGE_LINK = "https://www.example.com/fake_image.jpg"; @@ -595,8 +596,8 @@ public class ComposeActivity extends BaseSupportDialogActivity implements TextWa return; } mBottomMenuBar.setIsBottomBar(true); - mBottomMenuBar.setOnMenuItemClickListener(this); - mActionMenuBar.setOnMenuItemClickListener(this); + mBottomMenuBar.setMenuBarListener(this); + mActionMenuBar.setMenuBarListener(this); mEditText.setOnEditorActionListener(mPreferences.getBoolean(KEY_QUICK_SEND, false) ? this : null); mEditText.addTextChangedListener(this); mAccountSelectorAdapter = new AccountSelectorAdapter(this); @@ -1142,7 +1143,7 @@ public class ComposeActivity extends BaseSupportDialogActivity implements TextWa private void updateTextCount() { final StatusTextCountView textCountView = mBottomSendButton ? mBottomSendTextCountView : mSendTextCountView; if (textCountView != null && mEditText != null) { - final String textOrig = mEditText != null ? parseString(mEditText.getText()) : null; + final String textOrig = parseString(mEditText.getText()); final String text = hasMedia() && textOrig != null ? mImageUploaderUsed ? getImageUploadStatus(this, new String[]{FAKE_IMAGE_LINK}, textOrig) : textOrig + " " + FAKE_IMAGE_LINK : textOrig; final int validatedCount = text != null ? mValidator.getTweetLength(text) : 0; @@ -1150,6 +1151,11 @@ public class ComposeActivity extends BaseSupportDialogActivity implements TextWa } } + @Override + public void onPreShowMenu(Menu menu) { + + } + public static class RetweetProtectedStatusWarnFragment extends BaseSupportDialogFragment implements DialogInterface.OnClickListener { @@ -1167,6 +1173,7 @@ public class ComposeActivity extends BaseSupportDialogActivity implements TextWa } + @NonNull @Override public Dialog onCreateDialog(final Bundle savedInstanceState) { final Context wrapped = ThemeUtils.getDialogThemedContext(getActivity()); @@ -1204,6 +1211,7 @@ public class ComposeActivity extends BaseSupportDialogActivity implements TextWa } + @NonNull @Override public Dialog onCreateDialog(final Bundle savedInstanceState) { final Context wrapped = ThemeUtils.getDialogThemedContext(getActivity()); diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/HomeActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/support/HomeActivity.java index 79e333e3e..b2b9a6365 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/HomeActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/support/HomeActivity.java @@ -35,6 +35,7 @@ import android.database.ContentObserver; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Rect; +import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; @@ -228,9 +229,7 @@ public class HomeActivity extends BaseSupportActivity implements OnClickListener @Override public void onClick(final View v) { switch (v.getId()) { - case R.id.actions: - case R.id.actions_button: - case R.id.actions_button_bottom: { + case R.id.actions_button: { triggerActionsClick(); break; } @@ -248,7 +247,7 @@ public class HomeActivity extends BaseSupportActivity implements OnClickListener mSlidingMenu = (HomeSlidingMenu) findViewById(R.id.home_menu); mViewPager = (ExtendedViewPager) findViewById(R.id.main_pager); mEmptyTabHint = findViewById(R.id.empty_tab_hint); - mActionsButton = findViewById(R.id.actions_button_bottom); + mActionsButton = findViewById(R.id.actions_button); mTabsContainer = findViewById(R.id.tabs_container); mTabIndicator = (TabPagerIndicator) findViewById(R.id.main_tabs); mActionBarOverlay = findViewById(R.id.actionbar_overlay); @@ -297,12 +296,7 @@ public class HomeActivity extends BaseSupportActivity implements OnClickListener @Override public boolean onLongClick(final View v) { switch (v.getId()) { - case R.id.actions: case R.id.actions_button: { - showMenuItemToast(v, v.getContentDescription()); - return true; - } - case R.id.actions_button_bottom: { showMenuItemToast(v, v.getContentDescription(), true); return true; } @@ -574,7 +568,7 @@ public class HomeActivity extends BaseSupportActivity implements OnClickListener final int themeColor = getThemeColor(), contrastColor = Utils.getContrastYIQ(themeColor, 192); final int themeResId = getCurrentThemeResourceId(); if (ThemeUtils.isColoredActionBar(themeResId)) { - mTabIndicator.setBackgroundColor(themeColor); + ViewAccessor.setBackground(mTabIndicator, new ColorDrawable(themeColor)); mTabIndicator.setStripColor(contrastColor); mTabIndicator.setIconColor(contrastColor); } else { diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/LinkHandlerActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/support/LinkHandlerActivity.java index 602d28ccd..9344b9d43 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/LinkHandlerActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/support/LinkHandlerActivity.java @@ -120,6 +120,10 @@ public class LinkHandlerActivity extends BaseSupportActivity implements OnClickL requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); setUiOptions(getWindow(), data); super.onCreate(savedInstanceState); + final ActionBar actionBar = getActionBar(); + if (actionBar != null) { + actionBar.setDisplayHomeAsUpEnabled(true); + } setContentView(R.layout.layout_link_handler); setProgressBarIndeterminateVisibility(false); if (data == null || !showFragment(data)) { @@ -148,11 +152,6 @@ public class LinkHandlerActivity extends BaseSupportActivity implements OnClickL } } - @Override - protected void onTitleChanged(final CharSequence title, final int color) { - super.onTitleChanged(title, color); - } - private void setUiOptions(final Window window, final Uri data) { if (FlymeUtils.hasSmartBar()) { window.setUiOptions(ActivityInfo.UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW); diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/SignInActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/support/SignInActivity.java index fbd175205..6906b4b89 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/SignInActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/support/SignInActivity.java @@ -26,7 +26,6 @@ import android.content.ContentValues; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; -import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; @@ -35,7 +34,6 @@ import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.view.Menu; -import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; @@ -116,7 +114,7 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta private SharedPreferences mPreferences; private ContentResolver mResolver; private AbstractSignInTask mTask; - private boolean mSameOAuthSigningUrl; + private boolean mSameOAuthSigningUrl, mNoVersionSuffix; @Override public void afterTextChanged(final Editable s) { @@ -136,6 +134,7 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta mAPIUrlFormat = data.getStringExtra(Accounts.API_URL_FORMAT); mAuthType = data.getIntExtra(Accounts.AUTH_TYPE, Accounts.AUTH_TYPE_OAUTH); mSameOAuthSigningUrl = data.getBooleanExtra(Accounts.SAME_OAUTH_SIGNING_URL, false); + mNoVersionSuffix = data.getBooleanExtra(Accounts.NO_VERSION_SUFFIX, false); mConsumerKey = data.getStringExtra(Accounts.CONSUMER_KEY); mConsumerSecret = data.getStringExtra(Accounts.CONSUMER_SECRET); final boolean isTwipOMode = mAuthType == Accounts.AUTH_TYPE_TWIP_O_MODE; @@ -263,6 +262,7 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta intent.putExtra(Accounts.API_URL_FORMAT, mAPIUrlFormat); intent.putExtra(Accounts.AUTH_TYPE, mAuthType); intent.putExtra(Accounts.SAME_OAUTH_SIGNING_URL, mSameOAuthSigningUrl); + intent.putExtra(Accounts.NO_VERSION_SUFFIX, mNoVersionSuffix); intent.putExtra(Accounts.CONSUMER_KEY, mConsumerKey); intent.putExtra(Accounts.CONSUMER_SECRET, mConsumerSecret); startActivityForResult(intent, REQUEST_EDIT_API); @@ -305,6 +305,7 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta outState.putString(Accounts.API_URL_FORMAT, mAPIUrlFormat); outState.putInt(Accounts.AUTH_TYPE, mAuthType); outState.putBoolean(Accounts.SAME_OAUTH_SIGNING_URL, mSameOAuthSigningUrl); + outState.putBoolean(Accounts.NO_VERSION_SUFFIX, mNoVersionSuffix); outState.putString(Accounts.CONSUMER_KEY, mConsumerKey); outState.putString(Accounts.CONSUMER_SECRET, mConsumerSecret); outState.putString(Accounts.SCREEN_NAME, mUsername); @@ -368,7 +369,7 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta setDefaultAPI(); final Configuration conf = getConfiguration(); mTask = new SignInTask(this, conf, mUsername, mPassword, mAuthType, mUserColor, mAPIUrlFormat, - mSameOAuthSigningUrl); + mSameOAuthSigningUrl, mNoVersionSuffix); mTask.execute(); } @@ -384,7 +385,7 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta final String secret = intent.getStringExtra(EXTRA_REQUEST_TOKEN_SECRET); final String verifier = intent.getStringExtra(EXTRA_OAUTH_VERIFIER); mTask = new BrowserSignInTask(this, conf, token, secret, verifier, mUserColor, mAPIUrlFormat, - mSameOAuthSigningUrl); + mSameOAuthSigningUrl, mNoVersionSuffix); mTask.execute(); } @@ -397,9 +398,10 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta cb.setHttpClientFactory(new TwidereHttpClientFactory(mApplication)); setUserAgent(this, cb); if (!isEmpty(mAPIUrlFormat)) { - cb.setRestBaseURL(Utils.getApiUrl(mAPIUrlFormat, "api", "/1.1/")); + final String versionSuffix = mNoVersionSuffix ? null : "/1.1/"; + cb.setRestBaseURL(Utils.getApiUrl(mAPIUrlFormat, "api", versionSuffix)); cb.setOAuthBaseURL(Utils.getApiUrl(mAPIUrlFormat, "api", "/oauth/")); - cb.setUploadBaseURL(Utils.getApiUrl(mAPIUrlFormat, "upload", "/1.1/")); + cb.setUploadBaseURL(Utils.getApiUrl(mAPIUrlFormat, "upload", versionSuffix)); if (!mSameOAuthSigningUrl) { cb.setSigningRestBaseURL(DEFAULT_SIGNING_REST_BASE_URL); cb.setSigningOAuthBaseURL(DEFAULT_SIGNING_OAUTH_BASE_URL); @@ -437,6 +439,7 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta final String apiUrlFormat = getNonEmptyString(mPreferences, KEY_API_URL_FORMAT, null); final int authType = mPreferences.getInt(KEY_AUTH_TYPE, Accounts.AUTH_TYPE_OAUTH); final boolean sameOAuthSigningUrl = mPreferences.getBoolean(KEY_SAME_OAUTH_SIGNING_URL, false); + final boolean noVersionSuffix = mPreferences.getBoolean(KEY_NO_VERSION_SUFFIX, false); final String consumerKey = getNonEmptyString(mPreferences, KEY_CONSUMER_KEY, TWITTER_CONSUMER_KEY_2); final String consumerSecret = getNonEmptyString(mPreferences, KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET_2); if (isEmpty(mAPIUrlFormat) || defaultApiChanged) { @@ -448,6 +451,9 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta if (defaultApiChanged) { mSameOAuthSigningUrl = sameOAuthSigningUrl; } + if (defaultApiChanged) { + mNoVersionSuffix = noVersionSuffix; + } if (isEmpty(mConsumerKey) || defaultApiChanged) { mConsumerKey = consumerKey; } @@ -472,25 +478,27 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta } } - void onSignInResult(final SignInActivity.SigninResponse result) { + void onSignInResult(final SignInResponse result) { if (result != null) { if (result.succeed) { final ContentValues values; switch (result.auth_type) { case Accounts.AUTH_TYPE_BASIC: { values = makeAccountContentValuesBasic(result.conf, result.basic_username, - result.basic_password, result.user, result.color, result.api_url_format); + result.basic_password, result.user, result.color, + result.api_url_format, result.no_version_suffix); break; } case Accounts.AUTH_TYPE_TWIP_O_MODE: { values = makeAccountContentValuesTWIP(result.conf, result.user, result.color, - result.api_url_format); + result.api_url_format, result.no_version_suffix); break; } case Accounts.AUTH_TYPE_OAUTH: case Accounts.AUTH_TYPE_XAUTH: { - values = makeAccountContentValuesOAuth(result.conf, result.access_token, result.user, - result.auth_type, result.color, result.api_url_format, result.same_oauth_signing_url); + values = makeAccountContentValuesOAuth(result.conf, result.access_token, + result.user, result.auth_type, result.color, result.api_url_format, + result.same_oauth_signing_url, result.no_version_suffix); break; } default: { @@ -540,7 +548,7 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta mSetColorButton.setEnabled(false); } - public static abstract class AbstractSignInTask extends AsyncTask { + public static abstract class AbstractSignInTask extends AsyncTask { protected final Configuration conf; protected final SignInActivity callback; @@ -551,7 +559,7 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta } @Override - protected void onPostExecute(final SigninResponse result) { + protected void onPostExecute(final SignInResponse result) { if (callback != null) { callback.onSignInResult(result); } @@ -597,11 +605,11 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta private final Context context; private final String api_url_format; - private final boolean same_oauth_signing_url; + private final boolean same_oauth_signing_url, no_version_suffix; public BrowserSignInTask(final SignInActivity context, final Configuration conf, final String request_token, final String request_token_secret, final String oauth_verifier, final Integer user_color, - final String api_url_format, final boolean same_oauth_signing_url) { + final String api_url_format, final boolean same_oauth_signing_url, final boolean no_version_suffix) { super(context, conf); this.context = context; this.conf = conf; @@ -611,23 +619,24 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta this.user_color = user_color; this.api_url_format = api_url_format; this.same_oauth_signing_url = same_oauth_signing_url; + this.no_version_suffix = no_version_suffix; } @Override - protected SigninResponse doInBackground(final Void... params) { + protected SignInResponse doInBackground(final Void... params) { try { final Twitter twitter = new TwitterFactory(conf).getInstance(); final AccessToken access_token = twitter.getOAuthAccessToken(new RequestToken(conf, request_token, request_token_secret), oauth_verifier); final long userId = access_token.getUserId(); - if (userId <= 0) return new SigninResponse(false, false, null); + if (userId <= 0) return new SignInResponse(false, false, null); final User user = twitter.verifyCredentials(); - if (isUserLoggedIn(context, userId)) return new SigninResponse(true, false, null); + if (isUserLoggedIn(context, userId)) return new SignInResponse(true, false, null); final int color = user_color != null ? user_color : analyseUserProfileColor(user); - return new SigninResponse(conf, access_token, user, Accounts.AUTH_TYPE_OAUTH, color, api_url_format, - same_oauth_signing_url); + return new SignInResponse(conf, access_token, user, Accounts.AUTH_TYPE_OAUTH, color, + api_url_format, same_oauth_signing_url, no_version_suffix); } catch (final TwitterException e) { - return new SigninResponse(false, false, e); + return new SignInResponse(false, false, e); } } } @@ -655,11 +664,11 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta private final Context context; private final String api_url_format; - private final boolean same_oauth_signing_url; + private final boolean same_oauth_signing_url, no_version_suffix; public SignInTask(final SignInActivity context, final Configuration conf, final String username, final String password, final int auth_type, final Integer user_color, final String api_url_format, - final boolean same_oauth_signing_url) { + final boolean same_oauth_signing_url, final boolean no_version_suffix) { super(context, conf); this.context = context; this.conf = conf; @@ -669,10 +678,11 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta this.user_color = user_color; this.api_url_format = api_url_format; this.same_oauth_signing_url = same_oauth_signing_url; + this.no_version_suffix = no_version_suffix; } @Override - protected SigninResponse doInBackground(final Void... params) { + protected SignInResponse doInBackground(final Void... params) { try { switch (auth_type) { case Accounts.AUTH_TYPE_OAUTH: @@ -687,67 +697,73 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta return authOAuth(); } catch (final TwitterException e) { e.printStackTrace(); - return new SigninResponse(false, false, e); + return new SignInResponse(false, false, e); } catch (final AuthenticationException e) { e.printStackTrace(); - return new SigninResponse(false, false, e); + return new SignInResponse(false, false, e); } } - private SigninResponse authBasic() throws TwitterException { + private SignInResponse authBasic() throws TwitterException { final Twitter twitter = new TwitterFactory(conf).getInstance(new BasicAuthorization(username, password)); final User user = twitter.verifyCredentials(); final long user_id = user.getId(); - if (user_id <= 0) return new SigninResponse(false, false, null); - if (isUserLoggedIn(context, user_id)) return new SigninResponse(true, false, null); + if (user_id <= 0) return new SignInResponse(false, false, null); + if (isUserLoggedIn(context, user_id)) return new SignInResponse(true, false, null); final int color = user_color != null ? user_color : analyseUserProfileColor(user); - return new SigninResponse(conf, username, password, user, color, api_url_format); + return new SignInResponse(conf, username, password, user, color, api_url_format, + no_version_suffix); } - private SigninResponse authOAuth() throws AuthenticationException, TwitterException { + private SignInResponse authOAuth() throws AuthenticationException, TwitterException { final Twitter twitter = new TwitterFactory(conf).getInstance(); final OAuthPasswordAuthenticator authenticator = new OAuthPasswordAuthenticator(twitter); final AccessToken access_token = authenticator.getOAuthAccessToken(username, password); final long user_id = access_token.getUserId(); - if (user_id <= 0) return new SigninResponse(false, false, null); + if (user_id <= 0) return new SignInResponse(false, false, null); final User user = twitter.verifyCredentials(); - if (isUserLoggedIn(context, user_id)) return new SigninResponse(true, false, null); + if (isUserLoggedIn(context, user_id)) return new SignInResponse(true, false, null); final int color = user_color != null ? user_color : analyseUserProfileColor(user); - return new SigninResponse(conf, access_token, user, Accounts.AUTH_TYPE_OAUTH, color, api_url_format, - same_oauth_signing_url); + return new SignInResponse(conf, access_token, user, Accounts.AUTH_TYPE_OAUTH, color, + api_url_format, same_oauth_signing_url, no_version_suffix); } - private SigninResponse authTwipOMode() throws TwitterException { + private SignInResponse authTwipOMode() throws TwitterException { final Twitter twitter = new TwitterFactory(conf).getInstance(new TwipOModeAuthorization()); final User user = twitter.verifyCredentials(); final long user_id = user.getId(); - if (user_id <= 0) return new SigninResponse(false, false, null); - if (isUserLoggedIn(context, user_id)) return new SigninResponse(true, false, null); + if (user_id <= 0) return new SignInResponse(false, false, null); + if (isUserLoggedIn(context, user_id)) return new SignInResponse(true, false, null); final int color = user_color != null ? user_color : analyseUserProfileColor(user); - return new SigninResponse(conf, user, color, api_url_format); + return new SignInResponse(conf, user, color, api_url_format, no_version_suffix); } - private SigninResponse authxAuth() throws TwitterException { + private SignInResponse authxAuth() throws TwitterException { final Twitter twitter = new TwitterFactory(conf).getInstance(); final AccessToken access_token = twitter.getOAuthAccessToken(username, password); final User user = twitter.verifyCredentials(); final long user_id = user.getId(); - if (user_id <= 0) return new SigninResponse(false, false, null); - if (isUserLoggedIn(context, user_id)) return new SigninResponse(true, false, null); + if (user_id <= 0) return new SignInResponse(false, false, null); + if (isUserLoggedIn(context, user_id)) return new SignInResponse(true, false, null); final int color = user_color != null ? user_color : analyseUserProfileColor(user); - return new SigninResponse(conf, access_token, user, Accounts.AUTH_TYPE_XAUTH, color, api_url_format, - same_oauth_signing_url); + return new SignInResponse(conf, access_token, user, Accounts.AUTH_TYPE_XAUTH, color, + api_url_format, same_oauth_signing_url, no_version_suffix); } } + @Override + public int getThemeResourceId() { + return ThemeUtils.getSettingsThemeResource(this); + } + static interface SigninCallback { - void onSigninResult(SigninResponse response); + void onSigninResult(SignInResponse response); void onSigninStart(); } - static class SigninResponse { + static class SignInResponse { public final boolean already_logged_in, succeed; public final Exception exception; @@ -757,16 +773,16 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta public final User user; public final int auth_type, color; public final String api_url_format; - public final boolean same_oauth_signing_url; + public final boolean same_oauth_signing_url, no_version_suffix; - public SigninResponse(final boolean already_logged_in, final boolean succeed, final Exception exception) { - this(already_logged_in, succeed, exception, null, null, null, null, null, 0, 0, null, false); + public SignInResponse(final boolean already_logged_in, final boolean succeed, final Exception exception) { + this(already_logged_in, succeed, exception, null, null, null, null, null, 0, 0, null, false, false); } - public SigninResponse(final boolean already_logged_in, final boolean succeed, final Exception exception, + public SignInResponse(final boolean already_logged_in, final boolean succeed, final Exception exception, final Configuration conf, final String basic_username, final String basic_password, final AccessToken access_token, final User user, final int auth_type, final int color, - final String api_url_format, final boolean same_oauth_signing_url) { + final String api_url_format, final boolean same_oauth_signing_url, final boolean no_version_suffix) { this.already_logged_in = already_logged_in; this.succeed = succeed; this.exception = exception; @@ -779,23 +795,27 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta this.color = color; this.api_url_format = api_url_format; this.same_oauth_signing_url = same_oauth_signing_url; + this.no_version_suffix = no_version_suffix; } - public SigninResponse(final Configuration conf, final AccessToken access_token, final User user, - final int auth_type, final int color, final String api_url_format, final boolean same_oauth_signing_url) { + public SignInResponse(final Configuration conf, final AccessToken access_token, final User user, + final int auth_type, final int color, final String api_url_format, + final boolean same_oauth_signing_url, final boolean no_version_suffix) { this(false, true, null, conf, null, null, access_token, user, auth_type, color, api_url_format, - same_oauth_signing_url); + same_oauth_signing_url, no_version_suffix); } - public SigninResponse(final Configuration conf, final String basic_username, final String basic_password, - final User user, final int color, final String api_url_format) { + public SignInResponse(final Configuration conf, final String basic_username, final String basic_password, + final User user, final int color, final String api_url_format, + final boolean no_version_suffix) { this(false, true, null, conf, basic_username, basic_password, null, user, Accounts.AUTH_TYPE_BASIC, color, - api_url_format, false); + api_url_format, false, no_version_suffix); } - public SigninResponse(final Configuration conf, final User user, final int color, final String api_url_format) { + public SignInResponse(final Configuration conf, final User user, final int color, + final String api_url_format, final boolean no_version_suffix) { this(false, true, null, conf, null, null, null, user, Accounts.AUTH_TYPE_TWIP_O_MODE, color, - api_url_format, false); + api_url_format, false, no_version_suffix); } } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/constant/SharedPreferenceConstants.java b/twidere/src/main/java/org/mariotaku/twidere/constant/SharedPreferenceConstants.java index 3836c4866..ccff32c4e 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/constant/SharedPreferenceConstants.java +++ b/twidere/src/main/java/org/mariotaku/twidere/constant/SharedPreferenceConstants.java @@ -248,6 +248,8 @@ public interface SharedPreferenceConstants { public static final String KEY_API_URL_FORMAT = "api_url_format"; @Preference(type = BOOLEAN, hasDefault = true, defaultBoolean = false) public static final String KEY_SAME_OAUTH_SIGNING_URL = "same_oauth_signing_url"; + @Preference(type = BOOLEAN, hasDefault = true, defaultBoolean = false) + public static final String KEY_NO_VERSION_SUFFIX = "no_version_suffix"; @Preference(type = INT, hasDefault = true, defaultInt = Accounts.AUTH_TYPE_OAUTH) public static final String KEY_AUTH_TYPE = "auth_type"; @Preference(type = STRING, hasDefault = true, defaultString = TwidereConstants.TWITTER_CONSUMER_KEY_2) diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AddStatusFilterDialogFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AddStatusFilterDialogFragment.java index 8ae4c7916..2eb9d5dff 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AddStatusFilterDialogFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/AddStatusFilterDialogFragment.java @@ -19,7 +19,7 @@ package org.mariotaku.twidere.fragment.support; -import static org.mariotaku.twidere.util.ContentValuesCreator.makeFilterdUserContentValues; +import static org.mariotaku.twidere.util.ContentValuesCreator.makeFilteredUserContentValues; import static org.mariotaku.twidere.util.Utils.getDisplayName; import static org.mariotaku.twidere.util.content.ContentResolverUtils.bulkDelete; import static org.mariotaku.twidere.util.content.ContentResolverUtils.bulkInsert; @@ -41,6 +41,7 @@ import org.mariotaku.twidere.R; import org.mariotaku.twidere.model.ParcelableStatus; import org.mariotaku.twidere.model.ParcelableUserMention; import org.mariotaku.twidere.provider.TweetStore.Filters; +import org.mariotaku.twidere.util.ContentValuesCreator; import org.mariotaku.twidere.util.HtmlEscapeHelper; import org.mariotaku.twidere.util.ParseUtils; import org.mariotaku.twidere.util.ThemeUtils; @@ -71,11 +72,11 @@ public class AddStatusFilterDialogFragment extends BaseSupportDialogFragment imp if (value instanceof ParcelableUserMention) { final ParcelableUserMention mention = (ParcelableUserMention) value; user_ids.add(mention.id); - user_values.add(makeFilterdUserContentValues(mention)); + user_values.add(makeFilteredUserContentValues(mention)); } else if (value instanceof ParcelableStatus) { final ParcelableStatus status = (ParcelableStatus) value; user_ids.add(status.user_id); - user_values.add(makeFilterdUserContentValues(status)); + user_values.add(ContentValuesCreator.makeFilteredUserContentValues(status)); } else if (info.type == FilterItemInfo.FILTER_TYPE_KEYWORD) { if (value != null) { final String keyword = ParseUtils.parseString(value); diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/StatusFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/StatusFragment.java index 29a13d2f7..93a644d51 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/StatusFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/StatusFragment.java @@ -65,7 +65,6 @@ import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; -import org.mariotaku.menucomponent.widget.MenuBar; import org.mariotaku.refreshnow.widget.RefreshMode; import org.mariotaku.twidere.R; import org.mariotaku.twidere.activity.support.AccountSelectorActivity; @@ -98,6 +97,7 @@ import org.mariotaku.twidere.util.Utils; import org.mariotaku.twidere.view.ColorLabelRelativeLayout; import org.mariotaku.twidere.view.ExtendedFrameLayout; import org.mariotaku.twidere.view.StatusTextView; +import org.mariotaku.twidere.view.TwidereMenuBar; import java.io.IOException; import java.util.ArrayList; @@ -156,7 +156,7 @@ public class StatusFragment extends ParcelableStatusesListFragment implements On private boolean mFollowInfoDisplayed, mLocationInfoDisplayed; private boolean mStatusLoaderInitialized, mLocationLoaderInitialized; private boolean mFollowInfoLoaderInitialized; - ; + private boolean mShouldScroll; private SharedPreferences mPreferences; private AsyncTwitterWrapper mTwitterWrapper; @@ -171,7 +171,7 @@ public class StatusFragment extends ParcelableStatusesListFragment implements On private Button mRetryButton; private View mMainContent, mFollowIndicator, mImagePreviewContainer, mLocationContainer, mLocationBackgroundView; private ColorLabelRelativeLayout mProfileView; - private MenuBar mMenuBar; + private TwidereMenuBar mMenuBar; private ProgressBar mDetailsLoadProgress, mFollowInfoProgress; private LinearLayout mImagePreviewGrid; private View mHeaderView; @@ -577,7 +577,7 @@ public class StatusFragment extends ParcelableStatusesListFragment implements On final View view = inflater.inflate(R.layout.fragment_details_page, null, false); mMainContent = view.findViewById(R.id.content); mDetailsLoadProgress = (ProgressBar) view.findViewById(R.id.details_load_progress); - mMenuBar = (MenuBar) view.findViewById(R.id.menu_bar); + mMenuBar = (TwidereMenuBar) view.findViewById(R.id.menu_bar); mDetailsContainer = (ExtendedFrameLayout) view.findViewById(R.id.details_container); mDetailsContainer.addView(super.onCreateView(inflater, container, savedInstanceState)); mHeaderView = inflater.inflate(R.layout.header_status, null, false); diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/UserListDetailsFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/UserListDetailsFragment.java index 1fbf9afd0..8400ae5a1 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/UserListDetailsFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/UserListDetailsFragment.java @@ -19,18 +19,6 @@ package org.mariotaku.twidere.fragment.support; -import static android.text.TextUtils.isEmpty; -import static org.mariotaku.twidere.util.Utils.addIntentToMenu; -import static org.mariotaku.twidere.util.Utils.getAccountColor; -import static org.mariotaku.twidere.util.Utils.getDisplayName; -import static org.mariotaku.twidere.util.Utils.getLocalizedNumber; -import static org.mariotaku.twidere.util.Utils.getTwitterInstance; -import static org.mariotaku.twidere.util.Utils.openUserListMembers; -import static org.mariotaku.twidere.util.Utils.openUserListSubscribers; -import static org.mariotaku.twidere.util.Utils.openUserListTimeline; -import static org.mariotaku.twidere.util.Utils.openUserProfile; -import static org.mariotaku.twidere.util.Utils.setMenuItemAvailability; - import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; @@ -67,6 +55,7 @@ import android.widget.ListView; import android.widget.TextView; import org.mariotaku.menucomponent.widget.MenuBar; +import org.mariotaku.menucomponent.widget.MenuBar.MenuBarListener; import org.mariotaku.twidere.R; import org.mariotaku.twidere.activity.support.UserListSelectorActivity; import org.mariotaku.twidere.adapter.ListActionAdapter; @@ -82,533 +71,547 @@ import org.mariotaku.twidere.util.ParseUtils; import org.mariotaku.twidere.util.ThemeUtils; import org.mariotaku.twidere.util.TwidereLinkify; import org.mariotaku.twidere.view.ColorLabelRelativeLayout; +import org.mariotaku.twidere.view.TwidereMenuBar; + +import java.util.Locale; import twitter4j.Twitter; import twitter4j.TwitterException; import twitter4j.UserList; -import java.util.Locale; +import static android.text.TextUtils.isEmpty; +import static org.mariotaku.twidere.util.Utils.addIntentToMenu; +import static org.mariotaku.twidere.util.Utils.getAccountColor; +import static org.mariotaku.twidere.util.Utils.getDisplayName; +import static org.mariotaku.twidere.util.Utils.getLocalizedNumber; +import static org.mariotaku.twidere.util.Utils.getTwitterInstance; +import static org.mariotaku.twidere.util.Utils.openUserListMembers; +import static org.mariotaku.twidere.util.Utils.openUserListSubscribers; +import static org.mariotaku.twidere.util.Utils.openUserListTimeline; +import static org.mariotaku.twidere.util.Utils.openUserProfile; +import static org.mariotaku.twidere.util.Utils.setMenuItemAvailability; public class UserListDetailsFragment extends BaseSupportListFragment implements OnClickListener, OnItemClickListener, - OnItemLongClickListener, OnMenuItemClickListener, LoaderCallbacks>, - Panes.Right { + OnItemLongClickListener, OnMenuItemClickListener, LoaderCallbacks>, + Panes.Right { - private ImageLoaderWrapper mProfileImageLoader; - private AsyncTwitterWrapper mTwitterWrapper; + private ImageLoaderWrapper mProfileImageLoader; + private AsyncTwitterWrapper mTwitterWrapper; - private ImageView mProfileImageView; - private TextView mListNameView, mCreatedByView, mDescriptionView, mErrorMessageView; - private View mListContainer, mErrorRetryContainer; - private ColorLabelRelativeLayout mProfileContainer; - private View mDescriptionContainer; - private Button mRetryButton; - private ListView mListView; - private View mHeaderView; - private MenuBar mMenuBar; + private ImageView mProfileImageView; + private TextView mListNameView, mCreatedByView, mDescriptionView, mErrorMessageView; + private View mListContainer, mErrorRetryContainer; + private ColorLabelRelativeLayout mProfileContainer; + private View mDescriptionContainer; + private Button mRetryButton; + private ListView mListView; + private View mHeaderView; + private TwidereMenuBar mMenuBar; - private ListActionAdapter mAdapter; + private ListActionAdapter mAdapter; - private ParcelableUserList mUserList; - private Locale mLocale; + private ParcelableUserList mUserList; + private Locale mLocale; - private boolean mUserListLoaderInitialized; + private boolean mUserListLoaderInitialized; - private final BroadcastReceiver mStatusReceiver = new BroadcastReceiver() { + private final BroadcastReceiver mStatusReceiver = new BroadcastReceiver() { - @Override - public void onReceive(final Context context, final Intent intent) { - if (getActivity() == null || !isAdded() || isDetached()) return; - final String action = intent.getAction(); - final ParcelableUserList user_list = intent.getParcelableExtra(EXTRA_USER_LIST); - if (user_list == null || mUserList == null || !intent.getBooleanExtra(EXTRA_SUCCEED, false)) return; - if (BROADCAST_USER_LIST_DETAILS_UPDATED.equals(action)) { - if (user_list.id == mUserList.id) { - getUserListInfo(true); - } - } else if (BROADCAST_USER_LIST_SUBSCRIBED.equals(action) || BROADCAST_USER_LIST_UNSUBSCRIBED.equals(action)) { - if (user_list.id == mUserList.id) { - getUserListInfo(true); - } - } - } - }; + @Override + public void onReceive(final Context context, final Intent intent) { + if (getActivity() == null || !isAdded() || isDetached()) return; + final String action = intent.getAction(); + final ParcelableUserList user_list = intent.getParcelableExtra(EXTRA_USER_LIST); + if (user_list == null || mUserList == null || !intent.getBooleanExtra(EXTRA_SUCCEED, false)) + return; + if (BROADCAST_USER_LIST_DETAILS_UPDATED.equals(action)) { + if (user_list.id == mUserList.id) { + getUserListInfo(true); + } + } else if (BROADCAST_USER_LIST_SUBSCRIBED.equals(action) || BROADCAST_USER_LIST_UNSUBSCRIBED.equals(action)) { + if (user_list.id == mUserList.id) { + getUserListInfo(true); + } + } + } + }; - public void displayUserList(final ParcelableUserList userList) { - if (userList == null || getActivity() == null) return; - getLoaderManager().destroyLoader(0); - final boolean is_myself = userList.account_id == userList.user_id; - mErrorRetryContainer.setVisibility(View.GONE); - mUserList = userList; - mProfileContainer.drawEnd(getAccountColor(getActivity(), userList.account_id)); - mListNameView.setText(userList.name); - final String display_name = getDisplayName(getActivity(), userList.user_id, userList.user_name, - userList.user_screen_name, false); - mCreatedByView.setText(getString(R.string.created_by, display_name)); - final String description = userList.description; - mDescriptionContainer.setVisibility(is_myself || !isEmpty(description) ? View.VISIBLE : View.GONE); - mDescriptionView.setText(description); - final TwidereLinkify linkify = new TwidereLinkify( - new OnLinkClickHandler(getActivity(), getMultiSelectManager())); - linkify.applyAllLinks(mDescriptionView, userList.account_id, false); - mDescriptionView.setMovementMethod(LinkMovementMethod.getInstance()); - mProfileImageLoader.displayProfileImage(mProfileImageView, userList.user_profile_image_url); - mAdapter.notifyDataSetChanged(); - setMenu(mMenuBar.getMenu()); - mMenuBar.show(); - invalidateOptionsMenu(); - } + public void displayUserList(final ParcelableUserList userList) { + if (userList == null || getActivity() == null) return; + getLoaderManager().destroyLoader(0); + final boolean is_myself = userList.account_id == userList.user_id; + mErrorRetryContainer.setVisibility(View.GONE); + mUserList = userList; + mProfileContainer.drawEnd(getAccountColor(getActivity(), userList.account_id)); + mListNameView.setText(userList.name); + final String display_name = getDisplayName(getActivity(), userList.user_id, userList.user_name, + userList.user_screen_name, false); + mCreatedByView.setText(getString(R.string.created_by, display_name)); + final String description = userList.description; + mDescriptionContainer.setVisibility(is_myself || !isEmpty(description) ? View.VISIBLE : View.GONE); + mDescriptionView.setText(description); + final TwidereLinkify linkify = new TwidereLinkify( + new OnLinkClickHandler(getActivity(), getMultiSelectManager())); + linkify.applyAllLinks(mDescriptionView, userList.account_id, false); + mDescriptionView.setMovementMethod(LinkMovementMethod.getInstance()); + mProfileImageLoader.displayProfileImage(mProfileImageView, userList.user_profile_image_url); + mAdapter.notifyDataSetChanged(); + setMenu(mMenuBar.getMenu()); + mMenuBar.show(); + invalidateOptionsMenu(); + } - public void getUserListInfo(final boolean omit_intent_extra) { - final LoaderManager lm = getLoaderManager(); - lm.destroyLoader(0); - final Bundle args = new Bundle(getArguments()); - args.putBoolean(EXTRA_OMIT_INTENT_EXTRA, omit_intent_extra); - if (!mUserListLoaderInitialized) { - lm.initLoader(0, args, this); - mUserListLoaderInitialized = true; - } else { - lm.restartLoader(0, args, this); - } - } + public void getUserListInfo(final boolean omit_intent_extra) { + final LoaderManager lm = getLoaderManager(); + lm.destroyLoader(0); + final Bundle args = new Bundle(getArguments()); + args.putBoolean(EXTRA_OMIT_INTENT_EXTRA, omit_intent_extra); + if (!mUserListLoaderInitialized) { + lm.initLoader(0, args, this); + mUserListLoaderInitialized = true; + } else { + lm.restartLoader(0, args, this); + } + } - @Override - public void onActivityCreated(final Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - setHasOptionsMenu(true); - mTwitterWrapper = getApplication().getTwitterWrapper(); - mLocale = getResources().getConfiguration().locale; - mProfileImageLoader = getApplication().getImageLoaderWrapper(); - mAdapter = new ListActionAdapter(getActivity()); - mAdapter.add(new ListTimelineAction(1)); - mAdapter.add(new ListMembersAction(2)); - mAdapter.add(new ListSubscribersAction(3)); - mProfileImageView.setOnClickListener(this); - mProfileContainer.setOnClickListener(this); - mRetryButton.setOnClickListener(this); - setListAdapter(null); - mListView = getListView(); - mListView.addHeaderView(mHeaderView, null, false); - mListView.setOnItemClickListener(this); - mListView.setOnItemLongClickListener(this); - setListAdapter(mAdapter); - getUserListInfo(false); + @Override + public void onActivityCreated(final Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + setHasOptionsMenu(true); + mTwitterWrapper = getApplication().getTwitterWrapper(); + mLocale = getResources().getConfiguration().locale; + mProfileImageLoader = getApplication().getImageLoaderWrapper(); + mAdapter = new ListActionAdapter(getActivity()); + mAdapter.add(new ListTimelineAction(1)); + mAdapter.add(new ListMembersAction(2)); + mAdapter.add(new ListSubscribersAction(3)); + mProfileImageView.setOnClickListener(this); + mProfileContainer.setOnClickListener(this); + mRetryButton.setOnClickListener(this); + setListAdapter(null); + mListView = getListView(); + mListView.addHeaderView(mHeaderView, null, false); + mListView.setOnItemClickListener(this); + mListView.setOnItemLongClickListener(this); + setListAdapter(mAdapter); + getUserListInfo(false); - mMenuBar.inflate(R.menu.menu_user_list); - mMenuBar.setIsBottomBar(true); - mMenuBar.setOnMenuItemClickListener(this); - setMenu(mMenuBar.getMenu()); - mMenuBar.show(); - } + mMenuBar.inflate(R.menu.menu_user_list); + mMenuBar.setIsBottomBar(true); + mMenuBar.setOnMenuItemClickListener(this); + setMenu(mMenuBar.getMenu()); + mMenuBar.show(); + } - @Override - public void onActivityResult(final int requestCode, final int resultCode, final Intent data) { - switch (requestCode) { - case REQUEST_SELECT_USER: { - if (resultCode != Activity.RESULT_OK || !data.hasExtra(EXTRA_USER) || mTwitterWrapper == null - || mUserList == null) return; - final ParcelableUser user = data.getParcelableExtra(EXTRA_USER); - mTwitterWrapper.addUserListMembersAsync(mUserList.account_id, mUserList.id, user); - return; - } - } - super.onActivityResult(requestCode, resultCode, data); - } + @Override + public void onActivityResult(final int requestCode, final int resultCode, final Intent data) { + switch (requestCode) { + case REQUEST_SELECT_USER: { + if (resultCode != Activity.RESULT_OK || !data.hasExtra(EXTRA_USER) || mTwitterWrapper == null + || mUserList == null) return; + final ParcelableUser user = data.getParcelableExtra(EXTRA_USER); + mTwitterWrapper.addUserListMembersAsync(mUserList.account_id, mUserList.id, user); + return; + } + } + super.onActivityResult(requestCode, resultCode, data); + } - @Override - public void onClick(final View view) { - switch (view.getId()) { - case R.id.retry: { - getUserListInfo(true); - break; - } - case R.id.profile_image: { - if (mUserList == null) return; - openUserProfile(getActivity(), mUserList.account_id, mUserList.user_id, mUserList.user_screen_name); - break; - } - } + @Override + public void onClick(final View view) { + switch (view.getId()) { + case R.id.retry: { + getUserListInfo(true); + break; + } + case R.id.profile_image: { + if (mUserList == null) return; + openUserProfile(getActivity(), mUserList.account_id, mUserList.user_id, mUserList.user_screen_name); + break; + } + } - } + } - @Override - public Loader> onCreateLoader(final int id, final Bundle args) { - mListContainer.setVisibility(View.VISIBLE); - mErrorMessageView.setText(null); - mErrorMessageView.setVisibility(View.GONE); - mErrorRetryContainer.setVisibility(View.GONE); - setListShown(false); - setProgressBarIndeterminateVisibility(true); - 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 int listId = args != null ? args.getInt(EXTRA_LIST_ID, -1) : -1; - final String listName = args != null ? args.getString(EXTRA_LIST_NAME) : null; - final String screenName = args != null ? args.getString(EXTRA_SCREEN_NAME) : null; - final boolean omitIntentExtra = args != null ? args.getBoolean(EXTRA_OMIT_INTENT_EXTRA, true) : true; - return new ParcelableUserListLoader(getActivity(), omitIntentExtra, getArguments(), accountId, listId, - listName, userId, screenName); - } + @Override + public Loader> onCreateLoader(final int id, final Bundle args) { + mListContainer.setVisibility(View.VISIBLE); + mErrorMessageView.setText(null); + mErrorMessageView.setVisibility(View.GONE); + mErrorRetryContainer.setVisibility(View.GONE); + setListShown(false); + setProgressBarIndeterminateVisibility(true); + 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 int listId = args != null ? args.getInt(EXTRA_LIST_ID, -1) : -1; + final String listName = args != null ? args.getString(EXTRA_LIST_NAME) : null; + final String screenName = args != null ? args.getString(EXTRA_SCREEN_NAME) : null; + final boolean omitIntentExtra = args != null ? args.getBoolean(EXTRA_OMIT_INTENT_EXTRA, true) : true; + return new ParcelableUserListLoader(getActivity(), omitIntentExtra, getArguments(), accountId, listId, + listName, userId, screenName); + } - @Override - public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) { - mHeaderView = inflater.inflate(R.layout.header_user_list_details, null); - mProfileContainer = (ColorLabelRelativeLayout) mHeaderView.findViewById(R.id.profile); - mListNameView = (TextView) mHeaderView.findViewById(R.id.list_name); - mCreatedByView = (TextView) mHeaderView.findViewById(R.id.created_by); - mDescriptionView = (TextView) mHeaderView.findViewById(R.id.description); - mProfileImageView = (ImageView) mHeaderView.findViewById(R.id.profile_image); - mDescriptionContainer = mHeaderView.findViewById(R.id.description_container); - mListContainer = super.onCreateView(inflater, container, savedInstanceState); - final View containerView = inflater.inflate(R.layout.fragment_details_page, null); - ((FrameLayout) containerView.findViewById(R.id.details_container)).addView(mListContainer); - mErrorRetryContainer = containerView.findViewById(R.id.error_retry_container); - mRetryButton = (Button) containerView.findViewById(R.id.retry); - mErrorMessageView = (TextView) containerView.findViewById(R.id.error_message); - mMenuBar = (MenuBar) containerView.findViewById(R.id.menu_bar); - final View cardView = mHeaderView.findViewById(R.id.card); - ThemeUtils.applyThemeAlphaToDrawable(cardView.getContext(), cardView.getBackground()); - return containerView; - } + @Override + public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) { + mHeaderView = inflater.inflate(R.layout.header_user_list_details, null); + mProfileContainer = (ColorLabelRelativeLayout) mHeaderView.findViewById(R.id.profile); + mListNameView = (TextView) mHeaderView.findViewById(R.id.list_name); + mCreatedByView = (TextView) mHeaderView.findViewById(R.id.created_by); + mDescriptionView = (TextView) mHeaderView.findViewById(R.id.description); + mProfileImageView = (ImageView) mHeaderView.findViewById(R.id.profile_image); + mDescriptionContainer = mHeaderView.findViewById(R.id.description_container); + mListContainer = super.onCreateView(inflater, container, savedInstanceState); + final View containerView = inflater.inflate(R.layout.fragment_details_page, null); + ((FrameLayout) containerView.findViewById(R.id.details_container)).addView(mListContainer); + mErrorRetryContainer = containerView.findViewById(R.id.error_retry_container); + mRetryButton = (Button) containerView.findViewById(R.id.retry); + mErrorMessageView = (TextView) containerView.findViewById(R.id.error_message); + mMenuBar = (TwidereMenuBar) containerView.findViewById(R.id.menu_bar); + final View cardView = mHeaderView.findViewById(R.id.card); + ThemeUtils.applyThemeAlphaToDrawable(cardView.getContext(), cardView.getBackground()); + return containerView; + } - @Override - public void onDestroyView() { - mUserList = null; - getLoaderManager().destroyLoader(0); - super.onDestroyView(); - } + @Override + public void onDestroyView() { + mUserList = null; + getLoaderManager().destroyLoader(0); + super.onDestroyView(); + } - @Override - public void onItemClick(final AdapterView adapter, final View view, final int position, final long id) { - final ListAction action = mAdapter.findItem(id); - if (action != null) { - action.onClick(); - } - } + @Override + public void onItemClick(final AdapterView adapter, final View view, final int position, final long id) { + final ListAction action = mAdapter.findItem(id); + if (action != null) { + action.onClick(); + } + } - @Override - public boolean onItemLongClick(final AdapterView adapter, final View view, final int position, final long id) { - final ListAction action = mAdapter.findItem(id); - if (action != null) return action.onLongClick(); - return false; - } + @Override + public boolean onItemLongClick(final AdapterView adapter, final View view, final int position, final long id) { + final ListAction action = mAdapter.findItem(id); + if (action != null) return action.onLongClick(); + return false; + } - @Override - public void onLoaderReset(final Loader> loader) { + @Override + public void onLoaderReset(final Loader> loader) { - } + } - @Override - public void onLoadFinished(final Loader> loader, - final SingleResponse data) { - if (data == null) return; - if (getActivity() == null) return; - if (data.getData() != null) { - final ParcelableUserList list = data.getData(); - setListShown(true); - displayUserList(list); - mErrorRetryContainer.setVisibility(View.GONE); - } else { - if (data.hasException()) { - mErrorMessageView.setText(data.getException().getMessage()); - mErrorMessageView.setVisibility(View.VISIBLE); - } - mListContainer.setVisibility(View.GONE); - mErrorRetryContainer.setVisibility(View.VISIBLE); - } - setProgressBarIndeterminateVisibility(false); - } + @Override + public void onLoadFinished(final Loader> loader, + final SingleResponse data) { + if (data == null) return; + if (getActivity() == null) return; + if (data.getData() != null) { + final ParcelableUserList list = data.getData(); + setListShown(true); + displayUserList(list); + mErrorRetryContainer.setVisibility(View.GONE); + } else { + if (data.hasException()) { + mErrorMessageView.setText(data.getException().getMessage()); + mErrorMessageView.setVisibility(View.VISIBLE); + } + mListContainer.setVisibility(View.GONE); + mErrorRetryContainer.setVisibility(View.VISIBLE); + } + setProgressBarIndeterminateVisibility(false); + } - @Override - public boolean onMenuItemClick(final MenuItem item) { - final AsyncTwitterWrapper twitter = getTwitterWrapper(); - final ParcelableUserList userList = mUserList; - if (twitter == null || userList == null) return false; - switch (item.getItemId()) { - case MENU_ADD: { - if (userList.user_id != userList.account_id) return false; - final Intent intent = new Intent(INTENT_ACTION_SELECT_USER); - intent.setClass(getActivity(), UserListSelectorActivity.class); - intent.putExtra(EXTRA_ACCOUNT_ID, userList.account_id); - startActivityForResult(intent, REQUEST_SELECT_USER); - break; - } - case MENU_DELETE: { - if (userList.user_id != userList.account_id) return false; - DestroyUserListDialogFragment.show(getFragmentManager(), userList); - break; - } - case MENU_EDIT: { - final Bundle args = new Bundle(); - args.putLong(EXTRA_ACCOUNT_ID, userList.account_id); - args.putString(EXTRA_LIST_NAME, userList.name); - args.putString(EXTRA_DESCRIPTION, userList.description); - args.putBoolean(EXTRA_IS_PUBLIC, userList.is_public); - args.putLong(EXTRA_LIST_ID, userList.id); - final DialogFragment f = new EditUserListDialogFragment(); - f.setArguments(args); - f.show(getFragmentManager(), "edit_user_list_details"); - return true; - } - case MENU_FOLLOW: { - if (userList.is_following) { - DestroyUserListSubscriptionDialogFragment.show(getFragmentManager(), userList); - } else { - twitter.createUserListSubscriptionAsync(userList.account_id, userList.id); - } - return true; - } - default: { - if (item.getIntent() != null) { - try { - startActivity(item.getIntent()); - } catch (final ActivityNotFoundException e) { - Log.w(LOGTAG, e); - return false; - } - } - break; - } - } - return true; - } + @Override + public boolean onMenuItemClick(final MenuItem item) { + final AsyncTwitterWrapper twitter = getTwitterWrapper(); + final ParcelableUserList userList = mUserList; + if (twitter == null || userList == null) return false; + switch (item.getItemId()) { + case MENU_ADD: { + if (userList.user_id != userList.account_id) return false; + final Intent intent = new Intent(INTENT_ACTION_SELECT_USER); + intent.setClass(getActivity(), UserListSelectorActivity.class); + intent.putExtra(EXTRA_ACCOUNT_ID, userList.account_id); + startActivityForResult(intent, REQUEST_SELECT_USER); + break; + } + case MENU_DELETE: { + if (userList.user_id != userList.account_id) return false; + DestroyUserListDialogFragment.show(getFragmentManager(), userList); + break; + } + case MENU_EDIT: { + final Bundle args = new Bundle(); + args.putLong(EXTRA_ACCOUNT_ID, userList.account_id); + args.putString(EXTRA_LIST_NAME, userList.name); + args.putString(EXTRA_DESCRIPTION, userList.description); + args.putBoolean(EXTRA_IS_PUBLIC, userList.is_public); + args.putLong(EXTRA_LIST_ID, userList.id); + final DialogFragment f = new EditUserListDialogFragment(); + f.setArguments(args); + f.show(getFragmentManager(), "edit_user_list_details"); + return true; + } + case MENU_FOLLOW: { + if (userList.is_following) { + DestroyUserListSubscriptionDialogFragment.show(getFragmentManager(), userList); + } else { + twitter.createUserListSubscriptionAsync(userList.account_id, userList.id); + } + return true; + } + default: { + if (item.getIntent() != null) { + try { + startActivity(item.getIntent()); + } catch (final ActivityNotFoundException e) { + Log.w(LOGTAG, e); + return false; + } + } + break; + } + } + return true; + } - @Override - public void onStart() { - super.onStart(); - final IntentFilter filter = new IntentFilter(BROADCAST_USER_LIST_DETAILS_UPDATED); - filter.addAction(BROADCAST_USER_LIST_SUBSCRIBED); - filter.addAction(BROADCAST_USER_LIST_UNSUBSCRIBED); - registerReceiver(mStatusReceiver, filter); - } + @Override + public void onStart() { + super.onStart(); + final IntentFilter filter = new IntentFilter(BROADCAST_USER_LIST_DETAILS_UPDATED); + filter.addAction(BROADCAST_USER_LIST_SUBSCRIBED); + filter.addAction(BROADCAST_USER_LIST_UNSUBSCRIBED); + registerReceiver(mStatusReceiver, filter); + } - @Override - public void onStop() { - unregisterReceiver(mStatusReceiver); - super.onStop(); - } + @Override + public void onStop() { + unregisterReceiver(mStatusReceiver); + super.onStop(); + } - @Override - public void onViewCreated(final View view, final Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - } + @Override + public void onViewCreated(final View view, final Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + } - private void setMenu(final Menu menu) { - final AsyncTwitterWrapper twitter = getTwitterWrapper(); - final ParcelableUserList userList = mUserList; - final MenuItem followItem = menu.findItem(MENU_FOLLOW); - if (followItem != null) { - followItem.setEnabled(userList != null); - if (userList == null) { - followItem.setIcon(android.R.color.transparent); - } - } - if (twitter == null || userList == null) return; - final boolean isMyList = userList.user_id == userList.account_id; - setMenuItemAvailability(menu, MENU_EDIT, isMyList); - setMenuItemAvailability(menu, MENU_ADD, isMyList); - setMenuItemAvailability(menu, MENU_DELETE, isMyList); - final boolean isFollowing = userList.is_following; - if (followItem != null) { - followItem.setVisible(!isMyList); - if (isFollowing) { - followItem.setIcon(R.drawable.ic_action_cancel); - followItem.setTitle(R.string.unsubscribe); - } else { - followItem.setIcon(R.drawable.ic_action_add); - followItem.setTitle(R.string.subscribe); - } - } - menu.removeGroup(MENU_GROUP_USER_LIST_EXTENSION); - final Intent extensionsIntent = new Intent(INTENT_ACTION_EXTENSION_OPEN_USER_LIST); - extensionsIntent.setExtrasClassLoader(getActivity().getClassLoader()); - extensionsIntent.putExtra(EXTRA_USER_LIST, mUserList); - addIntentToMenu(getActivity(), menu, extensionsIntent, MENU_GROUP_USER_LIST_EXTENSION); - } + private void setMenu(final Menu menu) { + final AsyncTwitterWrapper twitter = getTwitterWrapper(); + final ParcelableUserList userList = mUserList; + final MenuItem followItem = menu.findItem(MENU_FOLLOW); + if (followItem != null) { + followItem.setEnabled(userList != null); + if (userList == null) { + followItem.setIcon(android.R.color.transparent); + } + } + if (twitter == null || userList == null) return; + final boolean isMyList = userList.user_id == userList.account_id; + setMenuItemAvailability(menu, MENU_EDIT, isMyList); + setMenuItemAvailability(menu, MENU_ADD, isMyList); + setMenuItemAvailability(menu, MENU_DELETE, isMyList); + final boolean isFollowing = userList.is_following; + if (followItem != null) { + followItem.setVisible(!isMyList); + if (isFollowing) { + followItem.setIcon(R.drawable.ic_action_cancel); + followItem.setTitle(R.string.unsubscribe); + } else { + followItem.setIcon(R.drawable.ic_action_add); + followItem.setTitle(R.string.subscribe); + } + } + menu.removeGroup(MENU_GROUP_USER_LIST_EXTENSION); + final Intent extensionsIntent = new Intent(INTENT_ACTION_EXTENSION_OPEN_USER_LIST); + extensionsIntent.setExtrasClassLoader(getActivity().getClassLoader()); + extensionsIntent.putExtra(EXTRA_USER_LIST, mUserList); + addIntentToMenu(getActivity(), menu, extensionsIntent, MENU_GROUP_USER_LIST_EXTENSION); + } - public static class EditUserListDialogFragment extends BaseSupportDialogFragment implements - DialogInterface.OnClickListener { + public static class EditUserListDialogFragment extends BaseSupportDialogFragment implements + DialogInterface.OnClickListener { - private EditText mEditName, mEditDescription; - private CheckBox mPublicCheckBox; - private String mName, mDescription; - private long mAccountId; - private long mListId; - private boolean mIsPublic; - private AsyncTwitterWrapper mTwitterWrapper; + private EditText mEditName, mEditDescription; + private CheckBox mPublicCheckBox; + private String mName, mDescription; + private long mAccountId; + private long mListId; + private boolean mIsPublic; + private AsyncTwitterWrapper mTwitterWrapper; - @Override - public void onClick(final DialogInterface dialog, final int which) { - if (mAccountId <= 0) return; - switch (which) { - case DialogInterface.BUTTON_POSITIVE: { - mName = ParseUtils.parseString(mEditName.getText()); - mDescription = ParseUtils.parseString(mEditDescription.getText()); - mIsPublic = mPublicCheckBox.isChecked(); - if (mName == null || mName.length() <= 0) return; - mTwitterWrapper.updateUserListDetails(mAccountId, mListId, mIsPublic, mName, mDescription); - break; - } - } + @Override + public void onClick(final DialogInterface dialog, final int which) { + if (mAccountId <= 0) return; + switch (which) { + case DialogInterface.BUTTON_POSITIVE: { + mName = ParseUtils.parseString(mEditName.getText()); + mDescription = ParseUtils.parseString(mEditDescription.getText()); + mIsPublic = mPublicCheckBox.isChecked(); + if (mName == null || mName.length() <= 0) return; + mTwitterWrapper.updateUserListDetails(mAccountId, mListId, mIsPublic, mName, mDescription); + break; + } + } - } + } - @Override - public Dialog onCreateDialog(final Bundle savedInstanceState) { - mTwitterWrapper = getApplication().getTwitterWrapper(); - final Bundle bundle = savedInstanceState == null ? getArguments() : savedInstanceState; - mAccountId = bundle != null ? bundle.getLong(EXTRA_ACCOUNT_ID, -1) : -1; - mListId = bundle != null ? bundle.getLong(EXTRA_LIST_ID, -1) : -1; - mName = bundle != null ? bundle.getString(EXTRA_LIST_NAME) : null; - mDescription = bundle != null ? bundle.getString(EXTRA_DESCRIPTION) : null; - mIsPublic = bundle != null ? bundle.getBoolean(EXTRA_IS_PUBLIC, true) : true; - final Context wrapped = ThemeUtils.getDialogThemedContext(getActivity()); - final AlertDialog.Builder builder = new AlertDialog.Builder(wrapped); - final View view = LayoutInflater.from(wrapped).inflate(R.layout.edit_user_list_detail, null); - builder.setView(view); - mEditName = (EditText) view.findViewById(R.id.name); - mEditDescription = (EditText) view.findViewById(R.id.description); - mPublicCheckBox = (CheckBox) view.findViewById(R.id.is_public); - if (mName != null) { - mEditName.setText(mName); - } - if (mDescription != null) { - mEditDescription.setText(mDescription); - } - mPublicCheckBox.setChecked(mIsPublic); - builder.setTitle(R.string.user_list); - builder.setPositiveButton(android.R.string.ok, this); - builder.setNegativeButton(android.R.string.cancel, this); - return builder.create(); - } + @Override + public Dialog onCreateDialog(final Bundle savedInstanceState) { + mTwitterWrapper = getApplication().getTwitterWrapper(); + final Bundle bundle = savedInstanceState == null ? getArguments() : savedInstanceState; + mAccountId = bundle != null ? bundle.getLong(EXTRA_ACCOUNT_ID, -1) : -1; + mListId = bundle != null ? bundle.getLong(EXTRA_LIST_ID, -1) : -1; + mName = bundle != null ? bundle.getString(EXTRA_LIST_NAME) : null; + mDescription = bundle != null ? bundle.getString(EXTRA_DESCRIPTION) : null; + mIsPublic = bundle != null ? bundle.getBoolean(EXTRA_IS_PUBLIC, true) : true; + final Context wrapped = ThemeUtils.getDialogThemedContext(getActivity()); + final AlertDialog.Builder builder = new AlertDialog.Builder(wrapped); + final View view = LayoutInflater.from(wrapped).inflate(R.layout.edit_user_list_detail, null); + builder.setView(view); + mEditName = (EditText) view.findViewById(R.id.name); + mEditDescription = (EditText) view.findViewById(R.id.description); + mPublicCheckBox = (CheckBox) view.findViewById(R.id.is_public); + if (mName != null) { + mEditName.setText(mName); + } + if (mDescription != null) { + mEditDescription.setText(mDescription); + } + mPublicCheckBox.setChecked(mIsPublic); + builder.setTitle(R.string.user_list); + builder.setPositiveButton(android.R.string.ok, this); + builder.setNegativeButton(android.R.string.cancel, this); + return builder.create(); + } - @Override - public void onSaveInstanceState(final Bundle outState) { - outState.putLong(EXTRA_ACCOUNT_ID, mAccountId); - outState.putLong(EXTRA_LIST_ID, mListId); - outState.putString(EXTRA_LIST_NAME, mName); - outState.putString(EXTRA_DESCRIPTION, mDescription); - outState.putBoolean(EXTRA_IS_PUBLIC, mIsPublic); - super.onSaveInstanceState(outState); - } + @Override + public void onSaveInstanceState(final Bundle outState) { + outState.putLong(EXTRA_ACCOUNT_ID, mAccountId); + outState.putLong(EXTRA_LIST_ID, mListId); + outState.putString(EXTRA_LIST_NAME, mName); + outState.putString(EXTRA_DESCRIPTION, mDescription); + outState.putBoolean(EXTRA_IS_PUBLIC, mIsPublic); + super.onSaveInstanceState(outState); + } - } + } - class ListMembersAction extends ListAction { + class ListMembersAction extends ListAction { - public ListMembersAction(final int order) { - super(order); - } + public ListMembersAction(final int order) { + super(order); + } - @Override - public String getName() { - return getString(R.string.list_members); - } + @Override + public String getName() { + return getString(R.string.list_members); + } - @Override - public String getSummary() { - if (mUserList == null) return null; - return getLocalizedNumber(mLocale, mUserList.members_count); - } + @Override + public String getSummary() { + if (mUserList == null) return null; + return getLocalizedNumber(mLocale, mUserList.members_count); + } - @Override - public void onClick() { - openUserListMembers(getActivity(), mUserList); - } + @Override + public void onClick() { + openUserListMembers(getActivity(), mUserList); + } - } + } - class ListSubscribersAction extends ListAction { + class ListSubscribersAction extends ListAction { - public ListSubscribersAction(final int order) { - super(order); - } + public ListSubscribersAction(final int order) { + super(order); + } - @Override - public String getName() { - return getString(R.string.list_subscribers); - } + @Override + public String getName() { + return getString(R.string.list_subscribers); + } - @Override - public String getSummary() { - if (mUserList == null) return null; - return getLocalizedNumber(mLocale, mUserList.subscribers_count); - } + @Override + public String getSummary() { + if (mUserList == null) return null; + return getLocalizedNumber(mLocale, mUserList.subscribers_count); + } - @Override - public void onClick() { - openUserListSubscribers(getActivity(), mUserList); - } + @Override + public void onClick() { + openUserListSubscribers(getActivity(), mUserList); + } - } + } - class ListTimelineAction extends ListAction { + class ListTimelineAction extends ListAction { - public ListTimelineAction(final int order) { - super(order); - } + public ListTimelineAction(final int order) { + super(order); + } - @Override - public String getName() { - return getString(R.string.list_timeline); - } + @Override + public String getName() { + return getString(R.string.list_timeline); + } - @Override - public void onClick() { - if (mUserList == null) return; - openUserListTimeline(getActivity(), mUserList); - } + @Override + public void onClick() { + if (mUserList == null) return; + openUserListTimeline(getActivity(), mUserList); + } - } + } - static class ParcelableUserListLoader extends AsyncTaskLoader> { + static class ParcelableUserListLoader extends AsyncTaskLoader> { - private final boolean mOmitIntentExtra; - private final Bundle mExtras; - private final long mAccountId, mUserId; - private final int mListId; - private final String mScreenName, mListName; + private final boolean mOmitIntentExtra; + private final Bundle mExtras; + private final long mAccountId, mUserId; + private final int mListId; + private final String mScreenName, mListName; - private ParcelableUserListLoader(final Context context, final boolean omitIntentExtra, final Bundle extras, - final long accountId, final int listId, final String listName, final long userId, - final String screenName) { - super(context); - mOmitIntentExtra = omitIntentExtra; - mExtras = extras; - mAccountId = accountId; - mUserId = userId; - mListId = listId; - mScreenName = screenName; - mListName = listName; - } + private ParcelableUserListLoader(final Context context, final boolean omitIntentExtra, final Bundle extras, + final long accountId, final int listId, final String listName, final long userId, + final String screenName) { + super(context); + mOmitIntentExtra = omitIntentExtra; + mExtras = extras; + mAccountId = accountId; + mUserId = userId; + mListId = listId; + mScreenName = screenName; + mListName = listName; + } - @Override - public SingleResponse loadInBackground() { - if (!mOmitIntentExtra && mExtras != null) { - final ParcelableUserList cache = mExtras.getParcelable(EXTRA_USER_LIST); - if (cache != null) return SingleResponse.getInstance(cache); - } - final Twitter twitter = getTwitterInstance(getContext(), mAccountId, true); - if (twitter == null) return SingleResponse.getInstance(); - try { - final UserList list; - if (mListId > 0) { - list = twitter.showUserList(mListId); - } else if (mUserId > 0) { - list = twitter.showUserList(mListName, mUserId); - } else if (mScreenName != null) { - list = twitter.showUserList(mListName, mScreenName); - } else - return SingleResponse.getInstance(); - return new SingleResponse(new ParcelableUserList(list, mAccountId), null); - } catch (final TwitterException e) { - return new SingleResponse(null, e); - } - } + @Override + public SingleResponse loadInBackground() { + if (!mOmitIntentExtra && mExtras != null) { + final ParcelableUserList cache = mExtras.getParcelable(EXTRA_USER_LIST); + if (cache != null) return SingleResponse.getInstance(cache); + } + final Twitter twitter = getTwitterInstance(getContext(), mAccountId, true); + if (twitter == null) return SingleResponse.getInstance(); + try { + final UserList list; + if (mListId > 0) { + list = twitter.showUserList(mListId); + } else if (mUserId > 0) { + list = twitter.showUserList(mListName, mUserId); + } else if (mScreenName != null) { + list = twitter.showUserList(mListName, mScreenName); + } else + return SingleResponse.getInstance(); + return new SingleResponse(new ParcelableUserList(list, mAccountId), null); + } catch (final TwitterException e) { + return new SingleResponse(null, e); + } + } - @Override - public void onStartLoading() { - forceLoad(); - } + @Override + public void onStartLoading() { + forceLoad(); + } - } + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/UserProfileFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/UserProfileFragment.java index 8b374a99c..e93e0afb1 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/UserProfileFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/UserProfileFragment.java @@ -83,6 +83,7 @@ import org.mariotaku.twidere.provider.TweetStore.Accounts; import org.mariotaku.twidere.provider.TweetStore.CachedUsers; import org.mariotaku.twidere.provider.TweetStore.Filters; import org.mariotaku.twidere.util.AsyncTwitterWrapper; +import org.mariotaku.twidere.util.ContentValuesCreator; import org.mariotaku.twidere.util.FlymeUtils; import org.mariotaku.twidere.util.ImageLoaderWrapper; import org.mariotaku.twidere.util.ParseUtils; @@ -92,6 +93,7 @@ import org.mariotaku.twidere.util.TwidereLinkify.OnLinkClickListener; import org.mariotaku.twidere.view.ColorLabelLinearLayout; import org.mariotaku.twidere.view.ExtendedFrameLayout; import org.mariotaku.twidere.view.ProfileImageView; +import org.mariotaku.twidere.view.TwidereMenuBar; import org.mariotaku.twidere.view.iface.IExtendedView.OnSizeChangedListener; import java.util.Locale; @@ -101,7 +103,6 @@ import twitter4j.Twitter; import twitter4j.TwitterException; import static android.text.TextUtils.isEmpty; -import static org.mariotaku.twidere.util.ContentValuesCreator.makeFilterdUserContentValues; import static org.mariotaku.twidere.util.ParseUtils.parseLong; import static org.mariotaku.twidere.util.UserColorNicknameUtils.clearUserColor; import static org.mariotaku.twidere.util.UserColorNicknameUtils.clearUserNickname; @@ -161,7 +162,7 @@ public class UserProfileFragment extends BaseSupportListFragment implements OnCl private View mMainContent; private View mProfileBannerSpace; private ProgressBar mDetailsLoadProgress; - private MenuBar mMenuBar; + private TwidereMenuBar mMenuBar; private ListActionAdapter mAdapter; @@ -720,7 +721,7 @@ public class UserProfileFragment extends BaseSupportListFragment implements OnCl super.onViewCreated(view, savedInstanceState); mMainContent = view.findViewById(R.id.content); mDetailsLoadProgress = (ProgressBar) view.findViewById(R.id.details_load_progress); - mMenuBar = (MenuBar) view.findViewById(R.id.menu_bar); + mMenuBar = (TwidereMenuBar) view.findViewById(R.id.menu_bar); mErrorRetryContainer = view.findViewById(R.id.error_retry_container); mRetryButton = (Button) view.findViewById(R.id.retry); mErrorMessageView = (TextView) view.findViewById(R.id.error_message); @@ -792,7 +793,7 @@ public class UserProfileFragment extends BaseSupportListFragment implements OnCl case MENU_ADD_TO_FILTER: { final ContentResolver resolver = getContentResolver(); resolver.delete(Filters.Users.CONTENT_URI, Where.equals(Filters.Users.USER_ID, user.id).getSQL(), null); - resolver.insert(Filters.Users.CONTENT_URI, makeFilterdUserContentValues(user)); + resolver.insert(Filters.Users.CONTENT_URI, ContentValuesCreator.makeFilteredUserContentValues(user)); showInfoMessage(getActivity(), R.string.message_user_muted, false); break; } diff --git a/twidere/src/main/java/org/mariotaku/twidere/model/Account.java b/twidere/src/main/java/org/mariotaku/twidere/model/Account.java index 404632d81..d411fe6b3 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/model/Account.java +++ b/twidere/src/main/java/org/mariotaku/twidere/model/Account.java @@ -19,9 +19,6 @@ package org.mariotaku.twidere.model; -import static org.mariotaku.twidere.util.Utils.isOfficialConsumerKeySecret; -import static org.mariotaku.twidere.util.Utils.shouldForceUsingPrivateAPIs; - import android.content.Context; import android.database.Cursor; import android.graphics.Color; @@ -38,263 +35,268 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import static org.mariotaku.twidere.util.Utils.isOfficialConsumerKeySecret; +import static org.mariotaku.twidere.util.Utils.shouldForceUsingPrivateAPIs; + public class Account implements Parcelable { - public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { - @Override - public Account createFromParcel(final Parcel in) { - return new Account(in); - } + @Override + public Account createFromParcel(final Parcel in) { + return new Account(in); + } - @Override - public Account[] newArray(final int size) { - return new Account[size]; - } - }; + @Override + public Account[] newArray(final int size) { + return new Account[size]; + } + }; - public final String screen_name, name, profile_image_url, profile_banner_url; - public final long account_id; - public final int color; - public final boolean is_activated; - public final boolean is_dummy; + public final String screen_name, name, profile_image_url, profile_banner_url; + public final long account_id; + public final int color; + public final boolean is_activated; + public final boolean is_dummy; - public Account(final Cursor cursor, final Indices indices) { - is_dummy = false; - screen_name = indices.screen_name != -1 ? cursor.getString(indices.screen_name) : null; - name = indices.name != -1 ? cursor.getString(indices.name) : null; - account_id = indices.account_id != -1 ? cursor.getLong(indices.account_id) : -1; - profile_image_url = indices.profile_image_url != -1 ? cursor.getString(indices.profile_image_url) : null; - profile_banner_url = indices.profile_banner_url != -1 ? cursor.getString(indices.profile_banner_url) : null; - color = indices.color != -1 ? cursor.getInt(indices.color) : Color.TRANSPARENT; - is_activated = indices.is_activated != -1 ? cursor.getInt(indices.is_activated) == 1 : false; - } + public Account(final Cursor cursor, final Indices indices) { + is_dummy = false; + screen_name = indices.screen_name != -1 ? cursor.getString(indices.screen_name) : null; + name = indices.name != -1 ? cursor.getString(indices.name) : null; + account_id = indices.account_id != -1 ? cursor.getLong(indices.account_id) : -1; + profile_image_url = indices.profile_image_url != -1 ? cursor.getString(indices.profile_image_url) : null; + profile_banner_url = indices.profile_banner_url != -1 ? cursor.getString(indices.profile_banner_url) : null; + color = indices.color != -1 ? cursor.getInt(indices.color) : Color.TRANSPARENT; + is_activated = indices.is_activated != -1 ? cursor.getInt(indices.is_activated) == 1 : false; + } - public Account(final Parcel source) { - is_dummy = source.readInt() == 1; - is_activated = source.readInt() == 1; - account_id = source.readLong(); - name = source.readString(); - screen_name = source.readString(); - profile_image_url = source.readString(); - profile_banner_url = source.readString(); - color = source.readInt(); - } + public Account(final Parcel source) { + is_dummy = source.readInt() == 1; + is_activated = source.readInt() == 1; + account_id = source.readLong(); + name = source.readString(); + screen_name = source.readString(); + profile_image_url = source.readString(); + profile_banner_url = source.readString(); + color = source.readInt(); + } - private Account() { - is_dummy = true; - screen_name = null; - name = null; - account_id = -1; - profile_image_url = null; - profile_banner_url = null; - color = 0; - is_activated = false; - } + private Account() { + is_dummy = true; + screen_name = null; + name = null; + account_id = -1; + profile_image_url = null; + profile_banner_url = null; + color = 0; + is_activated = false; + } - @Override - public int describeContents() { - return 0; - } + @Override + public int describeContents() { + return 0; + } - @Override - public String toString() { - return "Account{screen_name=" + screen_name + ", name=" + name + ", profile_image_url=" + profile_image_url - + ", profile_banner_url=" + profile_banner_url + ", account_id=" + account_id + ", color=" + color - + ", is_activated=" + is_activated + ", is_dummy=" + is_dummy + "}"; - } + @Override + public String toString() { + return "Account{screen_name=" + screen_name + ", name=" + name + ", profile_image_url=" + profile_image_url + + ", profile_banner_url=" + profile_banner_url + ", account_id=" + account_id + ", color=" + color + + ", is_activated=" + is_activated + ", is_dummy=" + is_dummy + "}"; + } - @Override - public void writeToParcel(final Parcel out, final int flags) { - out.writeInt(is_dummy ? 1 : 0); - out.writeInt(is_activated ? 1 : 0); - out.writeLong(account_id); - out.writeString(name); - out.writeString(screen_name); - out.writeString(profile_image_url); - out.writeString(profile_banner_url); - out.writeInt(color); - } + @Override + public void writeToParcel(final Parcel out, final int flags) { + out.writeInt(is_dummy ? 1 : 0); + out.writeInt(is_activated ? 1 : 0); + out.writeLong(account_id); + out.writeString(name); + out.writeString(screen_name); + out.writeString(profile_image_url); + out.writeString(profile_banner_url); + out.writeInt(color); + } - public static Account dummyInstance() { - return new Account(); - } + public static Account dummyInstance() { + return new Account(); + } - public static Account getAccount(final Context context, final long account_id) { - if (context == null) return null; - final Cursor cur = ContentResolverUtils.query(context.getContentResolver(), Accounts.CONTENT_URI, - Accounts.COLUMNS, Accounts.ACCOUNT_ID + " = " + account_id, null, null); - if (cur != null) { - try { - if (cur.getCount() > 0 && cur.moveToFirst()) { - final Indices indices = new Indices(cur); - cur.moveToFirst(); - return new Account(cur, indices); - } - } finally { - cur.close(); - } - } - return null; - } + public static Account getAccount(final Context context, final long account_id) { + if (context == null) return null; + final Cursor cur = ContentResolverUtils.query(context.getContentResolver(), Accounts.CONTENT_URI, + Accounts.COLUMNS, Accounts.ACCOUNT_ID + " = " + account_id, null, null); + if (cur != null) { + try { + if (cur.getCount() > 0 && cur.moveToFirst()) { + final Indices indices = new Indices(cur); + cur.moveToFirst(); + return new Account(cur, indices); + } + } finally { + cur.close(); + } + } + return null; + } - public static long[] getAccountIds(final Account[] accounts) { - final long[] ids = new long[accounts.length]; - for (int i = 0, j = accounts.length; i < j; i++) { - ids[i] = accounts[i].account_id; - } - return ids; - } + public static long[] getAccountIds(final Account[] accounts) { + final long[] ids = new long[accounts.length]; + for (int i = 0, j = accounts.length; i < j; i++) { + ids[i] = accounts[i].account_id; + } + return ids; + } - public static Account[] getAccounts(final Context context, final boolean activatedOnly, - final boolean officialKeyOnly) { - final List list = getAccountsList(context, activatedOnly, officialKeyOnly); - return list.toArray(new Account[list.size()]); - } + public static Account[] getAccounts(final Context context, final boolean activatedOnly, + final boolean officialKeyOnly) { + final List list = getAccountsList(context, activatedOnly, officialKeyOnly); + return list.toArray(new Account[list.size()]); + } - public static Account[] getAccounts(final Context context, final long[] accountIds) { - if (context == null) return new Account[0]; - final String where = accountIds != null ? Where.in(new Column(Accounts.ACCOUNT_ID), - new RawItemArray(accountIds)).getSQL() : null; - final Cursor cur = ContentResolverUtils.query(context.getContentResolver(), Accounts.CONTENT_URI, - Accounts.COLUMNS_NO_CREDENTIALS, where, null, null); - if (cur == null) return new Account[0]; - try { - final Indices idx = new Indices(cur); - cur.moveToFirst(); - final Account[] names = new Account[cur.getCount()]; - while (!cur.isAfterLast()) { - names[cur.getPosition()] = new Account(cur, idx); - cur.moveToNext(); - } - return names; - } finally { - cur.close(); - } - } + public static Account[] getAccounts(final Context context, final long[] accountIds) { + if (context == null) return new Account[0]; + final String where = accountIds != null ? Where.in(new Column(Accounts.ACCOUNT_ID), + new RawItemArray(accountIds)).getSQL() : null; + final Cursor cur = ContentResolverUtils.query(context.getContentResolver(), Accounts.CONTENT_URI, + Accounts.COLUMNS_NO_CREDENTIALS, where, null, null); + if (cur == null) return new Account[0]; + try { + final Indices idx = new Indices(cur); + cur.moveToFirst(); + final Account[] names = new Account[cur.getCount()]; + while (!cur.isAfterLast()) { + names[cur.getPosition()] = new Account(cur, idx); + cur.moveToNext(); + } + return names; + } finally { + cur.close(); + } + } - public static List getAccountsList(final Context context, final boolean activatedOnly) { - return getAccountsList(context, activatedOnly, false); - } + public static List getAccountsList(final Context context, final boolean activatedOnly) { + return getAccountsList(context, activatedOnly, false); + } - public static List getAccountsList(final Context context, final boolean activatedOnly, - final boolean officialKeyOnly) { - if (context == null) return Collections.emptyList(); - final ArrayList accounts = new ArrayList(); - final Cursor cur = ContentResolverUtils.query(context.getContentResolver(), Accounts.CONTENT_URI, - Accounts.COLUMNS_NO_CREDENTIALS, activatedOnly ? Accounts.IS_ACTIVATED + " = 1" : null, null, null); - if (cur != null) { - final Indices indices = new Indices(cur); - cur.moveToFirst(); - while (!cur.isAfterLast()) { - if (!officialKeyOnly) { - accounts.add(new Account(cur, indices)); - } else { - final String consumerKey = cur.getString(indices.consumer_key); - final String consumerSecret = cur.getString(indices.consumer_secret); - if (shouldForceUsingPrivateAPIs(context) - || isOfficialConsumerKeySecret(context, consumerKey, consumerSecret)) { - accounts.add(new Account(cur, indices)); - } - } - cur.moveToNext(); - } - cur.close(); - } - return accounts; - } + public static List getAccountsList(final Context context, final boolean activatedOnly, + final boolean officialKeyOnly) { + if (context == null) return Collections.emptyList(); + final ArrayList accounts = new ArrayList(); + final Cursor cur = ContentResolverUtils.query(context.getContentResolver(), Accounts.CONTENT_URI, + Accounts.COLUMNS_NO_CREDENTIALS, activatedOnly ? Accounts.IS_ACTIVATED + " = 1" : null, null, null); + if (cur != null) { + final Indices indices = new Indices(cur); + cur.moveToFirst(); + while (!cur.isAfterLast()) { + if (!officialKeyOnly) { + accounts.add(new Account(cur, indices)); + } else { + final String consumerKey = cur.getString(indices.consumer_key); + final String consumerSecret = cur.getString(indices.consumer_secret); + if (shouldForceUsingPrivateAPIs(context) + || isOfficialConsumerKeySecret(context, consumerKey, consumerSecret)) { + accounts.add(new Account(cur, indices)); + } + } + cur.moveToNext(); + } + cur.close(); + } + return accounts; + } - public static AccountWithCredentials getAccountWithCredentials(final Context context, final long account_id) { - if (context == null) return null; - final Cursor cur = ContentResolverUtils.query(context.getContentResolver(), Accounts.CONTENT_URI, - Accounts.COLUMNS, Accounts.ACCOUNT_ID + " = " + account_id, null, null); - if (cur != null) { - try { - if (cur.getCount() > 0 && cur.moveToFirst()) { - final Indices indices = new Indices(cur); - cur.moveToFirst(); - return new AccountWithCredentials(cur, indices); - } - } finally { - cur.close(); - } - } - return null; - } + public static AccountWithCredentials getAccountWithCredentials(final Context context, final long account_id) { + if (context == null) return null; + final Cursor cur = ContentResolverUtils.query(context.getContentResolver(), Accounts.CONTENT_URI, + Accounts.COLUMNS, Accounts.ACCOUNT_ID + " = " + account_id, null, null); + if (cur != null) { + try { + if (cur.getCount() > 0 && cur.moveToFirst()) { + final Indices indices = new Indices(cur); + cur.moveToFirst(); + return new AccountWithCredentials(cur, indices); + } + } finally { + cur.close(); + } + } + return null; + } - public static class AccountWithCredentials extends Account { + public static class AccountWithCredentials extends Account { - public final int auth_type; - public final String consumer_key, consumer_secret; - public final String basic_auth_username, basic_auth_password; - public final String oauth_token, oauth_token_secret; - public final String api_url_format; - public final boolean same_oauth_signing_url; + public final int auth_type; + public final String consumer_key, consumer_secret; + public final String basic_auth_username, basic_auth_password; + public final String oauth_token, oauth_token_secret; + public final String api_url_format; + public final boolean same_oauth_signing_url, no_version_suffix; - public AccountWithCredentials(final Cursor cursor, final Indices indices) { - super(cursor, indices); - auth_type = cursor.getInt(indices.auth_type); - consumer_key = cursor.getString(indices.consumer_key); - consumer_secret = cursor.getString(indices.consumer_secret); - basic_auth_username = cursor.getString(indices.basic_auth_username); - basic_auth_password = cursor.getString(indices.basic_auth_password); - oauth_token = cursor.getString(indices.oauth_token); - oauth_token_secret = cursor.getString(indices.oauth_token_secret); - api_url_format = cursor.getString(indices.api_url_format); - same_oauth_signing_url = cursor.getInt(indices.same_oauth_signing_url) == 1; - } + public AccountWithCredentials(final Cursor cursor, final Indices indices) { + super(cursor, indices); + auth_type = cursor.getInt(indices.auth_type); + consumer_key = cursor.getString(indices.consumer_key); + consumer_secret = cursor.getString(indices.consumer_secret); + basic_auth_username = cursor.getString(indices.basic_auth_username); + basic_auth_password = cursor.getString(indices.basic_auth_password); + oauth_token = cursor.getString(indices.oauth_token); + oauth_token_secret = cursor.getString(indices.oauth_token_secret); + api_url_format = cursor.getString(indices.api_url_format); + same_oauth_signing_url = cursor.getInt(indices.same_oauth_signing_url) == 1; + no_version_suffix = cursor.getInt(indices.no_version_suffix) == 1; + } - @Override - public String toString() { - return "AccountWithCredentials{auth_type=" + auth_type + ", consumer_key=" + consumer_key - + ", consumer_secret=" + consumer_secret + ", basic_auth_password=" + basic_auth_password - + ", oauth_token=" + oauth_token + ", oauth_token_secret=" + oauth_token_secret - + ", api_url_format=" + api_url_format + ", same_oauth_signing_url=" + same_oauth_signing_url + "}"; - } + @Override + public String toString() { + return "AccountWithCredentials{auth_type=" + auth_type + ", consumer_key=" + consumer_key + + ", consumer_secret=" + consumer_secret + ", basic_auth_password=" + basic_auth_password + + ", oauth_token=" + oauth_token + ", oauth_token_secret=" + oauth_token_secret + + ", api_url_format=" + api_url_format + ", same_oauth_signing_url=" + same_oauth_signing_url + "}"; + } - public static final boolean isOfficialCredentials(final Context context, final AccountWithCredentials account) { - if (account == null) return false; - final boolean isOAuth = account.auth_type == Accounts.AUTH_TYPE_OAUTH - || account.auth_type == Accounts.AUTH_TYPE_XAUTH; - final String consumerKey = account.consumer_key, consumerSecret = account.consumer_secret; - return isOAuth && isOfficialConsumerKeySecret(context, consumerKey, consumerSecret); - } - } + public static final boolean isOfficialCredentials(final Context context, final AccountWithCredentials account) { + if (account == null) return false; + final boolean isOAuth = account.auth_type == Accounts.AUTH_TYPE_OAUTH + || account.auth_type == Accounts.AUTH_TYPE_XAUTH; + final String consumerKey = account.consumer_key, consumerSecret = account.consumer_secret; + return isOAuth && isOfficialConsumerKeySecret(context, consumerKey, consumerSecret); + } + } - public static final class Indices { + public static final class Indices { - public final int screen_name, name, account_id, profile_image_url, profile_banner_url, color, is_activated, - auth_type, consumer_key, consumer_secret, basic_auth_username, basic_auth_password, oauth_token, - oauth_token_secret, api_url_format, same_oauth_signing_url; + public final int screen_name, name, account_id, profile_image_url, profile_banner_url, color, is_activated, + auth_type, consumer_key, consumer_secret, basic_auth_username, basic_auth_password, oauth_token, + oauth_token_secret, api_url_format, same_oauth_signing_url, no_version_suffix; - public Indices(final Cursor cursor) { - screen_name = cursor.getColumnIndex(Accounts.SCREEN_NAME); - name = cursor.getColumnIndex(Accounts.NAME); - account_id = cursor.getColumnIndex(Accounts.ACCOUNT_ID); - profile_image_url = cursor.getColumnIndex(Accounts.PROFILE_IMAGE_URL); - profile_banner_url = cursor.getColumnIndex(Accounts.PROFILE_BANNER_URL); - color = cursor.getColumnIndex(Accounts.COLOR); - is_activated = cursor.getColumnIndex(Accounts.IS_ACTIVATED); - auth_type = cursor.getColumnIndex(Accounts.AUTH_TYPE); - consumer_key = cursor.getColumnIndex(Accounts.CONSUMER_KEY); - consumer_secret = cursor.getColumnIndex(Accounts.CONSUMER_SECRET); - basic_auth_username = cursor.getColumnIndex(Accounts.BASIC_AUTH_USERNAME); - basic_auth_password = cursor.getColumnIndex(Accounts.BASIC_AUTH_PASSWORD); - oauth_token = cursor.getColumnIndex(Accounts.OAUTH_TOKEN); - oauth_token_secret = cursor.getColumnIndex(Accounts.OAUTH_TOKEN_SECRET); - api_url_format = cursor.getColumnIndex(Accounts.API_URL_FORMAT); - same_oauth_signing_url = cursor.getColumnIndex(Accounts.SAME_OAUTH_SIGNING_URL); - } + public Indices(final Cursor cursor) { + screen_name = cursor.getColumnIndex(Accounts.SCREEN_NAME); + name = cursor.getColumnIndex(Accounts.NAME); + account_id = cursor.getColumnIndex(Accounts.ACCOUNT_ID); + profile_image_url = cursor.getColumnIndex(Accounts.PROFILE_IMAGE_URL); + profile_banner_url = cursor.getColumnIndex(Accounts.PROFILE_BANNER_URL); + color = cursor.getColumnIndex(Accounts.COLOR); + is_activated = cursor.getColumnIndex(Accounts.IS_ACTIVATED); + auth_type = cursor.getColumnIndex(Accounts.AUTH_TYPE); + consumer_key = cursor.getColumnIndex(Accounts.CONSUMER_KEY); + consumer_secret = cursor.getColumnIndex(Accounts.CONSUMER_SECRET); + basic_auth_username = cursor.getColumnIndex(Accounts.BASIC_AUTH_USERNAME); + basic_auth_password = cursor.getColumnIndex(Accounts.BASIC_AUTH_PASSWORD); + oauth_token = cursor.getColumnIndex(Accounts.OAUTH_TOKEN); + oauth_token_secret = cursor.getColumnIndex(Accounts.OAUTH_TOKEN_SECRET); + api_url_format = cursor.getColumnIndex(Accounts.API_URL_FORMAT); + same_oauth_signing_url = cursor.getColumnIndex(Accounts.SAME_OAUTH_SIGNING_URL); + no_version_suffix = cursor.getColumnIndex(Accounts.NO_VERSION_SUFFIX); + } - @Override - public String toString() { - return "Indices{screen_name=" + screen_name + ", name=" + name + ", account_id=" + account_id - + ", profile_image_url=" + profile_image_url + ", profile_banner_url=" + profile_banner_url - + ", color=" + color + ", is_activated=" + is_activated + ", auth_type=" + auth_type - + ", consumer_key=" + consumer_key + ", consumer_secret=" + consumer_secret - + ", basic_auth_password=" + basic_auth_password + ", oauth_token=" + oauth_token - + ", oauth_token_secret=" + oauth_token_secret + ", api_url_format=" + api_url_format - + ", same_oauth_signing_url=" + same_oauth_signing_url + "}"; - } - } + @Override + public String toString() { + return "Indices{screen_name=" + screen_name + ", name=" + name + ", account_id=" + account_id + + ", profile_image_url=" + profile_image_url + ", profile_banner_url=" + profile_banner_url + + ", color=" + color + ", is_activated=" + is_activated + ", auth_type=" + auth_type + + ", consumer_key=" + consumer_key + ", consumer_secret=" + consumer_secret + + ", basic_auth_password=" + basic_auth_password + ", oauth_token=" + oauth_token + + ", oauth_token_secret=" + oauth_token_secret + ", api_url_format=" + api_url_format + + ", same_oauth_signing_url=" + same_oauth_signing_url + "}"; + } + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/provider/TweetStore.java b/twidere/src/main/java/org/mariotaku/twidere/provider/TweetStore.java index b01c152b9..cc192d5dd 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/provider/TweetStore.java +++ b/twidere/src/main/java/org/mariotaku/twidere/provider/TweetStore.java @@ -25,760 +25,761 @@ import android.provider.BaseColumns; public interface TweetStore { - public static final String AUTHORITY = "twidere"; - - public static final String TYPE_PRIMARY_KEY = "INTEGER PRIMARY KEY AUTOINCREMENT"; - public static final String TYPE_INT = "INTEGER"; - public static final String TYPE_INT_UNIQUE = "INTEGER UNIQUE"; - public static final String TYPE_BOOLEAN = "INTEGER(1)"; - public static final String TYPE_BOOLEAN_DEFAULT_TRUE = "INTEGER(1) DEFAULT 1"; - public static final String TYPE_TEXT = "TEXT"; - public static final String TYPE_TEXT_NOT_NULL = "TEXT NOT NULL"; - public static final String TYPE_TEXT_NOT_NULL_UNIQUE = "TEXT NOT NULL UNIQUE"; + public static final String AUTHORITY = "twidere"; + + public static final String TYPE_PRIMARY_KEY = "INTEGER PRIMARY KEY AUTOINCREMENT"; + public static final String TYPE_INT = "INTEGER"; + public static final String TYPE_INT_UNIQUE = "INTEGER UNIQUE"; + public static final String TYPE_BOOLEAN = "INTEGER(1)"; + public static final String TYPE_BOOLEAN_DEFAULT_TRUE = "INTEGER(1) DEFAULT 1"; + public static final String TYPE_TEXT = "TEXT"; + public static final String TYPE_TEXT_NOT_NULL = "TEXT NOT NULL"; + public static final String TYPE_TEXT_NOT_NULL_UNIQUE = "TEXT NOT NULL UNIQUE"; + + public static final String CONTENT_PATH_NULL = "null_content"; + + public static final String CONTENT_PATH_DATABASE_READY = "database_ready"; + + public static final Uri BASE_CONTENT_URI = new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT) + .authority(AUTHORITY).build(); + + public static final Uri CONTENT_URI_NULL = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH_NULL); + + public static final Uri CONTENT_URI_DATABASE_READY = Uri.withAppendedPath(BASE_CONTENT_URI, + CONTENT_PATH_DATABASE_READY); - public static final String CONTENT_PATH_NULL = "null_content"; - - public static final String CONTENT_PATH_DATABASE_READY = "database_ready"; - - public static final Uri BASE_CONTENT_URI = new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT) - .authority(AUTHORITY).build(); - - public static final Uri CONTENT_URI_NULL = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH_NULL); - - public static final Uri CONTENT_URI_DATABASE_READY = Uri.withAppendedPath(BASE_CONTENT_URI, - CONTENT_PATH_DATABASE_READY); + public static final Uri[] STATUSES_URIS = new Uri[]{Statuses.CONTENT_URI, Mentions.CONTENT_URI, + CachedStatuses.CONTENT_URI}; + public static final Uri[] CACHE_URIS = new Uri[]{CachedUsers.CONTENT_URI, CachedStatuses.CONTENT_URI, + CachedHashtags.CONTENT_URI, CachedTrends.Local.CONTENT_URI}; + public static final Uri[] DIRECT_MESSAGES_URIS = new Uri[]{DirectMessages.Inbox.CONTENT_URI, + DirectMessages.Outbox.CONTENT_URI}; - public static final Uri[] STATUSES_URIS = new Uri[] { Statuses.CONTENT_URI, Mentions.CONTENT_URI, - CachedStatuses.CONTENT_URI }; - public static final Uri[] CACHE_URIS = new Uri[] { CachedUsers.CONTENT_URI, CachedStatuses.CONTENT_URI, - CachedHashtags.CONTENT_URI, CachedTrends.Local.CONTENT_URI }; - public static final Uri[] DIRECT_MESSAGES_URIS = new Uri[] { DirectMessages.Inbox.CONTENT_URI, - DirectMessages.Outbox.CONTENT_URI }; + public static interface Accounts extends BaseColumns { - public static interface Accounts extends BaseColumns { + public static final int AUTH_TYPE_OAUTH = 0; + public static final int AUTH_TYPE_XAUTH = 1; + public static final int AUTH_TYPE_BASIC = 2; + public static final int AUTH_TYPE_TWIP_O_MODE = 3; - public static final int AUTH_TYPE_OAUTH = 0; - public static final int AUTH_TYPE_XAUTH = 1; - public static final int AUTH_TYPE_BASIC = 2; - public static final int AUTH_TYPE_TWIP_O_MODE = 3; + public static final String TABLE_NAME = "accounts"; + public static final String CONTENT_PATH = TABLE_NAME; + public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); - public static final String TABLE_NAME = "accounts"; - public static final String CONTENT_PATH = TABLE_NAME; - public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); + /** + * Login name of the account
+ * Type: TEXT NOT NULL + */ + public static final String SCREEN_NAME = "screen_name"; - /** - * Login name of the account
- * Type: TEXT NOT NULL - */ - public static final String SCREEN_NAME = "screen_name"; + public static final String NAME = "name"; - public static final String NAME = "name"; + /** + * Unique ID of the account
+ * Type: INTEGER (long) + */ + public static final String ACCOUNT_ID = "account_id"; - /** - * Unique ID of the account
- * Type: INTEGER (long) - */ - public static final String ACCOUNT_ID = "account_id"; + /** + * Auth type of the account.
Type: INTEGER + */ + public static final String AUTH_TYPE = "auth_type"; - /** - * Auth type of the account.
Type: INTEGER - */ - public static final String AUTH_TYPE = "auth_type"; + /** + * Password of the account. (It will not stored)
+ * Type: TEXT + */ + public static final String PASSWORD = "password"; - /** - * Password of the account. (It will not stored)
- * Type: TEXT - */ - public static final String PASSWORD = "password"; + public static final String BASIC_AUTH_USERNAME = "basic_auth_username"; - public static final String BASIC_AUTH_USERNAME = "basic_auth_username"; + /** + * Password of the account for basic auth.
+ * Type: TEXT + */ + public static final String BASIC_AUTH_PASSWORD = "basic_auth_password"; - /** - * Password of the account for basic auth.
- * Type: TEXT - */ - public static final String BASIC_AUTH_PASSWORD = "basic_auth_password"; + /** + * OAuth Token of the account.
+ * Type: TEXT + */ + public static final String OAUTH_TOKEN = "oauth_token"; - /** - * OAuth Token of the account.
- * Type: TEXT - */ - public static final String OAUTH_TOKEN = "oauth_token"; + /** + * Token Secret of the account.
+ * Type: TEXT + */ + public static final String OAUTH_TOKEN_SECRET = "oauth_token_secret"; - /** - * Token Secret of the account.
- * Type: TEXT - */ - public static final String OAUTH_TOKEN_SECRET = "oauth_token_secret"; + public static final String COLOR = "color"; - public static final String COLOR = "color"; + /** + * Set to a non-zero integer if the account is activated.
+ * Type: INTEGER (boolean) + */ + public static final String IS_ACTIVATED = "is_activated"; - /** - * Set to a non-zero integer if the account is activated.
- * Type: INTEGER (boolean) - */ - public static final String IS_ACTIVATED = "is_activated"; + public static final String CONSUMER_KEY = "consumer_key"; - public static final String CONSUMER_KEY = "consumer_key"; + public static final String CONSUMER_SECRET = "consumer_secret"; - public static final String CONSUMER_SECRET = "consumer_secret"; + /** + * User's profile image URL of the status.
+ * Type: TEXT + */ + public static final String PROFILE_IMAGE_URL = "profile_image_url"; - /** - * User's profile image URL of the status.
- * Type: TEXT - */ - public static final String PROFILE_IMAGE_URL = "profile_image_url"; + public static final String PROFILE_BANNER_URL = "profile_banner_url"; + public static final String API_URL_FORMAT = "api_url_format"; + public static final String SAME_OAUTH_SIGNING_URL = "same_oauth_signing_url"; + public static final String NO_VERSION_SUFFIX = "no_version_suffix"; - public static final String PROFILE_BANNER_URL = "profile_banner_url"; - public static final String API_URL_FORMAT = "api_url_format"; - public static final String SAME_OAUTH_SIGNING_URL = "same_oauth_signing_url"; + public static final String[] COLUMNS_NO_CREDENTIALS = new String[]{_ID, NAME, SCREEN_NAME, ACCOUNT_ID, + PROFILE_IMAGE_URL, PROFILE_BANNER_URL, COLOR, IS_ACTIVATED}; - public static final String[] COLUMNS_NO_CREDENTIALS = new String[] { _ID, NAME, SCREEN_NAME, ACCOUNT_ID, - PROFILE_IMAGE_URL, PROFILE_BANNER_URL, COLOR, IS_ACTIVATED }; + public static final String[] COLUMNS = new String[]{_ID, NAME, SCREEN_NAME, ACCOUNT_ID, AUTH_TYPE, + BASIC_AUTH_USERNAME, BASIC_AUTH_PASSWORD, OAUTH_TOKEN, OAUTH_TOKEN_SECRET, CONSUMER_KEY, + CONSUMER_SECRET, API_URL_FORMAT, SAME_OAUTH_SIGNING_URL, NO_VERSION_SUFFIX, PROFILE_IMAGE_URL, PROFILE_BANNER_URL, COLOR, + IS_ACTIVATED}; - public static final String[] COLUMNS = new String[] { _ID, NAME, SCREEN_NAME, ACCOUNT_ID, AUTH_TYPE, - BASIC_AUTH_USERNAME, BASIC_AUTH_PASSWORD, OAUTH_TOKEN, OAUTH_TOKEN_SECRET, CONSUMER_KEY, - CONSUMER_SECRET, API_URL_FORMAT, SAME_OAUTH_SIGNING_URL, PROFILE_IMAGE_URL, PROFILE_BANNER_URL, COLOR, - IS_ACTIVATED }; + public static final String[] TYPES = new String[]{TYPE_PRIMARY_KEY, TYPE_TEXT_NOT_NULL, TYPE_TEXT_NOT_NULL, + TYPE_INT_UNIQUE, TYPE_INT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, + TYPE_BOOLEAN, TYPE_BOOLEAN, TYPE_TEXT, TYPE_TEXT, TYPE_INT, TYPE_BOOLEAN}; - public static final String[] TYPES = new String[] { TYPE_PRIMARY_KEY, TYPE_TEXT_NOT_NULL, TYPE_TEXT_NOT_NULL, - TYPE_INT_UNIQUE, TYPE_INT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, - TYPE_BOOLEAN, TYPE_TEXT, TYPE_TEXT, TYPE_INT, TYPE_BOOLEAN }; + } - } + public static interface CachedHashtags extends CachedValues { - public static interface CachedHashtags extends CachedValues { + public static final String[] COLUMNS = new String[]{_ID, NAME}; + public static final String[] TYPES = new String[]{TYPE_PRIMARY_KEY, TYPE_TEXT}; - public static final String[] COLUMNS = new String[] { _ID, NAME }; - public static final String[] TYPES = new String[] { TYPE_PRIMARY_KEY, TYPE_TEXT }; + public static final String TABLE_NAME = "cached_hashtags"; + public static final String CONTENT_PATH = TABLE_NAME; - public static final String TABLE_NAME = "cached_hashtags"; - public static final String CONTENT_PATH = TABLE_NAME; + public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); + } - public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); - } + public static interface CachedImages extends BaseColumns { + public static final String TABLE_NAME = "cached_images"; + public static final String CONTENT_PATH = TABLE_NAME; - public static interface CachedImages extends BaseColumns { - public static final String TABLE_NAME = "cached_images"; - public static final String CONTENT_PATH = TABLE_NAME; + public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); - public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); + public static final String URL = "url"; - public static final String URL = "url"; + public static final String PATH = "path"; - public static final String PATH = "path"; + public static final String[] MATRIX_COLUMNS = new String[]{URL, PATH}; - public static final String[] MATRIX_COLUMNS = new String[] { URL, PATH }; + public static final String[] COLUMNS = new String[]{_ID, URL, PATH}; + } - public static final String[] COLUMNS = new String[] { _ID, URL, PATH }; - } + public static interface CachedStatuses extends Statuses { + public static final String TABLE_NAME = "cached_statuses"; + public static final String CONTENT_PATH = TABLE_NAME; - public static interface CachedStatuses extends Statuses { - public static final String TABLE_NAME = "cached_statuses"; - public static final String CONTENT_PATH = TABLE_NAME; + public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); + } - public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); - } + public static interface CachedTrends extends CachedValues { - public static interface CachedTrends extends CachedValues { + public static final String TIMESTAMP = "timestamp"; - public static final String TIMESTAMP = "timestamp"; + public static final String[] COLUMNS = new String[]{_ID, NAME, TIMESTAMP}; + public static final String[] TYPES = new String[]{TYPE_PRIMARY_KEY, TYPE_TEXT, TYPE_INT}; - public static final String[] COLUMNS = new String[] { _ID, NAME, TIMESTAMP }; - public static final String[] TYPES = new String[] { TYPE_PRIMARY_KEY, TYPE_TEXT, TYPE_INT }; + public static interface Local extends CachedTrends { + public static final String TABLE_NAME = "local_trends"; + public static final String CONTENT_PATH = TABLE_NAME; - public static interface Local extends CachedTrends { - public static final String TABLE_NAME = "local_trends"; - public static final String CONTENT_PATH = TABLE_NAME; + public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); - public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); + } - } + } - } + public static interface CachedUsers extends CachedValues { - public static interface CachedUsers extends CachedValues { + public static final String TABLE_NAME = "cached_users"; + public static final String CONTENT_PATH = TABLE_NAME; - public static final String TABLE_NAME = "cached_users"; - public static final String CONTENT_PATH = TABLE_NAME; + public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); - public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); + public static final String USER_ID = "user_id"; - public static final String USER_ID = "user_id"; + public static final String CREATED_AT = "created_at"; - public static final String CREATED_AT = "created_at"; + public static final String IS_PROTECTED = "is_protected"; - public static final String IS_PROTECTED = "is_protected"; + public static final String IS_VERIFIED = "is_verified"; - public static final String IS_VERIFIED = "is_verified"; + public static final String IS_FOLLOWING = "is_following"; - public static final String IS_FOLLOWING = "is_following"; + public static final String DESCRIPTION_PLAIN = "description_plain"; - public static final String DESCRIPTION_PLAIN = "description_plain"; + public static final String DESCRIPTION_HTML = "description_html"; - public static final String DESCRIPTION_HTML = "description_html"; + public static final String DESCRIPTION_EXPANDED = "description_expanded"; - public static final String DESCRIPTION_EXPANDED = "description_expanded"; + public static final String LOCATION = "location"; - public static final String LOCATION = "location"; + public static final String URL = "url"; - public static final String URL = "url"; + public static final String URL_EXPANDED = "url_expanded"; - public static final String URL_EXPANDED = "url_expanded"; + public static final String PROFILE_BANNER_URL = "profile_banner_url"; - public static final String PROFILE_BANNER_URL = "profile_banner_url"; + public static final String FOLLOWERS_COUNT = "followers_count"; - public static final String FOLLOWERS_COUNT = "followers_count"; + public static final String FRIENDS_COUNT = "friends_count"; - public static final String FRIENDS_COUNT = "friends_count"; + public static final String STATUSES_COUNT = "statuses_count"; - public static final String STATUSES_COUNT = "statuses_count"; + public static final String FAVORITES_COUNT = "favorites_count"; - public static final String FAVORITES_COUNT = "favorites_count"; + /** + * User's screen name of the status.
+ * Type: TEXT + */ + public static final String SCREEN_NAME = "screen_name"; - /** - * User's screen name of the status.
- * Type: TEXT - */ - public static final String SCREEN_NAME = "screen_name"; + /** + * User's profile image URL of the status.
+ * Type: TEXT NOT NULL + */ + public static final String PROFILE_IMAGE_URL = "profile_image_url"; - /** - * User's profile image URL of the status.
- * Type: TEXT NOT NULL - */ - public static final String PROFILE_IMAGE_URL = "profile_image_url"; + public static final String[] COLUMNS = new String[]{_ID, USER_ID, CREATED_AT, NAME, SCREEN_NAME, + DESCRIPTION_PLAIN, LOCATION, URL, PROFILE_IMAGE_URL, PROFILE_BANNER_URL, IS_PROTECTED, IS_VERIFIED, + IS_FOLLOWING, FOLLOWERS_COUNT, FRIENDS_COUNT, STATUSES_COUNT, FAVORITES_COUNT, DESCRIPTION_HTML, + DESCRIPTION_EXPANDED, URL_EXPANDED}; - public static final String[] COLUMNS = new String[] { _ID, USER_ID, CREATED_AT, NAME, SCREEN_NAME, - DESCRIPTION_PLAIN, LOCATION, URL, PROFILE_IMAGE_URL, PROFILE_BANNER_URL, IS_PROTECTED, IS_VERIFIED, - IS_FOLLOWING, FOLLOWERS_COUNT, FRIENDS_COUNT, STATUSES_COUNT, FAVORITES_COUNT, DESCRIPTION_HTML, - DESCRIPTION_EXPANDED, URL_EXPANDED }; + public static final String[] TYPES = new String[]{TYPE_PRIMARY_KEY, TYPE_INT_UNIQUE, TYPE_INT, TYPE_TEXT, + TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_BOOLEAN, TYPE_BOOLEAN, + TYPE_BOOLEAN, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT}; - public static final String[] TYPES = new String[] { TYPE_PRIMARY_KEY, TYPE_INT_UNIQUE, TYPE_INT, TYPE_TEXT, - TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_BOOLEAN, TYPE_BOOLEAN, - TYPE_BOOLEAN, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT }; + } - } + public static interface CachedValues extends BaseColumns { - public static interface CachedValues extends BaseColumns { + public static final String NAME = "name"; + } - public static final String NAME = "name"; - } + public static interface CacheFiles extends BaseColumns { + public static final String TABLE_NAME = "cache_files"; + public static final String CONTENT_PATH = TABLE_NAME; - public static interface CacheFiles extends BaseColumns { - public static final String TABLE_NAME = "cache_files"; - public static final String CONTENT_PATH = TABLE_NAME; + public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); - public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); + public static final String NAME = "name"; - public static final String NAME = "name"; + public static final String PATH = "path"; - public static final String PATH = "path"; + public static final String[] MATRIX_COLUMNS = new String[]{NAME, PATH}; - public static final String[] MATRIX_COLUMNS = new String[] { NAME, PATH }; + public static final String[] COLUMNS = new String[]{_ID, NAME, PATH}; + } - public static final String[] COLUMNS = new String[] { _ID, NAME, PATH }; - } + public static interface DirectMessages extends BaseColumns { - public static interface DirectMessages extends BaseColumns { + public static final String TABLE_NAME = "messages"; + public static final String CONTENT_PATH = TABLE_NAME; - public static final String TABLE_NAME = "messages"; - public static final String CONTENT_PATH = TABLE_NAME; + public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); - public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); + public static final String ACCOUNT_ID = "account_id"; + public static final String MESSAGE_ID = "message_id"; + public static final String MESSAGE_TIMESTAMP = "message_timestamp"; + public static final String SENDER_ID = "sender_id"; + public static final String RECIPIENT_ID = "recipient_id"; - public static final String ACCOUNT_ID = "account_id"; - public static final String MESSAGE_ID = "message_id"; - public static final String MESSAGE_TIMESTAMP = "message_timestamp"; - public static final String SENDER_ID = "sender_id"; - public static final String RECIPIENT_ID = "recipient_id"; + public static final String IS_OUTGOING = "is_outgoing"; - public static final String IS_OUTGOING = "is_outgoing"; + public static final String TEXT_HTML = "text_html"; + public static final String TEXT_PLAIN = "text_plain"; + public static final String TEXT_UNESCAPED = "text_unescaped"; + public static final String SENDER_NAME = "sender_name"; + public static final String RECIPIENT_NAME = "recipient_name"; + public static final String SENDER_SCREEN_NAME = "sender_screen_name"; + public static final String RECIPIENT_SCREEN_NAME = "recipient_screen_name"; + public static final String SENDER_PROFILE_IMAGE_URL = "sender_profile_image_url"; + public static final String RECIPIENT_PROFILE_IMAGE_URL = "recipient_profile_image_url"; - public static final String TEXT_HTML = "text_html"; - public static final String TEXT_PLAIN = "text_plain"; - public static final String TEXT_UNESCAPED = "text_unescaped"; - public static final String SENDER_NAME = "sender_name"; - public static final String RECIPIENT_NAME = "recipient_name"; - public static final String SENDER_SCREEN_NAME = "sender_screen_name"; - public static final String RECIPIENT_SCREEN_NAME = "recipient_screen_name"; - public static final String SENDER_PROFILE_IMAGE_URL = "sender_profile_image_url"; - public static final String RECIPIENT_PROFILE_IMAGE_URL = "recipient_profile_image_url"; + public static final String MEDIAS = "medias"; - public static final String MEDIAS = "medias"; + public static final String FIRST_MEDIA = "first_media"; - public static final String FIRST_MEDIA = "first_media"; + public static final String[] COLUMNS = new String[]{_ID, ACCOUNT_ID, MESSAGE_ID, MESSAGE_TIMESTAMP, + SENDER_ID, RECIPIENT_ID, IS_OUTGOING, TEXT_HTML, TEXT_PLAIN, TEXT_UNESCAPED, SENDER_NAME, + RECIPIENT_NAME, SENDER_SCREEN_NAME, RECIPIENT_SCREEN_NAME, SENDER_PROFILE_IMAGE_URL, + RECIPIENT_PROFILE_IMAGE_URL, MEDIAS, FIRST_MEDIA}; + public static final String[] TYPES = new String[]{TYPE_PRIMARY_KEY, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, + TYPE_INT, TYPE_BOOLEAN, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, + TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT}; - public static final String[] COLUMNS = new String[] { _ID, ACCOUNT_ID, MESSAGE_ID, MESSAGE_TIMESTAMP, - SENDER_ID, RECIPIENT_ID, IS_OUTGOING, TEXT_HTML, TEXT_PLAIN, TEXT_UNESCAPED, SENDER_NAME, - RECIPIENT_NAME, SENDER_SCREEN_NAME, RECIPIENT_SCREEN_NAME, SENDER_PROFILE_IMAGE_URL, - RECIPIENT_PROFILE_IMAGE_URL, MEDIAS, FIRST_MEDIA }; - public static final String[] TYPES = new String[] { TYPE_PRIMARY_KEY, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, - TYPE_INT, TYPE_BOOLEAN, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, - TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT }; + public static final String DEFAULT_SORT_ORDER = MESSAGE_ID + " DESC"; - public static final String DEFAULT_SORT_ORDER = MESSAGE_ID + " DESC"; + public static interface Conversation extends DirectMessages { - public static interface Conversation extends DirectMessages { + public static final String DEFAULT_SORT_ORDER = MESSAGE_TIMESTAMP + " ASC"; - public static final String DEFAULT_SORT_ORDER = MESSAGE_TIMESTAMP + " ASC"; + public static final String CONTENT_PATH_SEGMENT = "conversation"; + public static final String CONTENT_PATH_SEGMENT_SCREEN_NAME = "conversation_screen_name"; - public static final String CONTENT_PATH_SEGMENT = "conversation"; - public static final String CONTENT_PATH_SEGMENT_SCREEN_NAME = "conversation_screen_name"; + public static final String CONTENT_PATH = DirectMessages.CONTENT_PATH + "/" + CONTENT_PATH_SEGMENT; + public static final String CONTENT_PATH_SCREEN_NAME = DirectMessages.CONTENT_PATH + "/" + + CONTENT_PATH_SEGMENT_SCREEN_NAME; - public static final String CONTENT_PATH = DirectMessages.CONTENT_PATH + "/" + CONTENT_PATH_SEGMENT; - public static final String CONTENT_PATH_SCREEN_NAME = DirectMessages.CONTENT_PATH + "/" - + CONTENT_PATH_SEGMENT_SCREEN_NAME; + public static final Uri CONTENT_URI = Uri + .withAppendedPath(DirectMessages.CONTENT_URI, CONTENT_PATH_SEGMENT); - public static final Uri CONTENT_URI = Uri - .withAppendedPath(DirectMessages.CONTENT_URI, CONTENT_PATH_SEGMENT); + public static final Uri CONTENT_URI_SCREEN_NAME = Uri.withAppendedPath(DirectMessages.CONTENT_URI, + CONTENT_PATH_SEGMENT_SCREEN_NAME); + } - public static final Uri CONTENT_URI_SCREEN_NAME = Uri.withAppendedPath(DirectMessages.CONTENT_URI, - CONTENT_PATH_SEGMENT_SCREEN_NAME); - } + public static interface ConversationEntries extends BaseColumns { - public static interface ConversationEntries extends BaseColumns { + public static final String TABLE_NAME = "messages_conversation_entries"; - public static final String TABLE_NAME = "messages_conversation_entries"; + public static final String CONTENT_PATH_SEGMENT = "conversation_entries"; + public static final String CONTENT_PATH = DirectMessages.CONTENT_PATH + "/" + CONTENT_PATH_SEGMENT; - public static final String CONTENT_PATH_SEGMENT = "conversation_entries"; - public static final String CONTENT_PATH = DirectMessages.CONTENT_PATH + "/" + CONTENT_PATH_SEGMENT; + public static final Uri CONTENT_URI = Uri + .withAppendedPath(DirectMessages.CONTENT_URI, CONTENT_PATH_SEGMENT); - public static final Uri CONTENT_URI = Uri - .withAppendedPath(DirectMessages.CONTENT_URI, CONTENT_PATH_SEGMENT); + public static final String MESSAGE_TIMESTAMP = "message_timestamp"; + public static final String NAME = "name"; + public static final String SCREEN_NAME = "screen_name"; + public static final String PROFILE_IMAGE_URL = "profile_image_url"; + public static final String TEXT_HTML = "text_html"; + public static final String CONVERSATION_ID = "conversation_id"; - public static final String MESSAGE_TIMESTAMP = "message_timestamp"; - public static final String NAME = "name"; - public static final String SCREEN_NAME = "screen_name"; - public static final String PROFILE_IMAGE_URL = "profile_image_url"; - public static final String TEXT_HTML = "text_html"; - public static final String CONVERSATION_ID = "conversation_id"; + public static final int IDX__ID = 0; + public static final int IDX_MESSAGE_TIMESTAMP = 1; + public static final int IDX_MESSAGE_ID = 2; + public static final int IDX_ACCOUNT_ID = 3; + public static final int IDX_IS_OUTGOING = 4; + public static final int IDX_NAME = 5; + public static final int IDX_SCREEN_NAME = 6; + public static final int IDX_PROFILE_IMAGE_URL = 7; + public static final int IDX_TEXT = 8; + public static final int IDX_CONVERSATION_ID = 9; + } - public static final int IDX__ID = 0; - public static final int IDX_MESSAGE_TIMESTAMP = 1; - public static final int IDX_MESSAGE_ID = 2; - public static final int IDX_ACCOUNT_ID = 3; - public static final int IDX_IS_OUTGOING = 4; - public static final int IDX_NAME = 5; - public static final int IDX_SCREEN_NAME = 6; - public static final int IDX_PROFILE_IMAGE_URL = 7; - public static final int IDX_TEXT = 8; - public static final int IDX_CONVERSATION_ID = 9; - } + public static interface Inbox extends DirectMessages { - public static interface Inbox extends DirectMessages { + public static final String TABLE_NAME = "messages_inbox"; - public static final String TABLE_NAME = "messages_inbox"; + public static final String CONTENT_PATH_SEGMENT = "inbox"; + public static final String CONTENT_PATH = DirectMessages.CONTENT_PATH + "/" + CONTENT_PATH_SEGMENT; - public static final String CONTENT_PATH_SEGMENT = "inbox"; - public static final String CONTENT_PATH = DirectMessages.CONTENT_PATH + "/" + CONTENT_PATH_SEGMENT; + public static final Uri CONTENT_URI = Uri + .withAppendedPath(DirectMessages.CONTENT_URI, CONTENT_PATH_SEGMENT); - public static final Uri CONTENT_URI = Uri - .withAppendedPath(DirectMessages.CONTENT_URI, CONTENT_PATH_SEGMENT); + } - } + public static interface Outbox extends DirectMessages { - public static interface Outbox extends DirectMessages { + public static final String TABLE_NAME = "messages_outbox"; - public static final String TABLE_NAME = "messages_outbox"; + public static final String CONTENT_PATH_SEGMENT = "outbox"; + public static final String CONTENT_PATH = DirectMessages.CONTENT_PATH + "/" + CONTENT_PATH_SEGMENT; - public static final String CONTENT_PATH_SEGMENT = "outbox"; - public static final String CONTENT_PATH = DirectMessages.CONTENT_PATH + "/" + CONTENT_PATH_SEGMENT; + public static final Uri CONTENT_URI = Uri + .withAppendedPath(DirectMessages.CONTENT_URI, CONTENT_PATH_SEGMENT); - public static final Uri CONTENT_URI = Uri - .withAppendedPath(DirectMessages.CONTENT_URI, CONTENT_PATH_SEGMENT); + } - } + } - } + public static interface DNS extends BaseColumns { + public static final String TABLE_NAME = "dns"; + public static final String CONTENT_PATH = TABLE_NAME; - public static interface DNS extends BaseColumns { - public static final String TABLE_NAME = "dns"; - public static final String CONTENT_PATH = TABLE_NAME; + public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); - public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); + public static final String HOST = "host"; - public static final String HOST = "host"; + public static final String ADDRESS = "address"; - public static final String ADDRESS = "address"; + public static final String[] MATRIX_COLUMNS = new String[]{HOST, ADDRESS}; - public static final String[] MATRIX_COLUMNS = new String[] { HOST, ADDRESS }; + public static final String[] COLUMNS = new String[]{_ID, HOST, ADDRESS}; + } - public static final String[] COLUMNS = new String[] { _ID, HOST, ADDRESS }; - } + public static interface Drafts extends BaseColumns { - public static interface Drafts extends BaseColumns { + public static final int ACTION_UPDATE_STATUS = 1; + public static final int ACTION_SEND_DIRECT_MESSAGE = 2; + public static final int ACTION_CREATE_FRIENDSHIP = 3; - public static final int ACTION_UPDATE_STATUS = 1; - public static final int ACTION_SEND_DIRECT_MESSAGE = 2; - public static final int ACTION_CREATE_FRIENDSHIP = 3; + public static final String TABLE_NAME = "drafts"; + public static final String CONTENT_PATH = TABLE_NAME; - public static final String TABLE_NAME = "drafts"; - public static final String CONTENT_PATH = TABLE_NAME; + public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); - public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); + /** + * Status content.
+ * Type: TEXT + */ + public static final String TEXT = "text"; - /** - * Status content.
- * Type: TEXT - */ - public static final String TEXT = "text"; + /** + * Account IDs of unsent status.
+ * Type: TEXT + */ + public static final String ACCOUNT_IDS = "account_ids"; - /** - * Account IDs of unsent status.
- * Type: TEXT - */ - public static final String ACCOUNT_IDS = "account_ids"; + public static final String LOCATION = "location"; - public static final String LOCATION = "location"; + public static final String IN_REPLY_TO_STATUS_ID = "in_reply_to_status_id"; - public static final String IN_REPLY_TO_STATUS_ID = "in_reply_to_status_id"; + public static final String MEDIAS = "medias"; - public static final String MEDIAS = "medias"; + public static final String IS_POSSIBLY_SENSITIVE = "is_possibly_sensitive"; - public static final String IS_POSSIBLY_SENSITIVE = "is_possibly_sensitive"; + public static final String TIMESTAMP = "timestamp"; - public static final String TIMESTAMP = "timestamp"; + public static final String ACTION_TYPE = "action_type"; - public static final String ACTION_TYPE = "action_type"; + public static final String ACTION_EXTRAS = "action_extras"; - public static final String ACTION_EXTRAS = "action_extras"; + public static final String[] COLUMNS = new String[]{_ID, TEXT, ACCOUNT_IDS, LOCATION, MEDIAS, + IN_REPLY_TO_STATUS_ID, IS_POSSIBLY_SENSITIVE, TIMESTAMP, ACTION_TYPE, ACTION_EXTRAS}; - public static final String[] COLUMNS = new String[] { _ID, TEXT, ACCOUNT_IDS, LOCATION, MEDIAS, - IN_REPLY_TO_STATUS_ID, IS_POSSIBLY_SENSITIVE, TIMESTAMP, ACTION_TYPE, ACTION_EXTRAS }; + public static final String[] TYPES = new String[]{TYPE_PRIMARY_KEY, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, + TYPE_INT, TYPE_INT, TYPE_BOOLEAN, TYPE_INT, TYPE_INT, TYPE_TEXT}; - public static final String[] TYPES = new String[] { TYPE_PRIMARY_KEY, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, - TYPE_INT, TYPE_INT, TYPE_BOOLEAN, TYPE_INT, TYPE_INT, TYPE_TEXT }; + } - } + public static interface Filters extends BaseColumns { - public static interface Filters extends BaseColumns { + public static final String CONTENT_PATH = "filters"; - public static final String CONTENT_PATH = "filters"; + public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); - public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); + public static final String VALUE = "value"; - public static final String VALUE = "value"; + public static final String ENABLE_IN_HOME_TIMELINE = "enable_in_home_timeline"; - public static final String ENABLE_IN_HOME_TIMELINE = "enable_in_home_timeline"; + public static final String ENABLE_IN_MENTIONS = "enable_in_mentions"; - public static final String ENABLE_IN_MENTIONS = "enable_in_mentions"; + public static final String ENABLE_FOR_RETWEETS = "enable_for_retweets"; - public static final String ENABLE_FOR_RETWEETS = "enable_for_retweets"; + public static final String[] COLUMNS = new String[]{_ID, VALUE}; - public static final String[] COLUMNS = new String[] { _ID, VALUE }; + public static final String[] TYPES = new String[]{TYPE_PRIMARY_KEY, TYPE_TEXT_NOT_NULL_UNIQUE}; - public static final String[] TYPES = new String[] { TYPE_PRIMARY_KEY, TYPE_TEXT_NOT_NULL_UNIQUE }; + public static interface Keywords extends Filters { - public static interface Keywords extends Filters { + public static final String TABLE_NAME = "filtered_keywords"; + public static final String CONTENT_PATH_SEGMENT = "keywords"; + public static final String CONTENT_PATH = Filters.CONTENT_PATH + "/" + CONTENT_PATH_SEGMENT; + public static final Uri CONTENT_URI = Uri.withAppendedPath(Filters.CONTENT_URI, CONTENT_PATH_SEGMENT); + } - public static final String TABLE_NAME = "filtered_keywords"; - public static final String CONTENT_PATH_SEGMENT = "keywords"; - public static final String CONTENT_PATH = Filters.CONTENT_PATH + "/" + CONTENT_PATH_SEGMENT; - public static final Uri CONTENT_URI = Uri.withAppendedPath(Filters.CONTENT_URI, CONTENT_PATH_SEGMENT); - } + public static interface Links extends Filters { - public static interface Links extends Filters { + public static final String TABLE_NAME = "filtered_links"; + public static final String CONTENT_PATH_SEGMENT = "links"; + public static final String CONTENT_PATH = Filters.CONTENT_PATH + "/" + CONTENT_PATH_SEGMENT; + public static final Uri CONTENT_URI = Uri.withAppendedPath(Filters.CONTENT_URI, CONTENT_PATH_SEGMENT); + } - public static final String TABLE_NAME = "filtered_links"; - public static final String CONTENT_PATH_SEGMENT = "links"; - public static final String CONTENT_PATH = Filters.CONTENT_PATH + "/" + CONTENT_PATH_SEGMENT; - public static final Uri CONTENT_URI = Uri.withAppendedPath(Filters.CONTENT_URI, CONTENT_PATH_SEGMENT); - } + public static interface Sources extends Filters { - public static interface Sources extends Filters { + public static final String TABLE_NAME = "filtered_sources"; + public static final String CONTENT_PATH_SEGMENT = "sources"; + public static final String CONTENT_PATH = Filters.CONTENT_PATH + "/" + CONTENT_PATH_SEGMENT; + public static final Uri CONTENT_URI = Uri.withAppendedPath(Filters.CONTENT_URI, CONTENT_PATH_SEGMENT); + } - public static final String TABLE_NAME = "filtered_sources"; - public static final String CONTENT_PATH_SEGMENT = "sources"; - public static final String CONTENT_PATH = Filters.CONTENT_PATH + "/" + CONTENT_PATH_SEGMENT; - public static final Uri CONTENT_URI = Uri.withAppendedPath(Filters.CONTENT_URI, CONTENT_PATH_SEGMENT); - } + public static interface Users extends BaseColumns { - public static interface Users extends BaseColumns { + public static final String TABLE_NAME = "filtered_users"; + public static final String CONTENT_PATH_SEGMENT = "users"; + public static final String CONTENT_PATH = Filters.CONTENT_PATH + "/" + CONTENT_PATH_SEGMENT; + public static final Uri CONTENT_URI = Uri.withAppendedPath(Filters.CONTENT_URI, CONTENT_PATH_SEGMENT); - public static final String TABLE_NAME = "filtered_users"; - public static final String CONTENT_PATH_SEGMENT = "users"; - public static final String CONTENT_PATH = Filters.CONTENT_PATH + "/" + CONTENT_PATH_SEGMENT; - public static final Uri CONTENT_URI = Uri.withAppendedPath(Filters.CONTENT_URI, CONTENT_PATH_SEGMENT); + public static final String USER_ID = "user_id"; + public static final String NAME = "name"; + public static final String SCREEN_NAME = "screen_name"; - public static final String USER_ID = "user_id"; - public static final String NAME = "name"; - public static final String SCREEN_NAME = "screen_name"; + public static final String[] COLUMNS = new String[]{_ID, USER_ID, NAME, SCREEN_NAME}; - public static final String[] COLUMNS = new String[] { _ID, USER_ID, NAME, SCREEN_NAME }; + public static final String[] TYPES = new String[]{TYPE_PRIMARY_KEY, TYPE_INT_UNIQUE, TYPE_TEXT_NOT_NULL, + TYPE_TEXT_NOT_NULL}; + } + } - public static final String[] TYPES = new String[] { TYPE_PRIMARY_KEY, TYPE_INT_UNIQUE, TYPE_TEXT_NOT_NULL, - TYPE_TEXT_NOT_NULL }; - } - } + public static interface Mentions extends Statuses { - public static interface Mentions extends Statuses { + public static final String TABLE_NAME = "mentions"; + public static final String CONTENT_PATH = TABLE_NAME; - public static final String TABLE_NAME = "mentions"; - public static final String CONTENT_PATH = TABLE_NAME; + public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); - public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); + } - } + public static interface Notifications extends BaseColumns { - public static interface Notifications extends BaseColumns { + public static final String TABLE_NAME = "notifications"; - public static final String TABLE_NAME = "notifications"; + public static final String CONTENT_PATH = TABLE_NAME; - public static final String CONTENT_PATH = TABLE_NAME; + public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); - public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); + public static final String ID = "id"; - public static final String ID = "id"; + public static final String COUNT = "count"; - public static final String COUNT = "count"; + public static final String[] MATRIX_COLUMNS = new String[]{ID, COUNT}; - public static final String[] MATRIX_COLUMNS = new String[] { ID, COUNT }; + public static final String[] COLUMNS = new String[]{_ID, ID, COUNT}; + } - public static final String[] COLUMNS = new String[] { _ID, ID, COUNT }; - } + public static interface Permissions extends BaseColumns { + public static final String TABLE_NAME = "permissions"; + public static final String CONTENT_PATH = TABLE_NAME; - public static interface Permissions extends BaseColumns { - public static final String TABLE_NAME = "permissions"; - public static final String CONTENT_PATH = TABLE_NAME; + public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); - public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); + public static final String PERMISSION = "permissions"; - public static final String PERMISSION = "permissions"; + public static final String PACKAGE_NAME = "package_name"; - public static final String PACKAGE_NAME = "package_name"; + public static final String[] MATRIX_COLUMNS = new String[]{PACKAGE_NAME, PERMISSION}; - public static final String[] MATRIX_COLUMNS = new String[] { PACKAGE_NAME, PERMISSION }; + public static final String[] COLUMNS = new String[]{_ID, PACKAGE_NAME, PERMISSION}; + } - public static final String[] COLUMNS = new String[] { _ID, PACKAGE_NAME, PERMISSION }; - } + public static interface Preferences extends BaseColumns { + public static final String TABLE_NAME = "preferences"; + public static final String CONTENT_PATH = TABLE_NAME; - public static interface Preferences extends BaseColumns { - public static final String TABLE_NAME = "preferences"; - public static final String CONTENT_PATH = TABLE_NAME; + public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); - public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); + public static final int TYPE_INVALID = -1; - public static final int TYPE_INVALID = -1; + public static final int TYPE_NULL = 0; - public static final int TYPE_NULL = 0; + public static final int TYPE_BOOLEAN = 1; - public static final int TYPE_BOOLEAN = 1; + public static final int TYPE_INTEGER = 2; - public static final int TYPE_INTEGER = 2; + public static final int TYPE_LONG = 3; - public static final int TYPE_LONG = 3; + public static final int TYPE_FLOAT = 4; - public static final int TYPE_FLOAT = 4; + public static final int TYPE_STRING = 5; - public static final int TYPE_STRING = 5; + public static final String KEY = "key"; - public static final String KEY = "key"; + public static final String VALUE = "value"; - public static final String VALUE = "value"; + public static final String TYPE = "type"; - public static final String TYPE = "type"; + public static final String[] MATRIX_COLUMNS = new String[]{KEY, VALUE, TYPE}; - public static final String[] MATRIX_COLUMNS = new String[] { KEY, VALUE, TYPE }; + public static final String[] COLUMNS = new String[]{_ID, KEY, VALUE, TYPE}; + } - public static final String[] COLUMNS = new String[] { _ID, KEY, VALUE, TYPE }; - } + public static interface Statuses extends BaseColumns { - public static interface Statuses extends BaseColumns { + public static final String TABLE_NAME = "statuses"; + public static final String CONTENT_PATH = TABLE_NAME; - public static final String TABLE_NAME = "statuses"; - public static final String CONTENT_PATH = TABLE_NAME; + public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); + /** + * Account ID of the status.
+ * Type: TEXT + */ + public static final String ACCOUNT_ID = "account_id"; - public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); - /** - * Account ID of the status.
- * Type: TEXT - */ - public static final String ACCOUNT_ID = "account_id"; + /** + * Status content, in HTML. Please note, this is not actually original + * text.
+ * Type: TEXT + */ + public static final String TEXT_HTML = "text_html"; - /** - * Status content, in HTML. Please note, this is not actually original - * text.
- * Type: TEXT - */ - public static final String TEXT_HTML = "text_html"; + /** + * + */ + public static final String TEXT_PLAIN = "text_plain"; - /** - * - */ - public static final String TEXT_PLAIN = "text_plain"; + public static final String TEXT_UNESCAPED = "text_unescaped"; - public static final String TEXT_UNESCAPED = "text_unescaped"; + /** + * User name of the status.
+ * Type: TEXT + */ + public static final String USER_NAME = "name"; - /** - * User name of the status.
- * Type: TEXT - */ - public static final String USER_NAME = "name"; + /** + * User's screen name of the status.
+ * Type: TEXT + */ + public static final String USER_SCREEN_NAME = "screen_name"; - /** - * User's screen name of the status.
- * Type: TEXT - */ - public static final String USER_SCREEN_NAME = "screen_name"; + /** + * User's profile image URL of the status.
+ * Type: TEXT NOT NULL + */ + public static final String USER_PROFILE_IMAGE_URL = "profile_image_url"; - /** - * User's profile image URL of the status.
- * Type: TEXT NOT NULL - */ - public static final String USER_PROFILE_IMAGE_URL = "profile_image_url"; + /** + * Unique id of the status.
+ * Type: INTEGER UNIQUE(long) + */ + public static final String STATUS_ID = "status_id"; - /** - * Unique id of the status.
- * Type: INTEGER UNIQUE(long) - */ - public static final String STATUS_ID = "status_id"; + /** + * Retweet count of the status.
+ * Type: INTEGER (long) + */ + public static final String RETWEET_COUNT = "retweet_count"; + public static final String FAVORITE_COUNT = "favorite_count"; - /** - * Retweet count of the status.
- * Type: INTEGER (long) - */ - public static final String RETWEET_COUNT = "retweet_count"; - public static final String FAVORITE_COUNT = "favorite_count"; + /** + * Set to an non-zero integer if the status is a retweet, set to + * negative value if the status is retweeted by user.
+ * Type: INTEGER + */ + public static final String IS_RETWEET = "is_retweet"; - /** - * Set to an non-zero integer if the status is a retweet, set to - * negative value if the status is retweeted by user.
- * Type: INTEGER - */ - public static final String IS_RETWEET = "is_retweet"; + /** + * Set to 1 if the status is a favorite.
+ * Type: INTEGER (boolean) + */ + public static final String IS_FAVORITE = "is_favorite"; - /** - * Set to 1 if the status is a favorite.
- * Type: INTEGER (boolean) - */ - public static final String IS_FAVORITE = "is_favorite"; + public static final String IS_POSSIBLY_SENSITIVE = "is_possibly_sensitive"; - public static final String IS_POSSIBLY_SENSITIVE = "is_possibly_sensitive"; + /** + * Set to 1 if the status is a gap.
+ * Type: INTEGER (boolean) + */ + public static final String IS_GAP = "is_gap"; - /** - * Set to 1 if the status is a gap.
- * Type: INTEGER (boolean) - */ - public static final String IS_GAP = "is_gap"; + public static final String LOCATION = "location"; - public static final String LOCATION = "location"; + /** + * User's ID of the status.
+ * Type: INTEGER (long) + */ + public static final String USER_ID = "user_id"; - /** - * User's ID of the status.
- * Type: INTEGER (long) - */ - public static final String USER_ID = "user_id"; + public static final String IN_REPLY_TO_STATUS_ID = "in_reply_to_status_id"; - public static final String IN_REPLY_TO_STATUS_ID = "in_reply_to_status_id"; + public static final String IN_REPLY_TO_USER_ID = "in_reply_to_user_id"; - public static final String IN_REPLY_TO_USER_ID = "in_reply_to_user_id"; + public static final String IN_REPLY_TO_USER_NAME = "in_reply_to_user_name"; - public static final String IN_REPLY_TO_USER_NAME = "in_reply_to_user_name"; + public static final String IN_REPLY_TO_USER_SCREEN_NAME = "in_reply_to_user_screen_name"; - public static final String IN_REPLY_TO_USER_SCREEN_NAME = "in_reply_to_user_screen_name"; + public static final String SOURCE = "source"; - public static final String SOURCE = "source"; + public static final String IS_PROTECTED = "is_protected"; - public static final String IS_PROTECTED = "is_protected"; + public static final String IS_VERIFIED = "is_verified"; - public static final String IS_VERIFIED = "is_verified"; + public static final String IS_FOLLOWING = "is_following"; - public static final String IS_FOLLOWING = "is_following"; + public static final String RETWEET_ID = "retweet_id"; - public static final String RETWEET_ID = "retweet_id"; + public static final String RETWEET_TIMESTAMP = "retweet_timestamp"; - public static final String RETWEET_TIMESTAMP = "retweet_timestamp"; + public static final String RETWEETED_BY_USER_ID = "retweeted_by_user_id"; - public static final String RETWEETED_BY_USER_ID = "retweeted_by_user_id"; + public static final String RETWEETED_BY_USER_NAME = "retweeted_by_user_name"; - public static final String RETWEETED_BY_USER_NAME = "retweeted_by_user_name"; + public static final String RETWEETED_BY_USER_SCREEN_NAME = "retweeted_by_user_screen_name"; - public static final String RETWEETED_BY_USER_SCREEN_NAME = "retweeted_by_user_screen_name"; + /** + * Timestamp of the status.
+ * Type: INTEGER (long) + */ + public static final String STATUS_TIMESTAMP = "status_timestamp"; - /** - * Timestamp of the status.
- * Type: INTEGER (long) - */ - public static final String STATUS_TIMESTAMP = "status_timestamp"; + public static final String MY_RETWEET_ID = "my_retweet_id"; - public static final String MY_RETWEET_ID = "my_retweet_id"; + public static final String MEDIAS = "medias"; - public static final String MEDIAS = "medias"; + public static final String FIRST_MEDIA = "first_media"; - public static final String FIRST_MEDIA = "first_media"; + public static final String MENTIONS = "mentions"; - public static final String MENTIONS = "mentions"; + public static final String SORT_ORDER_TIMESTAMP_DESC = STATUS_TIMESTAMP + " DESC"; - public static final String SORT_ORDER_TIMESTAMP_DESC = STATUS_TIMESTAMP + " DESC"; + public static final String SORT_ORDER_STATUS_ID_DESC = STATUS_ID + " DESC"; - public static final String SORT_ORDER_STATUS_ID_DESC = STATUS_ID + " DESC"; + public static final String DEFAULT_SORT_ORDER = SORT_ORDER_TIMESTAMP_DESC; - public static final String DEFAULT_SORT_ORDER = SORT_ORDER_TIMESTAMP_DESC; + public static final String[] COLUMNS = new String[]{_ID, ACCOUNT_ID, STATUS_ID, USER_ID, STATUS_TIMESTAMP, + TEXT_HTML, TEXT_PLAIN, TEXT_UNESCAPED, USER_NAME, USER_SCREEN_NAME, USER_PROFILE_IMAGE_URL, + IN_REPLY_TO_STATUS_ID, IN_REPLY_TO_USER_ID, IN_REPLY_TO_USER_NAME, IN_REPLY_TO_USER_SCREEN_NAME, + SOURCE, LOCATION, RETWEET_COUNT, FAVORITE_COUNT, RETWEET_ID, RETWEET_TIMESTAMP, RETWEETED_BY_USER_ID, + RETWEETED_BY_USER_NAME, RETWEETED_BY_USER_SCREEN_NAME, MY_RETWEET_ID, IS_RETWEET, IS_FAVORITE, + IS_PROTECTED, IS_VERIFIED, IS_FOLLOWING, IS_GAP, IS_POSSIBLY_SENSITIVE, MEDIAS, FIRST_MEDIA, MENTIONS}; - public static final String[] COLUMNS = new String[] { _ID, ACCOUNT_ID, STATUS_ID, USER_ID, STATUS_TIMESTAMP, - TEXT_HTML, TEXT_PLAIN, TEXT_UNESCAPED, USER_NAME, USER_SCREEN_NAME, USER_PROFILE_IMAGE_URL, - IN_REPLY_TO_STATUS_ID, IN_REPLY_TO_USER_ID, IN_REPLY_TO_USER_NAME, IN_REPLY_TO_USER_SCREEN_NAME, - SOURCE, LOCATION, RETWEET_COUNT, FAVORITE_COUNT, RETWEET_ID, RETWEET_TIMESTAMP, RETWEETED_BY_USER_ID, - RETWEETED_BY_USER_NAME, RETWEETED_BY_USER_SCREEN_NAME, MY_RETWEET_ID, IS_RETWEET, IS_FAVORITE, - IS_PROTECTED, IS_VERIFIED, IS_FOLLOWING, IS_GAP, IS_POSSIBLY_SENSITIVE, MEDIAS, FIRST_MEDIA, MENTIONS }; + public static final String[] TYPES = new String[]{TYPE_PRIMARY_KEY, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, + TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_INT, TYPE_INT, TYPE_INT, + TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_TEXT, + TYPE_TEXT, TYPE_INT, TYPE_BOOLEAN, TYPE_BOOLEAN, TYPE_BOOLEAN, TYPE_BOOLEAN, TYPE_BOOLEAN, + TYPE_BOOLEAN, TYPE_BOOLEAN, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT}; - public static final String[] TYPES = new String[] { TYPE_PRIMARY_KEY, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, - TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_INT, TYPE_INT, TYPE_INT, - TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_TEXT, - TYPE_TEXT, TYPE_INT, TYPE_BOOLEAN, TYPE_BOOLEAN, TYPE_BOOLEAN, TYPE_BOOLEAN, TYPE_BOOLEAN, - TYPE_BOOLEAN, TYPE_BOOLEAN, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT }; + } - } + public static interface Tabs extends BaseColumns { + public static final String TABLE_NAME = "tabs"; + public static final String CONTENT_PATH = TABLE_NAME; - public static interface Tabs extends BaseColumns { - public static final String TABLE_NAME = "tabs"; - public static final String CONTENT_PATH = TABLE_NAME; + public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); - public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); + public static final String NAME = "name"; - public static final String NAME = "name"; + public static final String ICON = "icon"; - public static final String ICON = "icon"; + public static final String TYPE = "type"; - public static final String TYPE = "type"; + public static final String ARGUMENTS = "arguments"; - public static final String ARGUMENTS = "arguments"; + public static final String EXTRAS = "extras"; - public static final String EXTRAS = "extras"; + public static final String POSITION = "position"; - public static final String POSITION = "position"; + public static final String[] COLUMNS = new String[]{_ID, NAME, ICON, TYPE, ARGUMENTS, EXTRAS, POSITION}; - public static final String[] COLUMNS = new String[] { _ID, NAME, ICON, TYPE, ARGUMENTS, EXTRAS, POSITION }; + public static final String[] TYPES = new String[]{TYPE_PRIMARY_KEY, TYPE_TEXT_NOT_NULL, TYPE_TEXT, TYPE_TEXT, + TYPE_TEXT, TYPE_TEXT, TYPE_INT}; - public static final String[] TYPES = new String[] { TYPE_PRIMARY_KEY, TYPE_TEXT_NOT_NULL, TYPE_TEXT, TYPE_TEXT, - TYPE_TEXT, TYPE_TEXT, TYPE_INT }; + public static final String DEFAULT_SORT_ORDER = POSITION + " ASC"; + } - public static final String DEFAULT_SORT_ORDER = POSITION + " ASC"; - } + public static interface UnreadCounts extends BaseColumns { - public static interface UnreadCounts extends BaseColumns { + public static final String CONTENT_PATH = "unread_counts"; - public static final String CONTENT_PATH = "unread_counts"; + public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); - public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH); + public static final String TAB_POSITION = "tab_position"; - public static final String TAB_POSITION = "tab_position"; + public static final String TAB_TYPE = "tab_type"; - public static final String TAB_TYPE = "tab_type"; + public static final String COUNT = "count"; - public static final String COUNT = "count"; + public static final String[] MATRIX_COLUMNS = new String[]{TAB_POSITION, TAB_TYPE, COUNT}; - public static final String[] MATRIX_COLUMNS = new String[] { TAB_POSITION, TAB_TYPE, COUNT }; + public static final String[] COLUMNS = new String[]{_ID, TAB_POSITION, TAB_TYPE, COUNT}; - public static final String[] COLUMNS = new String[] { _ID, TAB_POSITION, TAB_TYPE, COUNT }; + public static interface ByType extends UnreadCounts { - public static interface ByType extends UnreadCounts { + public static final String CONTENT_PATH_SEGMENT = "by_type"; - public static final String CONTENT_PATH_SEGMENT = "by_type"; + public static final String CONTENT_PATH = UnreadCounts.CONTENT_PATH + "/" + CONTENT_PATH_SEGMENT; - public static final String CONTENT_PATH = UnreadCounts.CONTENT_PATH + "/" + CONTENT_PATH_SEGMENT; - - public static final Uri CONTENT_URI = Uri.withAppendedPath(UnreadCounts.CONTENT_URI, CONTENT_PATH_SEGMENT); - } - } + public static final Uri CONTENT_URI = Uri.withAppendedPath(UnreadCounts.CONTENT_URI, CONTENT_PATH_SEGMENT); + } + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/ContentValuesCreator.java b/twidere/src/main/java/org/mariotaku/twidere/util/ContentValuesCreator.java index 5c12efb68..9e952f5b8 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/ContentValuesCreator.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/ContentValuesCreator.java @@ -19,8 +19,6 @@ package org.mariotaku.twidere.util; -import static org.mariotaku.twidere.util.HtmlEscapeHelper.toPlainText; - import android.content.ContentValues; import org.json.JSONException; @@ -44,6 +42,9 @@ import org.mariotaku.twidere.provider.TweetStore.Drafts; import org.mariotaku.twidere.provider.TweetStore.Filters; import org.mariotaku.twidere.provider.TweetStore.Statuses; +import java.util.ArrayList; +import java.util.List; + import twitter4j.DirectMessage; import twitter4j.GeoLocation; import twitter4j.Status; @@ -54,302 +55,305 @@ import twitter4j.User; import twitter4j.auth.AccessToken; import twitter4j.conf.Configuration; -import java.util.ArrayList; -import java.util.List; +import static org.mariotaku.twidere.util.HtmlEscapeHelper.toPlainText; public final class ContentValuesCreator implements TwidereConstants { - public static ContentValues makeAccountContentValuesBasic(final Configuration conf, final String basicUsername, - final String basicPassword, final User user, final int color, final String apiUrlFormat) { - if (user == null || user.getId() <= 0) return null; - final ContentValues values = new ContentValues(); - if (basicUsername == null || basicPassword == null) return null; - values.put(Accounts.BASIC_AUTH_USERNAME, basicUsername); - values.put(Accounts.BASIC_AUTH_PASSWORD, basicPassword); - values.put(Accounts.AUTH_TYPE, Accounts.AUTH_TYPE_BASIC); - values.put(Accounts.ACCOUNT_ID, user.getId()); - values.put(Accounts.SCREEN_NAME, user.getScreenName()); - values.put(Accounts.NAME, user.getName()); - values.put(Accounts.PROFILE_IMAGE_URL, ParseUtils.parseString(user.getProfileImageUrlHttps())); - values.put(Accounts.PROFILE_BANNER_URL, ParseUtils.parseString(user.getProfileBannerImageUrl())); - values.put(Accounts.COLOR, color); - values.put(Accounts.IS_ACTIVATED, 1); - values.put(Accounts.API_URL_FORMAT, apiUrlFormat); - return values; - } + public static ContentValues makeAccountContentValuesBasic(final Configuration conf, final String basicUsername, + final String basicPassword, final User user, final int color, final String apiUrlFormat, + final boolean noVersionSuffix) { + if (user == null || user.getId() <= 0) return null; + final ContentValues values = new ContentValues(); + if (basicUsername == null || basicPassword == null) return null; + values.put(Accounts.BASIC_AUTH_USERNAME, basicUsername); + values.put(Accounts.BASIC_AUTH_PASSWORD, basicPassword); + values.put(Accounts.AUTH_TYPE, Accounts.AUTH_TYPE_BASIC); + values.put(Accounts.ACCOUNT_ID, user.getId()); + values.put(Accounts.SCREEN_NAME, user.getScreenName()); + values.put(Accounts.NAME, user.getName()); + values.put(Accounts.PROFILE_IMAGE_URL, ParseUtils.parseString(user.getProfileImageUrlHttps())); + values.put(Accounts.PROFILE_BANNER_URL, ParseUtils.parseString(user.getProfileBannerImageUrl())); + values.put(Accounts.COLOR, color); + values.put(Accounts.IS_ACTIVATED, 1); + values.put(Accounts.API_URL_FORMAT, apiUrlFormat); + values.put(Accounts.NO_VERSION_SUFFIX, noVersionSuffix); + return values; + } - public static ContentValues makeAccountContentValuesOAuth(final Configuration conf, final AccessToken accessToken, - final User user, final int authType, final int color, final String apiUrlFormat, - final boolean sameOAuthSigningUrl) { - if (user == null || user.getId() <= 0 || accessToken == null || user.getId() != accessToken.getUserId()) - return null; - final ContentValues values = new ContentValues(); - values.put(Accounts.OAUTH_TOKEN, accessToken.getToken()); - values.put(Accounts.OAUTH_TOKEN_SECRET, accessToken.getTokenSecret()); - values.put(Accounts.CONSUMER_KEY, conf.getOAuthConsumerKey()); - values.put(Accounts.CONSUMER_SECRET, conf.getOAuthConsumerSecret()); - values.put(Accounts.AUTH_TYPE, authType); - values.put(Accounts.ACCOUNT_ID, user.getId()); - values.put(Accounts.SCREEN_NAME, user.getScreenName()); - values.put(Accounts.NAME, user.getName()); - values.put(Accounts.PROFILE_IMAGE_URL, ParseUtils.parseString(user.getProfileImageUrlHttps())); - values.put(Accounts.PROFILE_BANNER_URL, ParseUtils.parseString(user.getProfileBannerImageUrl())); - values.put(Accounts.COLOR, color); - values.put(Accounts.IS_ACTIVATED, 1); - values.put(Accounts.API_URL_FORMAT, apiUrlFormat); - values.put(Accounts.SAME_OAUTH_SIGNING_URL, sameOAuthSigningUrl); - return values; - } + public static ContentValues makeAccountContentValuesOAuth(final Configuration conf, final AccessToken accessToken, + final User user, final int authType, final int color, final String apiUrlFormat, + final boolean sameOAuthSigningUrl, final boolean noVersionSuffix) { + if (user == null || user.getId() <= 0 || accessToken == null || user.getId() != accessToken.getUserId()) + return null; + final ContentValues values = new ContentValues(); + values.put(Accounts.OAUTH_TOKEN, accessToken.getToken()); + values.put(Accounts.OAUTH_TOKEN_SECRET, accessToken.getTokenSecret()); + values.put(Accounts.CONSUMER_KEY, conf.getOAuthConsumerKey()); + values.put(Accounts.CONSUMER_SECRET, conf.getOAuthConsumerSecret()); + values.put(Accounts.AUTH_TYPE, authType); + values.put(Accounts.ACCOUNT_ID, user.getId()); + values.put(Accounts.SCREEN_NAME, user.getScreenName()); + values.put(Accounts.NAME, user.getName()); + values.put(Accounts.PROFILE_IMAGE_URL, ParseUtils.parseString(user.getProfileImageUrlHttps())); + values.put(Accounts.PROFILE_BANNER_URL, ParseUtils.parseString(user.getProfileBannerImageUrl())); + values.put(Accounts.COLOR, color); + values.put(Accounts.IS_ACTIVATED, 1); + values.put(Accounts.API_URL_FORMAT, apiUrlFormat); + values.put(Accounts.SAME_OAUTH_SIGNING_URL, sameOAuthSigningUrl); + values.put(Accounts.NO_VERSION_SUFFIX, noVersionSuffix); + return values; + } - public static ContentValues makeAccountContentValuesTWIP(final Configuration conf, final User user, - final int color, final String apiUrlFormat) { - if (user == null || user.getId() <= 0) return null; - final ContentValues values = new ContentValues(); - values.put(Accounts.AUTH_TYPE, Accounts.AUTH_TYPE_TWIP_O_MODE); - values.put(Accounts.ACCOUNT_ID, user.getId()); - values.put(Accounts.SCREEN_NAME, user.getScreenName()); - values.put(Accounts.NAME, user.getName()); - values.put(Accounts.PROFILE_IMAGE_URL, ParseUtils.parseString(user.getProfileImageUrlHttps())); - values.put(Accounts.PROFILE_BANNER_URL, ParseUtils.parseString(user.getProfileBannerImageUrl())); - values.put(Accounts.COLOR, color); - values.put(Accounts.IS_ACTIVATED, 1); - values.put(Accounts.API_URL_FORMAT, apiUrlFormat); - return values; - } + public static ContentValues makeAccountContentValuesTWIP(final Configuration conf, final User user, + final int color, final String apiUrlFormat, final boolean noVersionSuffix) { + if (user == null || user.getId() <= 0) return null; + final ContentValues values = new ContentValues(); + values.put(Accounts.AUTH_TYPE, Accounts.AUTH_TYPE_TWIP_O_MODE); + values.put(Accounts.ACCOUNT_ID, user.getId()); + values.put(Accounts.SCREEN_NAME, user.getScreenName()); + values.put(Accounts.NAME, user.getName()); + values.put(Accounts.PROFILE_IMAGE_URL, ParseUtils.parseString(user.getProfileImageUrlHttps())); + values.put(Accounts.PROFILE_BANNER_URL, ParseUtils.parseString(user.getProfileBannerImageUrl())); + values.put(Accounts.COLOR, color); + values.put(Accounts.IS_ACTIVATED, 1); + values.put(Accounts.API_URL_FORMAT, apiUrlFormat); + values.put(Accounts.NO_VERSION_SUFFIX, noVersionSuffix); + return values; + } - public static ContentValues makeCachedUserContentValues(final User user) { - if (user == null || user.getId() <= 0) return null; - final String profile_image_url = ParseUtils.parseString(user.getProfileImageUrlHttps()); - final String url = ParseUtils.parseString(user.getURL()); - final URLEntity[] urls = user.getURLEntities(); - final ContentValues values = new ContentValues(); - values.put(CachedUsers.USER_ID, user.getId()); - values.put(CachedUsers.NAME, user.getName()); - values.put(CachedUsers.SCREEN_NAME, user.getScreenName()); - values.put(CachedUsers.PROFILE_IMAGE_URL, profile_image_url); - values.put(CachedUsers.CREATED_AT, user.getCreatedAt().getTime()); - values.put(CachedUsers.IS_PROTECTED, user.isProtected()); - values.put(CachedUsers.IS_VERIFIED, user.isVerified()); - values.put(CachedUsers.IS_FOLLOWING, user.isFollowing()); - values.put(CachedUsers.FAVORITES_COUNT, user.getFavouritesCount()); - values.put(CachedUsers.FOLLOWERS_COUNT, user.getFollowersCount()); - values.put(CachedUsers.FRIENDS_COUNT, user.getFriendsCount()); - values.put(CachedUsers.STATUSES_COUNT, user.getStatusesCount()); - values.put(CachedUsers.LOCATION, user.getLocation()); - values.put(CachedUsers.DESCRIPTION_PLAIN, user.getDescription()); - values.put(CachedUsers.DESCRIPTION_HTML, Utils.formatUserDescription(user)); - values.put(CachedUsers.DESCRIPTION_EXPANDED, Utils.formatExpandedUserDescription(user)); - values.put(CachedUsers.URL, url); - values.put(CachedUsers.URL_EXPANDED, - url != null && urls != null && urls.length > 0 ? ParseUtils.parseString(urls[0].getExpandedURL()) - : null); - values.put(CachedUsers.PROFILE_BANNER_URL, user.getProfileBannerImageUrl()); - return values; - } + public static ContentValues makeCachedUserContentValues(final User user) { + if (user == null || user.getId() <= 0) return null; + final String profile_image_url = ParseUtils.parseString(user.getProfileImageUrlHttps()); + final String url = ParseUtils.parseString(user.getURL()); + final URLEntity[] urls = user.getURLEntities(); + final ContentValues values = new ContentValues(); + values.put(CachedUsers.USER_ID, user.getId()); + values.put(CachedUsers.NAME, user.getName()); + values.put(CachedUsers.SCREEN_NAME, user.getScreenName()); + values.put(CachedUsers.PROFILE_IMAGE_URL, profile_image_url); + values.put(CachedUsers.CREATED_AT, user.getCreatedAt().getTime()); + values.put(CachedUsers.IS_PROTECTED, user.isProtected()); + values.put(CachedUsers.IS_VERIFIED, user.isVerified()); + values.put(CachedUsers.IS_FOLLOWING, user.isFollowing()); + values.put(CachedUsers.FAVORITES_COUNT, user.getFavouritesCount()); + values.put(CachedUsers.FOLLOWERS_COUNT, user.getFollowersCount()); + values.put(CachedUsers.FRIENDS_COUNT, user.getFriendsCount()); + values.put(CachedUsers.STATUSES_COUNT, user.getStatusesCount()); + values.put(CachedUsers.LOCATION, user.getLocation()); + values.put(CachedUsers.DESCRIPTION_PLAIN, user.getDescription()); + values.put(CachedUsers.DESCRIPTION_HTML, Utils.formatUserDescription(user)); + values.put(CachedUsers.DESCRIPTION_EXPANDED, Utils.formatExpandedUserDescription(user)); + values.put(CachedUsers.URL, url); + values.put(CachedUsers.URL_EXPANDED, + url != null && urls != null && urls.length > 0 ? ParseUtils.parseString(urls[0].getExpandedURL()) + : null); + values.put(CachedUsers.PROFILE_BANNER_URL, user.getProfileBannerImageUrl()); + return values; + } - public static ContentValues makeDirectMessageContentValues(final DirectMessage message, final long account_id, - final boolean is_outgoing) { - if (message == null || message.getId() <= 0) return null; - final ContentValues values = new ContentValues(); - final User sender = message.getSender(), recipient = message.getRecipient(); - if (sender == null || recipient == null) return null; - final String sender_profile_image_url = ParseUtils.parseString(sender.getProfileImageUrlHttps()); - final String recipient_profile_image_url = ParseUtils.parseString(recipient.getProfileImageUrlHttps()); - values.put(DirectMessages.ACCOUNT_ID, account_id); - values.put(DirectMessages.MESSAGE_ID, message.getId()); - values.put(DirectMessages.MESSAGE_TIMESTAMP, message.getCreatedAt().getTime()); - values.put(DirectMessages.SENDER_ID, sender.getId()); - values.put(DirectMessages.RECIPIENT_ID, recipient.getId()); - final String text_html = Utils.formatDirectMessageText(message); - values.put(DirectMessages.TEXT_HTML, text_html); - values.put(DirectMessages.TEXT_PLAIN, message.getText()); - values.put(DirectMessages.TEXT_UNESCAPED, toPlainText(text_html)); - values.put(DirectMessages.IS_OUTGOING, is_outgoing); - values.put(DirectMessages.SENDER_NAME, sender.getName()); - values.put(DirectMessages.SENDER_SCREEN_NAME, sender.getScreenName()); - values.put(DirectMessages.RECIPIENT_NAME, recipient.getName()); - values.put(DirectMessages.RECIPIENT_SCREEN_NAME, recipient.getScreenName()); - values.put(DirectMessages.SENDER_PROFILE_IMAGE_URL, sender_profile_image_url); - values.put(DirectMessages.RECIPIENT_PROFILE_IMAGE_URL, recipient_profile_image_url); - final ParcelableMedia[] medias = ParcelableMedia.fromEntities(message); - if (medias != null) { - values.put(DirectMessages.MEDIAS, JSONSerializer.toJSONArrayString(medias)); - values.put(DirectMessages.FIRST_MEDIA, medias[0].url); - } - return values; - } + public static ContentValues makeDirectMessageContentValues(final DirectMessage message, final long account_id, + final boolean is_outgoing) { + if (message == null || message.getId() <= 0) return null; + final ContentValues values = new ContentValues(); + final User sender = message.getSender(), recipient = message.getRecipient(); + if (sender == null || recipient == null) return null; + final String sender_profile_image_url = ParseUtils.parseString(sender.getProfileImageUrlHttps()); + final String recipient_profile_image_url = ParseUtils.parseString(recipient.getProfileImageUrlHttps()); + values.put(DirectMessages.ACCOUNT_ID, account_id); + values.put(DirectMessages.MESSAGE_ID, message.getId()); + values.put(DirectMessages.MESSAGE_TIMESTAMP, message.getCreatedAt().getTime()); + values.put(DirectMessages.SENDER_ID, sender.getId()); + values.put(DirectMessages.RECIPIENT_ID, recipient.getId()); + final String text_html = Utils.formatDirectMessageText(message); + values.put(DirectMessages.TEXT_HTML, text_html); + values.put(DirectMessages.TEXT_PLAIN, message.getText()); + values.put(DirectMessages.TEXT_UNESCAPED, toPlainText(text_html)); + values.put(DirectMessages.IS_OUTGOING, is_outgoing); + values.put(DirectMessages.SENDER_NAME, sender.getName()); + values.put(DirectMessages.SENDER_SCREEN_NAME, sender.getScreenName()); + values.put(DirectMessages.RECIPIENT_NAME, recipient.getName()); + values.put(DirectMessages.RECIPIENT_SCREEN_NAME, recipient.getScreenName()); + values.put(DirectMessages.SENDER_PROFILE_IMAGE_URL, sender_profile_image_url); + values.put(DirectMessages.RECIPIENT_PROFILE_IMAGE_URL, recipient_profile_image_url); + final ParcelableMedia[] medias = ParcelableMedia.fromEntities(message); + if (medias != null) { + values.put(DirectMessages.MEDIAS, JSONSerializer.toJSONArrayString(medias)); + values.put(DirectMessages.FIRST_MEDIA, medias[0].url); + } + return values; + } - public static ContentValues makeDirectMessageContentValues(final ParcelableDirectMessage message) { - if (message == null || message.id <= 0) return null; - final ContentValues values = new ContentValues(); - values.put(DirectMessages.ACCOUNT_ID, message.account_id); - values.put(DirectMessages.MESSAGE_ID, message.id); - values.put(DirectMessages.MESSAGE_TIMESTAMP, message.timestamp); - values.put(DirectMessages.SENDER_ID, message.sender_id); - values.put(DirectMessages.RECIPIENT_ID, message.recipient_id); - values.put(DirectMessages.TEXT_HTML, message.text_html); - values.put(DirectMessages.TEXT_PLAIN, message.text_plain); - values.put(DirectMessages.IS_OUTGOING, message.is_outgoing); - values.put(DirectMessages.SENDER_NAME, message.sender_name); - values.put(DirectMessages.SENDER_SCREEN_NAME, message.sender_screen_name); - values.put(DirectMessages.RECIPIENT_NAME, message.recipient_name); - values.put(DirectMessages.RECIPIENT_SCREEN_NAME, message.recipient_screen_name); - values.put(DirectMessages.SENDER_PROFILE_IMAGE_URL, message.sender_profile_image_url); - values.put(DirectMessages.RECIPIENT_PROFILE_IMAGE_URL, message.recipient_profile_image_url); - if (message.medias != null) { - values.put(Statuses.MEDIAS, JSONSerializer.toJSONArrayString(message.medias)); - values.put(Statuses.FIRST_MEDIA, message.medias[0].url); - } - return values; - } + public static ContentValues makeDirectMessageContentValues(final ParcelableDirectMessage message) { + if (message == null || message.id <= 0) return null; + final ContentValues values = new ContentValues(); + values.put(DirectMessages.ACCOUNT_ID, message.account_id); + values.put(DirectMessages.MESSAGE_ID, message.id); + values.put(DirectMessages.MESSAGE_TIMESTAMP, message.timestamp); + values.put(DirectMessages.SENDER_ID, message.sender_id); + values.put(DirectMessages.RECIPIENT_ID, message.recipient_id); + values.put(DirectMessages.TEXT_HTML, message.text_html); + values.put(DirectMessages.TEXT_PLAIN, message.text_plain); + values.put(DirectMessages.IS_OUTGOING, message.is_outgoing); + values.put(DirectMessages.SENDER_NAME, message.sender_name); + values.put(DirectMessages.SENDER_SCREEN_NAME, message.sender_screen_name); + values.put(DirectMessages.RECIPIENT_NAME, message.recipient_name); + values.put(DirectMessages.RECIPIENT_SCREEN_NAME, message.recipient_screen_name); + values.put(DirectMessages.SENDER_PROFILE_IMAGE_URL, message.sender_profile_image_url); + values.put(DirectMessages.RECIPIENT_PROFILE_IMAGE_URL, message.recipient_profile_image_url); + if (message.medias != null) { + values.put(Statuses.MEDIAS, JSONSerializer.toJSONArrayString(message.medias)); + values.put(Statuses.FIRST_MEDIA, message.medias[0].url); + } + return values; + } - public static ContentValues makeDirectMessageDraftContentValues(final long accountId, final long recipientId, - final String text, final String imageUri) { - final ContentValues values = new ContentValues(); - values.put(Drafts.ACTION_TYPE, Drafts.ACTION_SEND_DIRECT_MESSAGE); - values.put(Drafts.TEXT, text); - values.put(Drafts.ACCOUNT_IDS, ArrayUtils.toString(new long[] { accountId }, ',', false)); - values.put(Drafts.TIMESTAMP, System.currentTimeMillis()); - if (imageUri != null) { - final ParcelableMediaUpdate[] medias = { new ParcelableMediaUpdate(imageUri, 0) }; - values.put(Drafts.MEDIAS, JSONSerializer.toJSONArrayString(medias)); - } - final JSONObject extras = new JSONObject(); - try { - extras.put(EXTRA_RECIPIENT_ID, recipientId); - } catch (final JSONException e) { - e.printStackTrace(); - } - values.put(Drafts.ACTION_EXTRAS, extras.toString()); - return values; - } + public static ContentValues makeDirectMessageDraftContentValues(final long accountId, final long recipientId, + final String text, final String imageUri) { + final ContentValues values = new ContentValues(); + values.put(Drafts.ACTION_TYPE, Drafts.ACTION_SEND_DIRECT_MESSAGE); + values.put(Drafts.TEXT, text); + values.put(Drafts.ACCOUNT_IDS, ArrayUtils.toString(new long[]{accountId}, ',', false)); + values.put(Drafts.TIMESTAMP, System.currentTimeMillis()); + if (imageUri != null) { + final ParcelableMediaUpdate[] medias = {new ParcelableMediaUpdate(imageUri, 0)}; + values.put(Drafts.MEDIAS, JSONSerializer.toJSONArrayString(medias)); + } + final JSONObject extras = new JSONObject(); + try { + extras.put(EXTRA_RECIPIENT_ID, recipientId); + } catch (final JSONException e) { + e.printStackTrace(); + } + values.put(Drafts.ACTION_EXTRAS, extras.toString()); + return values; + } - public static ContentValues makeFilterdUserContentValues(final ParcelableStatus status) { - if (status == null) return null; - final ContentValues values = new ContentValues(); - values.put(Filters.Users.USER_ID, status.user_id); - values.put(Filters.Users.NAME, status.user_name); - values.put(Filters.Users.SCREEN_NAME, status.user_screen_name); - return values; - } + public static ContentValues makeFilteredUserContentValues(final ParcelableStatus status) { + if (status == null) return null; + final ContentValues values = new ContentValues(); + values.put(Filters.Users.USER_ID, status.user_id); + values.put(Filters.Users.NAME, status.user_name); + values.put(Filters.Users.SCREEN_NAME, status.user_screen_name); + return values; + } - public static ContentValues makeFilterdUserContentValues(final ParcelableUser user) { - if (user == null) return null; - final ContentValues values = new ContentValues(); - values.put(Filters.Users.USER_ID, user.id); - values.put(Filters.Users.NAME, user.name); - values.put(Filters.Users.SCREEN_NAME, user.screen_name); - return values; - } + public static ContentValues makeFilteredUserContentValues(final ParcelableUser user) { + if (user == null) return null; + final ContentValues values = new ContentValues(); + values.put(Filters.Users.USER_ID, user.id); + values.put(Filters.Users.NAME, user.name); + values.put(Filters.Users.SCREEN_NAME, user.screen_name); + return values; + } - public static ContentValues makeFilterdUserContentValues(final ParcelableUserMention user) { - if (user == null) return null; - final ContentValues values = new ContentValues(); - values.put(Filters.Users.USER_ID, user.id); - values.put(Filters.Users.NAME, user.name); - values.put(Filters.Users.SCREEN_NAME, user.screen_name); - return values; - } + public static ContentValues makeFilteredUserContentValues(final ParcelableUserMention user) { + if (user == null) return null; + final ContentValues values = new ContentValues(); + values.put(Filters.Users.USER_ID, user.id); + values.put(Filters.Users.NAME, user.name); + values.put(Filters.Users.SCREEN_NAME, user.screen_name); + return values; + } - public static ContentValues makeStatusContentValues(final Status orig, final long account_id) { - if (orig == null || orig.getId() <= 0) return null; - final ContentValues values = new ContentValues(); - values.put(Statuses.ACCOUNT_ID, account_id); - values.put(Statuses.STATUS_ID, orig.getId()); - values.put(Statuses.STATUS_TIMESTAMP, orig.getCreatedAt().getTime()); - values.put(Statuses.MY_RETWEET_ID, orig.getCurrentUserRetweet()); - final boolean is_retweet = orig.isRetweet(); - final Status status; - final Status retweeted_status = is_retweet ? orig.getRetweetedStatus() : null; - if (retweeted_status != null) { - final User retweet_user = orig.getUser(); - values.put(Statuses.RETWEET_ID, retweeted_status.getId()); - values.put(Statuses.RETWEET_TIMESTAMP, retweeted_status.getCreatedAt().getTime()); - values.put(Statuses.RETWEETED_BY_USER_ID, retweet_user.getId()); - values.put(Statuses.RETWEETED_BY_USER_NAME, retweet_user.getName()); - values.put(Statuses.RETWEETED_BY_USER_SCREEN_NAME, retweet_user.getScreenName()); - status = retweeted_status; - } else { - status = orig; - } - final User user = status.getUser(); - if (user != null) { - final long userId = user.getId(); - final String profileImageUrl = ParseUtils.parseString(user.getProfileImageUrlHttps()); - final String name = user.getName(), screenName = user.getScreenName(); - values.put(Statuses.USER_ID, userId); - values.put(Statuses.USER_NAME, name); - values.put(Statuses.USER_SCREEN_NAME, screenName); - values.put(Statuses.IS_PROTECTED, user.isProtected()); - values.put(Statuses.IS_VERIFIED, user.isVerified()); - values.put(Statuses.USER_PROFILE_IMAGE_URL, profileImageUrl); - values.put(CachedUsers.IS_FOLLOWING, user.isFollowing()); - } - final String text_html = Utils.formatStatusText(status); - values.put(Statuses.TEXT_HTML, text_html); - values.put(Statuses.TEXT_PLAIN, status.getText()); - values.put(Statuses.TEXT_UNESCAPED, toPlainText(text_html)); - values.put(Statuses.RETWEET_COUNT, status.getRetweetCount()); - values.put(Statuses.IN_REPLY_TO_STATUS_ID, status.getInReplyToStatusId()); - values.put(Statuses.IN_REPLY_TO_USER_ID, status.getInReplyToUserId()); - values.put(Statuses.IN_REPLY_TO_USER_NAME, Utils.getInReplyToName(status)); - values.put(Statuses.IN_REPLY_TO_USER_SCREEN_NAME, status.getInReplyToScreenName()); - values.put(Statuses.SOURCE, status.getSource()); - values.put(Statuses.IS_POSSIBLY_SENSITIVE, status.isPossiblySensitive()); - final GeoLocation location = status.getGeoLocation(); - if (location != null) { - values.put(Statuses.LOCATION, location.getLatitude() + "," + location.getLongitude()); - } - values.put(Statuses.IS_RETWEET, is_retweet); - values.put(Statuses.IS_FAVORITE, status.isFavorited()); - final ParcelableMedia[] medias = ParcelableMedia.fromEntities(status); - if (medias != null) { - values.put(Statuses.MEDIAS, JSONSerializer.toJSONArrayString(medias)); - values.put(Statuses.FIRST_MEDIA, medias[0].url); - } - final ParcelableUserMention[] mentions = ParcelableUserMention.fromStatus(status); - if (mentions != null) { - values.put(Statuses.MENTIONS, JSONSerializer.toJSONArrayString(mentions)); - } - return values; - } + public static ContentValues makeStatusContentValues(final Status orig, final long account_id) { + if (orig == null || orig.getId() <= 0) return null; + final ContentValues values = new ContentValues(); + values.put(Statuses.ACCOUNT_ID, account_id); + values.put(Statuses.STATUS_ID, orig.getId()); + values.put(Statuses.STATUS_TIMESTAMP, orig.getCreatedAt().getTime()); + values.put(Statuses.MY_RETWEET_ID, orig.getCurrentUserRetweet()); + final boolean isRetweet = orig.isRetweet(); + final Status status; + final Status retweetedStatus = isRetweet ? orig.getRetweetedStatus() : null; + if (retweetedStatus != null) { + final User retweetUser = orig.getUser(); + values.put(Statuses.RETWEET_ID, retweetedStatus.getId()); + values.put(Statuses.RETWEET_TIMESTAMP, retweetedStatus.getCreatedAt().getTime()); + values.put(Statuses.RETWEETED_BY_USER_ID, retweetUser.getId()); + values.put(Statuses.RETWEETED_BY_USER_NAME, retweetUser.getName()); + values.put(Statuses.RETWEETED_BY_USER_SCREEN_NAME, retweetUser.getScreenName()); + status = retweetedStatus; + } else { + status = orig; + } + final User user = status.getUser(); + if (user != null) { + final long userId = user.getId(); + final String profileImageUrl = ParseUtils.parseString(user.getProfileImageUrlHttps()); + final String name = user.getName(), screenName = user.getScreenName(); + values.put(Statuses.USER_ID, userId); + values.put(Statuses.USER_NAME, name); + values.put(Statuses.USER_SCREEN_NAME, screenName); + values.put(Statuses.IS_PROTECTED, user.isProtected()); + values.put(Statuses.IS_VERIFIED, user.isVerified()); + values.put(Statuses.USER_PROFILE_IMAGE_URL, profileImageUrl); + values.put(CachedUsers.IS_FOLLOWING, user.isFollowing()); + } + final String text_html = Utils.formatStatusText(status); + values.put(Statuses.TEXT_HTML, text_html); + values.put(Statuses.TEXT_PLAIN, status.getText()); + values.put(Statuses.TEXT_UNESCAPED, toPlainText(text_html)); + values.put(Statuses.RETWEET_COUNT, status.getRetweetCount()); + values.put(Statuses.IN_REPLY_TO_STATUS_ID, status.getInReplyToStatusId()); + values.put(Statuses.IN_REPLY_TO_USER_ID, status.getInReplyToUserId()); + values.put(Statuses.IN_REPLY_TO_USER_NAME, Utils.getInReplyToName(status)); + values.put(Statuses.IN_REPLY_TO_USER_SCREEN_NAME, status.getInReplyToScreenName()); + values.put(Statuses.SOURCE, status.getSource()); + values.put(Statuses.IS_POSSIBLY_SENSITIVE, status.isPossiblySensitive()); + final GeoLocation location = status.getGeoLocation(); + if (location != null) { + values.put(Statuses.LOCATION, location.getLatitude() + "," + location.getLongitude()); + } + values.put(Statuses.IS_RETWEET, isRetweet); + values.put(Statuses.IS_FAVORITE, status.isFavorited()); + final ParcelableMedia[] medias = ParcelableMedia.fromEntities(status); + if (medias != null) { + values.put(Statuses.MEDIAS, JSONSerializer.toJSONArrayString(medias)); + values.put(Statuses.FIRST_MEDIA, medias[0].url); + } + final ParcelableUserMention[] mentions = ParcelableUserMention.fromStatus(status); + if (mentions != null) { + values.put(Statuses.MENTIONS, JSONSerializer.toJSONArrayString(mentions)); + } + return values; + } - public static ContentValues makeStatusDraftContentValues(final ParcelableStatusUpdate status) { - return makeStatusDraftContentValues(status, Account.getAccountIds(status.accounts)); - } + public static ContentValues makeStatusDraftContentValues(final ParcelableStatusUpdate status) { + return makeStatusDraftContentValues(status, Account.getAccountIds(status.accounts)); + } - public static ContentValues makeStatusDraftContentValues(final ParcelableStatusUpdate status, - final long[] accountIds) { - final ContentValues values = new ContentValues(); - values.put(Drafts.ACTION_TYPE, Drafts.ACTION_UPDATE_STATUS); - values.put(Drafts.TEXT, status.text); - values.put(Drafts.ACCOUNT_IDS, ArrayUtils.toString(accountIds, ',', false)); - values.put(Drafts.IN_REPLY_TO_STATUS_ID, status.in_reply_to_status_id); - values.put(Drafts.LOCATION, ParcelableLocation.toString(status.location)); - values.put(Drafts.IS_POSSIBLY_SENSITIVE, status.is_possibly_sensitive); - values.put(Drafts.TIMESTAMP, System.currentTimeMillis()); - if (status.medias != null) { - values.put(Drafts.MEDIAS, JSONSerializer.toJSONArrayString(status.medias)); - } - return values; - } + public static ContentValues makeStatusDraftContentValues(final ParcelableStatusUpdate status, + final long[] accountIds) { + final ContentValues values = new ContentValues(); + values.put(Drafts.ACTION_TYPE, Drafts.ACTION_UPDATE_STATUS); + values.put(Drafts.TEXT, status.text); + values.put(Drafts.ACCOUNT_IDS, ArrayUtils.toString(accountIds, ',', false)); + values.put(Drafts.IN_REPLY_TO_STATUS_ID, status.in_reply_to_status_id); + values.put(Drafts.LOCATION, ParcelableLocation.toString(status.location)); + values.put(Drafts.IS_POSSIBLY_SENSITIVE, status.is_possibly_sensitive); + values.put(Drafts.TIMESTAMP, System.currentTimeMillis()); + if (status.medias != null) { + values.put(Drafts.MEDIAS, JSONSerializer.toJSONArrayString(status.medias)); + } + return values; + } - public static ContentValues[] makeTrendsContentValues(final List trends_list) { - if (trends_list == null) return new ContentValues[0]; - final List result_list = new ArrayList(); - for (final Trends trends : trends_list) { - if (trends == null) { - continue; - } - final long timestamp = trends.getTrendAt().getTime(); - for (final Trend trend : trends.getTrends()) { - final ContentValues values = new ContentValues(); - values.put(CachedTrends.NAME, trend.getName()); - values.put(CachedTrends.TIMESTAMP, timestamp); - result_list.add(values); - } - } - return result_list.toArray(new ContentValues[result_list.size()]); - } + public static ContentValues[] makeTrendsContentValues(final List trendsList) { + if (trendsList == null) return new ContentValues[0]; + final List resultList = new ArrayList<>(); + for (final Trends trends : trendsList) { + if (trends == null) { + continue; + } + final long timestamp = trends.getTrendAt().getTime(); + for (final Trend trend : trends.getTrends()) { + final ContentValues values = new ContentValues(); + values.put(CachedTrends.NAME, trend.getName()); + values.put(CachedTrends.TIMESTAMP, timestamp); + resultList.add(values); + } + } + return resultList.toArray(new ContentValues[resultList.size()]); + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/MultiSelectEventHandler.java b/twidere/src/main/java/org/mariotaku/twidere/util/MultiSelectEventHandler.java index 81095471f..a3ed280eb 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/MultiSelectEventHandler.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/MultiSelectEventHandler.java @@ -52,7 +52,6 @@ import java.util.TreeSet; import de.keyboardsurfer.android.widget.crouton.Crouton; import de.keyboardsurfer.android.widget.crouton.CroutonStyle; -import static org.mariotaku.twidere.util.ContentValuesCreator.makeFilterdUserContentValues; import static org.mariotaku.twidere.util.Utils.getAccountScreenNames; import static org.mariotaku.twidere.util.content.ContentResolverUtils.bulkDelete; import static org.mariotaku.twidere.util.content.ContentResolverUtils.bulkInsert; @@ -145,11 +144,11 @@ public class MultiSelectEventHandler implements Constants, ActionMode.Callback, if (object instanceof ParcelableStatus) { final ParcelableStatus status = (ParcelableStatus) object; userIds.add(status.user_id); - valuesList.add(makeFilterdUserContentValues(status)); + valuesList.add(ContentValuesCreator.makeFilteredUserContentValues(status)); } else if (object instanceof ParcelableUser) { final ParcelableUser user = (ParcelableUser) object; userIds.add(user.id); - valuesList.add(makeFilterdUserContentValues(user)); + valuesList.add(ContentValuesCreator.makeFilteredUserContentValues(user)); } else { continue; } diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/SpannableStringBuilder.java b/twidere/src/main/java/org/mariotaku/twidere/util/SpannableStringBuilder.java deleted file mode 100644 index f7691aa02..000000000 --- a/twidere/src/main/java/org/mariotaku/twidere/util/SpannableStringBuilder.java +++ /dev/null @@ -1,5 +0,0 @@ -package org.mariotaku.twidere.util; - -public class SpannableStringBuilder { - -} diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/ThemeUtils.java b/twidere/src/main/java/org/mariotaku/twidere/util/ThemeUtils.java index bfe4f4185..2c976cf22 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/ThemeUtils.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/ThemeUtils.java @@ -35,10 +35,14 @@ import android.support.annotation.NonNull; import android.text.TextPaint; import android.text.TextUtils; import android.util.AttributeSet; +import android.view.ContextMenu.ContextMenuInfo; import android.view.ContextThemeWrapper; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; import android.view.View; +import org.mariotaku.menucomponent.widget.MenuBar.MenuBarMenuInfo; import org.mariotaku.refreshnow.widget.RefreshNowConfig; import org.mariotaku.refreshnow.widget.RefreshNowProgressIndicator.IndicatorConfig; import org.mariotaku.twidere.Constants; @@ -114,6 +118,25 @@ public class ThemeUtils implements Constants { d.setAlpha(getUserThemeBackgroundAlpha(context)); } + public static void applyColorFilterToMenuIcon(Menu menu, int color, int popupColor, PorterDuff.Mode mode, int... excludedGroups) { + for (int i = 0, j = menu.size(); i < j; i++) { + final MenuItem item = menu.getItem(i); + final Drawable icon = item.getIcon(); + final ContextMenuInfo info = item.getMenuInfo(); + if (ArrayUtils.contains(excludedGroups, item.getGroupId())) { + icon.mutate().clearColorFilter(); + } else if (info instanceof MenuBarMenuInfo) { + final boolean inPopup = ((MenuBarMenuInfo) info).isInPopup(); + icon.mutate().setColorFilter(inPopup ? popupColor : color, mode); + } else { + icon.mutate().setColorFilter(color, mode); + } + if (item.hasSubMenu()) { + applyColorFilterToMenuIcon(item.getSubMenu(), color, popupColor, mode, excludedGroups); + } + } + } + public static IndicatorConfig buildRefreshIndicatorConfig(final Context context) { final IndicatorConfig.Builder builder = new IndicatorConfig.Builder(context); final Resources res = context.getResources(); diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/Utils.java b/twidere/src/main/java/org/mariotaku/twidere/util/Utils.java index fda4b6ca3..fa5a4d8fe 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/Utils.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/Utils.java @@ -1493,7 +1493,8 @@ public final class Utils implements Constants, TwitterConstants { public static String getApiUrl(final String pattern, final String domain, final String appendPath) { final String urlBase = getApiBaseUrl(pattern, domain); - if (urlBase == null || appendPath == null) return urlBase; + if (urlBase == null) return null; + if (appendPath == null) return urlBase.endsWith("/") ? urlBase : urlBase + "/"; final StringBuilder sb = new StringBuilder(urlBase); if (urlBase.endsWith("/")) { sb.append(appendPath.startsWith("/") ? appendPath.substring(1) : appendPath); @@ -2250,9 +2251,10 @@ public final class Utils implements Constants, TwitterConstants { final String prefConsumerSecret = prefs.getString(KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET); final ConfigurationBuilder cb = new ConfigurationBuilder(); if (!isEmpty(account.api_url_format)) { - cb.setRestBaseURL(getApiUrl(account.api_url_format, "api", "/1.1/")); + final String versionSuffix = account.no_version_suffix ? null : "/1.1/"; + cb.setRestBaseURL(getApiUrl(account.api_url_format, "api", versionSuffix)); cb.setOAuthBaseURL(getApiUrl(account.api_url_format, "api", "/oauth/")); - cb.setUploadBaseURL(getApiUrl(account.api_url_format, "upload", "/1.1/")); + cb.setUploadBaseURL(getApiUrl(account.api_url_format, "upload", versionSuffix)); if (!account.same_oauth_signing_url) { cb.setSigningRestBaseURL(DEFAULT_SIGNING_REST_BASE_URL); cb.setSigningOAuthBaseURL(DEFAULT_SIGNING_OAUTH_BASE_URL); @@ -2291,7 +2293,7 @@ public final class Utils implements Constants, TwitterConstants { final String where = Where.equals(new Column(Accounts.ACCOUNT_ID), accountId).getSQL(); final Cursor c = ContentResolverUtils.query(context.getContentResolver(), Accounts.CONTENT_URI, - Accounts.COLUMNS, where.toString(), null, null); + Accounts.COLUMNS, where, null, null); if (c == null) return null; try { if (!c.moveToFirst()) return null; @@ -2416,7 +2418,7 @@ public final class Utils implements Constants, TwitterConstants { // versions final String where = Where.equals(new Column(Accounts.ACCOUNT_ID), accountId).getSQL(); final Cursor c = ContentResolverUtils.query(context.getContentResolver(), Accounts.CONTENT_URI, - Accounts.COLUMNS, where.toString(), null, null); + Accounts.COLUMNS, where, null, null); if (c == null) return null; try { if (!c.moveToFirst()) return null; @@ -2793,22 +2795,22 @@ public final class Utils implements Constants, TwitterConstants { // SCREENLAYOUT_LAYOUTDIR_RTL; } - public static boolean isSameAccount(final Context context, final long account_id, final long user_id) { - if (context == null || account_id <= 0 || user_id <= 0) return false; - return account_id == user_id; + public static boolean isSameAccount(final Context context, final long accountId, final long userId) { + if (context == null || accountId <= 0 || userId <= 0) return false; + return accountId == userId; } - public static boolean isSameAccount(final Context context, final long account_id, final String screen_name) { - if (context == null || account_id <= 0 || screen_name == null) return false; - return screen_name.equalsIgnoreCase(getAccountScreenName(context, account_id)); + public static boolean isSameAccount(final Context context, final long accountId, final String screenName) { + if (context == null || accountId <= 0 || screenName == null) return false; + return screenName.equalsIgnoreCase(getAccountScreenName(context, accountId)); } - public static boolean isUserLoggedIn(final Context context, final long account_id) { + public static boolean isUserLoggedIn(final Context context, final long accountId) { if (context == null) return false; final long[] ids = getAccountIds(context); if (ids == null) return false; for (final long id : ids) { - if (id == account_id) return true; + if (id == accountId) return true; } return false; } @@ -3483,11 +3485,11 @@ public final class Utils implements Constants, TwitterConstants { addIntentToMenuForExtension(context, menu, MENU_GROUP_STATUS_EXTENSION, INTENT_ACTION_EXTENSION_OPEN_STATUS, EXTRA_STATUS, EXTRA_STATUS_JSON, status); final MenuItem shareItem = menu.findItem(R.id.share_submenu); - final Menu shareSubmenu = shareItem != null && shareItem.hasSubMenu() ? shareItem.getSubMenu() : null; - if (shareSubmenu != null) { + final Menu shareSubMenu = shareItem != null && shareItem.hasSubMenu() ? shareItem.getSubMenu() : null; + if (shareSubMenu != null) { final Intent shareIntent = createStatusShareIntent(context, status); - shareSubmenu.removeGroup(MENU_GROUP_STATUS_SHARE); - addIntentToMenu(context, shareSubmenu, shareIntent, MENU_GROUP_STATUS_SHARE); + shareSubMenu.removeGroup(MENU_GROUP_STATUS_SHARE); + addIntentToMenu(context, shareSubMenu, shareIntent, MENU_GROUP_STATUS_SHARE); } } @@ -3813,15 +3815,13 @@ public final class Utils implements Constants, TwitterConstants { } private static boolean isExtensionUseJSON(final ResolveInfo info) { - if (info == null || info.activityInfo == null) return true; + if (info == null || info.activityInfo == null) return false; final ActivityInfo activityInfo = info.activityInfo; if (activityInfo.metaData != null && activityInfo.metaData.containsKey(METADATA_KEY_EXTENSION_USE_JSON)) return activityInfo.metaData.getBoolean(METADATA_KEY_EXTENSION_USE_JSON); final ApplicationInfo appInfo = activityInfo.applicationInfo; - if (appInfo == null) return true; - if (appInfo.metaData != null && appInfo.metaData.containsKey(METADATA_KEY_EXTENSION_USE_JSON)) - return appInfo.metaData.getBoolean(METADATA_KEY_EXTENSION_USE_JSON); - return true; + if (appInfo == null) return false; + return appInfo.metaData != null && appInfo.metaData.getBoolean(METADATA_KEY_EXTENSION_USE_JSON, false); } private static void parseEntities(final HtmlBuilder builder, final EntitySupport entities) { @@ -3879,7 +3879,7 @@ public final class Utils implements Constants, TwitterConstants { /** * Get most contrasting color * - * @param color + * @param color Input color, alpha channel will be disposed. * @return {@link Color#WHITE} or {@link Color#BLACK} * @see Calculating Color Contrast */ diff --git a/twidere/src/main/java/org/mariotaku/twidere/view/TwidereMenuBar.java b/twidere/src/main/java/org/mariotaku/twidere/view/TwidereMenuBar.java index ae2f86940..47748c9cc 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/view/TwidereMenuBar.java +++ b/twidere/src/main/java/org/mariotaku/twidere/view/TwidereMenuBar.java @@ -1,26 +1,46 @@ package org.mariotaku.twidere.view; import android.content.Context; +import android.graphics.PorterDuff.Mode; import android.util.AttributeSet; -import android.view.MenuInflater; +import android.view.Menu; +import android.view.MenuItem; +import android.view.MenuItem.OnMenuItemClickListener; import org.mariotaku.menucomponent.widget.MenuBar; -import org.mariotaku.twidere.menu.TwidereMenuInflater; +import org.mariotaku.menucomponent.widget.MenuBar.MenuBarListener; +import org.mariotaku.twidere.Constants; +import org.mariotaku.twidere.util.ThemeUtils; /** * Created by mariotaku on 14-7-29. */ -public class TwidereMenuBar extends MenuBar { +public class TwidereMenuBar extends MenuBar implements MenuBarListener, Constants { + private OnMenuItemClickListener mListener; + public TwidereMenuBar(Context context) { super(context); } public TwidereMenuBar(Context context, AttributeSet attrs) { super(context, attrs); + setMenuBarListener(this); + } + + public void setOnMenuItemClickListener(OnMenuItemClickListener listener) { + mListener = listener; } @Override - public MenuInflater getMenuInflater() { - return new TwidereMenuInflater(getContext()); + public void onPreShowMenu(Menu menu) { + final int color = ThemeUtils.getTextColorPrimary(getItemViewContext()); + final int popupColor = ThemeUtils.getTextColorPrimary(getPopupContext()); + ThemeUtils.applyColorFilterToMenuIcon(menu, color, popupColor, Mode.SRC_ATOP, + MENU_GROUP_STATUS_SHARE, MENU_GROUP_STATUS_EXTENSION); + } + + @Override + public boolean onMenuItemClick(MenuItem item) { + return mListener != null && mListener.onMenuItemClick(item); } } diff --git a/twidere/src/main/res/layout-v21/layout_home_actions_button.xml b/twidere/src/main/res/layout-v21/layout_home_actions_button.xml index e15094a47..cb32fef3a 100644 --- a/twidere/src/main/res/layout-v21/layout_home_actions_button.xml +++ b/twidere/src/main/res/layout-v21/layout_home_actions_button.xml @@ -1,6 +1,6 @@ - + - + - + - + - + - + + + \ No newline at end of file diff --git a/twidere/src/main/res/layout/layout_home_actions_button.xml b/twidere/src/main/res/layout/layout_home_actions_button.xml index 3a510ee89..866a4f019 100644 --- a/twidere/src/main/res/layout/layout_home_actions_button.xml +++ b/twidere/src/main/res/layout/layout_home_actions_button.xml @@ -1,6 +1,6 @@ Excluded Exclude this host [DOMAIN]: Twitter API domain.\nExample: https://[DOMAIN].twitter.com/ will be replaced to https://api.twitter.com/. + No version suffix \ No newline at end of file