trying to make twidere work with identi.ca #235
improved L compatibility
This commit is contained in:
parent
7baf4c95af
commit
03dccdbe43
|
@ -1 +1 @@
|
||||||
Subproject commit e565ee636888197425aabf17c46a398544ba6dc3
|
Subproject commit 42c1ffdeb547e4caa9a3a10249912b350453346e
|
|
@ -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(':SlidingMenu').projectDir = file('libraries/SlidingMenu/library')
|
||||||
project(':DragSortListView').projectDir = file('libraries/DragSortListView/library')
|
project(':DragSortListView').projectDir = file('libraries/DragSortListView/library')
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
/build
|
|
@ -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'
|
||||||
|
}
|
|
@ -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 *;
|
||||||
|
#}
|
|
@ -0,0 +1,23 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
package="org.mariotaku.twidere.extension.wear" >
|
||||||
|
|
||||||
|
<uses-feature android:name="android.hardware.type.watch" />
|
||||||
|
|
||||||
|
<application
|
||||||
|
android:allowBackup="true"
|
||||||
|
android:icon="@drawable/ic_launcher"
|
||||||
|
android:label="@string/app_name"
|
||||||
|
android:theme="@android:style/Theme.DeviceDefault" >
|
||||||
|
<activity
|
||||||
|
android:name=".MainActivity"
|
||||||
|
android:label="@string/title_activity_main" >
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
|
||||||
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
|
</intent-filter>
|
||||||
|
</activity>
|
||||||
|
</application>
|
||||||
|
|
||||||
|
</manifest>
|
|
@ -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);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
Binary file not shown.
After Width: | Height: | Size: 7.6 KiB |
Binary file not shown.
After Width: | Height: | Size: 3.7 KiB |
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
Binary file not shown.
After Width: | Height: | Size: 24 KiB |
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<android.support.wearable.view.WatchViewStub
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:id="@+id/watch_view_stub"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
app:rectLayout="@layout/rect_activity_main"
|
||||||
|
app:roundLayout="@layout/round_activity_main"
|
||||||
|
tools:context="org.mariotaku.twidere.extension.wear.MainActivity"
|
||||||
|
tools:deviceIds="wear">
|
||||||
|
</android.support.wearable.view.WatchViewStub>
|
|
@ -0,0 +1,15 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical"
|
||||||
|
tools:context="org.mariotaku.twidere.extension.wear.MainActivity"
|
||||||
|
tools:deviceIds="wear_square">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/text"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/hello_square" />
|
||||||
|
</LinearLayout>
|
|
@ -0,0 +1,16 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context="org.mariotaku.twidere.extension.wear.MainActivity"
|
||||||
|
tools:deviceIds="wear_round">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/text"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
|
android:text="@string/hello_round" />
|
||||||
|
</RelativeLayout>
|
|
@ -0,0 +1,9 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
|
||||||
|
<string name="app_name">Twidere Wear Extension</string>
|
||||||
|
<string name="title_activity_main">MainActivity</string>
|
||||||
|
<string name="hello_round">Hello Round World!</string>
|
||||||
|
<string name="hello_square">Hello Square World!</string>
|
||||||
|
|
||||||
|
</resources>
|
|
@ -2,7 +2,7 @@ apply plugin: 'com.android.application'
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion 21
|
compileSdkVersion 21
|
||||||
buildToolsVersion '21.0.1'
|
buildToolsVersion '21.0.2'
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "org.mariotaku.twidere"
|
applicationId "org.mariotaku.twidere"
|
||||||
|
@ -69,7 +69,9 @@ android {
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
wearApp project(':twidere.wear')
|
||||||
compile 'com.android.support:support-v13:21.0.0'
|
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:cardview-v7:21.0.0'
|
||||||
compile 'com.android.support:recyclerview-v7:21.0.0'
|
compile 'com.android.support:recyclerview-v7:21.0.0'
|
||||||
compile 'com.google.android.gms:play-services:6.1.11'
|
compile 'com.google.android.gms:play-services:6.1.11'
|
||||||
|
|
|
@ -46,6 +46,7 @@ import org.mariotaku.gallery3d.ui.SynchronizedHandler;
|
||||||
import org.mariotaku.gallery3d.util.GalleryUtils;
|
import org.mariotaku.gallery3d.util.GalleryUtils;
|
||||||
import org.mariotaku.gallery3d.util.ThreadPool;
|
import org.mariotaku.gallery3d.util.ThreadPool;
|
||||||
import org.mariotaku.menucomponent.widget.MenuBar;
|
import org.mariotaku.menucomponent.widget.MenuBar;
|
||||||
|
import org.mariotaku.menucomponent.widget.MenuBar.MenuBarListener;
|
||||||
import org.mariotaku.twidere.Constants;
|
import org.mariotaku.twidere.Constants;
|
||||||
import org.mariotaku.twidere.R;
|
import org.mariotaku.twidere.R;
|
||||||
import org.mariotaku.twidere.activity.support.TwidereSwipeBackActivity;
|
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,
|
public final class ImageViewerGLActivity extends TwidereSwipeBackActivity implements Constants, PhotoView.Listener,
|
||||||
GLImageLoader.DownloadListener, LoaderManager.LoaderCallbacks<GLImageLoader.Result>, OnMenuVisibilityListener,
|
GLImageLoader.DownloadListener, LoaderManager.LoaderCallbacks<GLImageLoader.Result>, OnMenuVisibilityListener,
|
||||||
SwipeListener, OnMenuItemClickListener {
|
SwipeListener, MenuBarListener {
|
||||||
|
|
||||||
private final GLView mRootPane = new GLView() {
|
private final GLView mRootPane = new GLView() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -340,7 +341,7 @@ public final class ImageViewerGLActivity extends TwidereSwipeBackActivity implem
|
||||||
if (savedInstanceState == null) {
|
if (savedInstanceState == null) {
|
||||||
loadImage();
|
loadImage();
|
||||||
}
|
}
|
||||||
mMenuBar.setOnMenuItemClickListener(this);
|
mMenuBar.setMenuBarListener(this);
|
||||||
mMenuBar.inflate(R.menu.menu_image_viewer);
|
mMenuBar.inflate(R.menu.menu_image_viewer);
|
||||||
mMenuBar.setIsBottomBar(true);
|
mMenuBar.setIsBottomBar(true);
|
||||||
mMenuBar.show();
|
mMenuBar.show();
|
||||||
|
@ -531,6 +532,11 @@ public final class ImageViewerGLActivity extends TwidereSwipeBackActivity implem
|
||||||
Utils.addIntentToMenu(this, subMenu, shareIntent);
|
Utils.addIntentToMenu(this, subMenu, shareIntent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPreShowMenu(Menu menu) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private static class MyHandler extends SynchronizedHandler {
|
private static class MyHandler extends SynchronizedHandler {
|
||||||
ImageViewerGLActivity activity;
|
ImageViewerGLActivity activity;
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@ package org.mariotaku.twidere;
|
||||||
public interface Constants extends TwidereConstants {
|
public interface Constants extends TwidereConstants {
|
||||||
|
|
||||||
public static final String DATABASES_NAME = "twidere.sqlite";
|
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_RELEASE = "0kjPwJOe_zwYjzGc9uYak7vhm_Sf3eob-2L3Xzw";
|
||||||
public static final String GOOGLE_MAPS_API_KEY_DEBUG = "0kjPwJOe_zwY9p6kT-kygu4mxwysyOOpfkaXqTA";
|
public static final String GOOGLE_MAPS_API_KEY_DEBUG = "0kjPwJOe_zwY9p6kT-kygu4mxwysyOOpfkaXqTA";
|
||||||
|
|
|
@ -61,10 +61,10 @@ import org.mariotaku.twidere.fragment.support.BaseSupportDialogFragment;
|
||||||
import org.mariotaku.twidere.menu.TwidereMenuInflater;
|
import org.mariotaku.twidere.menu.TwidereMenuInflater;
|
||||||
import org.mariotaku.twidere.model.ParcelableUser;
|
import org.mariotaku.twidere.model.ParcelableUser;
|
||||||
import org.mariotaku.twidere.provider.TweetStore.Filters;
|
import org.mariotaku.twidere.provider.TweetStore.Filters;
|
||||||
|
import org.mariotaku.twidere.util.ContentValuesCreator;
|
||||||
import org.mariotaku.twidere.util.ParseUtils;
|
import org.mariotaku.twidere.util.ParseUtils;
|
||||||
import org.mariotaku.twidere.util.ThemeUtils;
|
import org.mariotaku.twidere.util.ThemeUtils;
|
||||||
|
|
||||||
import static org.mariotaku.twidere.util.ContentValuesCreator.makeFilterdUserContentValues;
|
|
||||||
import static org.mariotaku.twidere.util.Utils.getDefaultAccountId;
|
import static org.mariotaku.twidere.util.Utils.getDefaultAccountId;
|
||||||
|
|
||||||
public class FiltersActivity extends BaseSupportActivity implements TabListener, OnPageChangeListener {
|
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))
|
if (resultCode != RESULT_OK || !(filter instanceof FilteredUsersFragment) || !data.hasExtra(EXTRA_USER))
|
||||||
return;
|
return;
|
||||||
final ParcelableUser user = data.getParcelableExtra(EXTRA_USER);
|
final ParcelableUser user = data.getParcelableExtra(EXTRA_USER);
|
||||||
final ContentValues values = makeFilterdUserContentValues(user);
|
final ContentValues values = ContentValuesCreator.makeFilteredUserContentValues(user);
|
||||||
final ContentResolver resolver = getContentResolver();
|
final ContentResolver resolver = getContentResolver();
|
||||||
resolver.delete(Filters.Users.CONTENT_URI, Where.equals(Filters.Users.USER_ID, user.id).getSQL(), null);
|
resolver.delete(Filters.Users.CONTENT_URI, Where.equals(Filters.Users.USER_ID, user.id).getSQL(), null);
|
||||||
resolver.insert(Filters.Users.CONTENT_URI, values);
|
resolver.insert(Filters.Users.CONTENT_URI, values);
|
||||||
|
|
|
@ -53,7 +53,7 @@ public class APIEditorActivity extends BaseSupportDialogActivity implements Twit
|
||||||
OnClickListener {
|
OnClickListener {
|
||||||
|
|
||||||
private EditText mEditAPIUrlFormat;
|
private EditText mEditAPIUrlFormat;
|
||||||
private CheckBox mEditSameOAuthSigningUrl;
|
private CheckBox mEditSameOAuthSigningUrl, mEditNoVersionSuffix;
|
||||||
private EditText mEditConsumerKey, mEditConsumerSecret;
|
private EditText mEditConsumerKey, mEditConsumerSecret;
|
||||||
private RadioGroup mEditAuthType;
|
private RadioGroup mEditAuthType;
|
||||||
private RadioButton mButtonOAuth, mButtonxAuth, mButtonBasic, mButtonTwipOMode;
|
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);
|
mAdvancedAPIConfigLabel = (TextView) findViewById(R.id.advanced_api_config_label);
|
||||||
mAdvancedAPIConfigView = findViewById(R.id.advanced_api_config);
|
mAdvancedAPIConfigView = findViewById(R.id.advanced_api_config);
|
||||||
mEditSameOAuthSigningUrl = (CheckBox) findViewById(R.id.same_oauth_signing_url);
|
mEditSameOAuthSigningUrl = (CheckBox) findViewById(R.id.same_oauth_signing_url);
|
||||||
|
mEditNoVersionSuffix = (CheckBox) findViewById(R.id.no_version_suffix);
|
||||||
mEditConsumerKey = (EditText) findViewById(R.id.consumer_key);
|
mEditConsumerKey = (EditText) findViewById(R.id.consumer_key);
|
||||||
mEditConsumerSecret = (EditText) findViewById(R.id.consumer_secret);
|
mEditConsumerSecret = (EditText) findViewById(R.id.consumer_secret);
|
||||||
mSaveButton = (Button) findViewById(R.id.save);
|
mSaveButton = (Button) findViewById(R.id.save);
|
||||||
|
@ -122,11 +123,13 @@ public class APIEditorActivity extends BaseSupportDialogActivity implements Twit
|
||||||
final String apiUrlFormat = parseString(mEditAPIUrlFormat.getText());
|
final String apiUrlFormat = parseString(mEditAPIUrlFormat.getText());
|
||||||
final int authType = getCheckedAuthType(mEditAuthType.getCheckedRadioButtonId());
|
final int authType = getCheckedAuthType(mEditAuthType.getCheckedRadioButtonId());
|
||||||
final boolean sameOAuthSigningUrl = mEditSameOAuthSigningUrl.isChecked();
|
final boolean sameOAuthSigningUrl = mEditSameOAuthSigningUrl.isChecked();
|
||||||
|
final boolean noVersionSuffix = mEditNoVersionSuffix.isChecked();
|
||||||
final String consumerKey = parseString(mEditConsumerKey.getText());
|
final String consumerKey = parseString(mEditConsumerKey.getText());
|
||||||
final String consumerSecret = parseString(mEditConsumerSecret.getText());
|
final String consumerSecret = parseString(mEditConsumerSecret.getText());
|
||||||
outState.putString(Accounts.API_URL_FORMAT, apiUrlFormat);
|
outState.putString(Accounts.API_URL_FORMAT, apiUrlFormat);
|
||||||
outState.putInt(Accounts.AUTH_TYPE, authType);
|
outState.putInt(Accounts.AUTH_TYPE, authType);
|
||||||
outState.putBoolean(Accounts.SAME_OAUTH_SIGNING_URL, sameOAuthSigningUrl);
|
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_KEY, consumerKey);
|
||||||
outState.putString(Accounts.CONSUMER_SECRET, consumerSecret);
|
outState.putString(Accounts.CONSUMER_SECRET, consumerSecret);
|
||||||
super.onSaveInstanceState(outState);
|
super.onSaveInstanceState(outState);
|
||||||
|
@ -136,12 +139,14 @@ public class APIEditorActivity extends BaseSupportDialogActivity implements Twit
|
||||||
final String apiUrlFormat = parseString(mEditAPIUrlFormat.getText());
|
final String apiUrlFormat = parseString(mEditAPIUrlFormat.getText());
|
||||||
final int authType = getCheckedAuthType(mEditAuthType.getCheckedRadioButtonId());
|
final int authType = getCheckedAuthType(mEditAuthType.getCheckedRadioButtonId());
|
||||||
final boolean sameOAuthSigningUrl = mEditSameOAuthSigningUrl.isChecked();
|
final boolean sameOAuthSigningUrl = mEditSameOAuthSigningUrl.isChecked();
|
||||||
|
final boolean noVersionSuffix = mEditNoVersionSuffix.isChecked();
|
||||||
final String consumerKey = parseString(mEditConsumerKey.getText());
|
final String consumerKey = parseString(mEditConsumerKey.getText());
|
||||||
final String consumerSecret = parseString(mEditConsumerSecret.getText());
|
final String consumerSecret = parseString(mEditConsumerSecret.getText());
|
||||||
final Intent intent = new Intent();
|
final Intent intent = new Intent();
|
||||||
intent.putExtra(Accounts.API_URL_FORMAT, apiUrlFormat);
|
intent.putExtra(Accounts.API_URL_FORMAT, apiUrlFormat);
|
||||||
intent.putExtra(Accounts.AUTH_TYPE, authType);
|
intent.putExtra(Accounts.AUTH_TYPE, authType);
|
||||||
intent.putExtra(Accounts.SAME_OAUTH_SIGNING_URL, sameOAuthSigningUrl);
|
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_KEY, consumerKey);
|
||||||
intent.putExtra(Accounts.CONSUMER_SECRET, consumerSecret);
|
intent.putExtra(Accounts.CONSUMER_SECRET, consumerSecret);
|
||||||
setResult(RESULT_OK, intent);
|
setResult(RESULT_OK, intent);
|
||||||
|
@ -155,13 +160,14 @@ public class APIEditorActivity extends BaseSupportDialogActivity implements Twit
|
||||||
|
|
||||||
String apiUrlFormat;
|
String apiUrlFormat;
|
||||||
int authType;
|
int authType;
|
||||||
boolean sameOAuthSigningUrl;
|
boolean sameOAuthSigningUrl, noVersionSuffix;
|
||||||
String consumerKey, consumerSecret;
|
String consumerKey, consumerSecret;
|
||||||
|
|
||||||
final SharedPreferences pref = getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
|
final SharedPreferences pref = getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
|
||||||
final String prefApiUrlFormat = getNonEmptyString(pref, KEY_API_URL_FORMAT, DEFAULT_REST_BASE_URL);
|
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 int prefAuthType = pref.getInt(KEY_AUTH_TYPE, Accounts.AUTH_TYPE_OAUTH);
|
||||||
final boolean prefSameOAuthSigningUrl = pref.getBoolean(KEY_SAME_OAUTH_SIGNING_URL, false);
|
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 prefConsumerKey = getNonEmptyString(pref, KEY_CONSUMER_KEY, TWITTER_CONSUMER_KEY_2);
|
||||||
final String prefConsumerSecret = getNonEmptyString(pref, KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET_2);
|
final String prefConsumerSecret = getNonEmptyString(pref, KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET_2);
|
||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
|
@ -169,6 +175,8 @@ public class APIEditorActivity extends BaseSupportDialogActivity implements Twit
|
||||||
authType = savedInstanceState.getInt(Accounts.AUTH_TYPE, prefAuthType);
|
authType = savedInstanceState.getInt(Accounts.AUTH_TYPE, prefAuthType);
|
||||||
sameOAuthSigningUrl = savedInstanceState.getBoolean(Accounts.SAME_OAUTH_SIGNING_URL,
|
sameOAuthSigningUrl = savedInstanceState.getBoolean(Accounts.SAME_OAUTH_SIGNING_URL,
|
||||||
prefSameOAuthSigningUrl);
|
prefSameOAuthSigningUrl);
|
||||||
|
noVersionSuffix = savedInstanceState.getBoolean(Accounts.NO_VERSION_SUFFIX,
|
||||||
|
prefNoVersionSuffix);
|
||||||
consumerKey = trim(savedInstanceState.getString(Accounts.CONSUMER_KEY, prefConsumerKey));
|
consumerKey = trim(savedInstanceState.getString(Accounts.CONSUMER_KEY, prefConsumerKey));
|
||||||
consumerSecret = trim(savedInstanceState.getString(Accounts.CONSUMER_SECRET, prefConsumerSecret));
|
consumerSecret = trim(savedInstanceState.getString(Accounts.CONSUMER_SECRET, prefConsumerSecret));
|
||||||
} else {
|
} else {
|
||||||
|
@ -177,6 +185,7 @@ public class APIEditorActivity extends BaseSupportDialogActivity implements Twit
|
||||||
apiUrlFormat = trim(extras.getString(Accounts.API_URL_FORMAT, prefApiUrlFormat));
|
apiUrlFormat = trim(extras.getString(Accounts.API_URL_FORMAT, prefApiUrlFormat));
|
||||||
authType = extras.getInt(Accounts.AUTH_TYPE, prefAuthType);
|
authType = extras.getInt(Accounts.AUTH_TYPE, prefAuthType);
|
||||||
sameOAuthSigningUrl = extras.getBoolean(Accounts.SAME_OAUTH_SIGNING_URL, prefSameOAuthSigningUrl);
|
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));
|
consumerKey = trim(extras.getString(Accounts.CONSUMER_KEY, prefConsumerKey));
|
||||||
consumerSecret = trim(extras.getString(Accounts.CONSUMER_SECRET, prefConsumerSecret));
|
consumerSecret = trim(extras.getString(Accounts.CONSUMER_SECRET, prefConsumerSecret));
|
||||||
}
|
}
|
||||||
|
@ -188,6 +197,7 @@ public class APIEditorActivity extends BaseSupportDialogActivity implements Twit
|
||||||
|
|
||||||
mEditAPIUrlFormat.setText(apiUrlFormat);
|
mEditAPIUrlFormat.setText(apiUrlFormat);
|
||||||
mEditSameOAuthSigningUrl.setChecked(sameOAuthSigningUrl);
|
mEditSameOAuthSigningUrl.setChecked(sameOAuthSigningUrl);
|
||||||
|
mEditNoVersionSuffix.setChecked(noVersionSuffix);
|
||||||
mEditConsumerKey.setText(consumerKey);
|
mEditConsumerKey.setText(consumerKey);
|
||||||
mEditConsumerSecret.setText(consumerSecret);
|
mEditConsumerSecret.setText(consumerSecret);
|
||||||
|
|
||||||
|
|
|
@ -21,9 +21,13 @@ package org.mariotaku.twidere.activity.support;
|
||||||
|
|
||||||
import android.app.ActionBar;
|
import android.app.ActionBar;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
|
import android.graphics.Color;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v4.app.FragmentActivity;
|
import android.support.v4.app.FragmentActivity;
|
||||||
import android.support.v4.app.NavUtils;
|
import android.support.v4.app.NavUtils;
|
||||||
|
import android.text.SpannableStringBuilder;
|
||||||
|
import android.text.Spanned;
|
||||||
|
import android.text.style.ForegroundColorSpan;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
|
|
||||||
import org.mariotaku.twidere.Constants;
|
import org.mariotaku.twidere.Constants;
|
||||||
|
@ -143,6 +147,20 @@ public abstract class BaseSupportThemedActivity extends FragmentActivity impleme
|
||||||
super.onStart();
|
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
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
|
|
|
@ -43,6 +43,7 @@ import android.os.Bundle;
|
||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
import android.provider.MediaStore;
|
import android.provider.MediaStore;
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
import android.support.v4.app.DialogFragment;
|
import android.support.v4.app.DialogFragment;
|
||||||
import android.support.v4.util.LongSparseArray;
|
import android.support.v4.util.LongSparseArray;
|
||||||
import android.text.Editable;
|
import android.text.Editable;
|
||||||
|
@ -53,7 +54,6 @@ import android.view.KeyEvent;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.MenuItem.OnMenuItemClickListener;
|
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
|
@ -78,6 +78,7 @@ import com.twitter.Extractor;
|
||||||
|
|
||||||
import org.mariotaku.dynamicgridview.DraggableArrayAdapter;
|
import org.mariotaku.dynamicgridview.DraggableArrayAdapter;
|
||||||
import org.mariotaku.menucomponent.widget.MenuBar;
|
import org.mariotaku.menucomponent.widget.MenuBar;
|
||||||
|
import org.mariotaku.menucomponent.widget.MenuBar.MenuBarListener;
|
||||||
import org.mariotaku.menucomponent.widget.PopupMenu;
|
import org.mariotaku.menucomponent.widget.PopupMenu;
|
||||||
import org.mariotaku.twidere.R;
|
import org.mariotaku.twidere.R;
|
||||||
import org.mariotaku.twidere.adapter.BaseArrayAdapter;
|
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;
|
import static org.mariotaku.twidere.util.Utils.showMenuItemToast;
|
||||||
|
|
||||||
public class ComposeActivity extends BaseSupportDialogActivity implements TextWatcher, LocationListener,
|
public class ComposeActivity extends BaseSupportDialogActivity implements TextWatcher, LocationListener,
|
||||||
OnMenuItemClickListener, OnClickListener, OnEditorActionListener, OnItemClickListener, OnItemLongClickListener,
|
MenuBarListener, OnClickListener, OnEditorActionListener, OnItemClickListener, OnItemLongClickListener,
|
||||||
OnLongClickListener {
|
OnLongClickListener {
|
||||||
|
|
||||||
private static final String FAKE_IMAGE_LINK = "https://www.example.com/fake_image.jpg";
|
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;
|
return;
|
||||||
}
|
}
|
||||||
mBottomMenuBar.setIsBottomBar(true);
|
mBottomMenuBar.setIsBottomBar(true);
|
||||||
mBottomMenuBar.setOnMenuItemClickListener(this);
|
mBottomMenuBar.setMenuBarListener(this);
|
||||||
mActionMenuBar.setOnMenuItemClickListener(this);
|
mActionMenuBar.setMenuBarListener(this);
|
||||||
mEditText.setOnEditorActionListener(mPreferences.getBoolean(KEY_QUICK_SEND, false) ? this : null);
|
mEditText.setOnEditorActionListener(mPreferences.getBoolean(KEY_QUICK_SEND, false) ? this : null);
|
||||||
mEditText.addTextChangedListener(this);
|
mEditText.addTextChangedListener(this);
|
||||||
mAccountSelectorAdapter = new AccountSelectorAdapter(this);
|
mAccountSelectorAdapter = new AccountSelectorAdapter(this);
|
||||||
|
@ -1142,7 +1143,7 @@ public class ComposeActivity extends BaseSupportDialogActivity implements TextWa
|
||||||
private void updateTextCount() {
|
private void updateTextCount() {
|
||||||
final StatusTextCountView textCountView = mBottomSendButton ? mBottomSendTextCountView : mSendTextCountView;
|
final StatusTextCountView textCountView = mBottomSendButton ? mBottomSendTextCountView : mSendTextCountView;
|
||||||
if (textCountView != null && mEditText != null) {
|
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,
|
final String text = hasMedia() && textOrig != null ? mImageUploaderUsed ? getImageUploadStatus(this,
|
||||||
new String[]{FAKE_IMAGE_LINK}, textOrig) : textOrig + " " + FAKE_IMAGE_LINK : textOrig;
|
new String[]{FAKE_IMAGE_LINK}, textOrig) : textOrig + " " + FAKE_IMAGE_LINK : textOrig;
|
||||||
final int validatedCount = text != null ? mValidator.getTweetLength(text) : 0;
|
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
|
public static class RetweetProtectedStatusWarnFragment extends BaseSupportDialogFragment implements
|
||||||
DialogInterface.OnClickListener {
|
DialogInterface.OnClickListener {
|
||||||
|
|
||||||
|
@ -1167,6 +1173,7 @@ public class ComposeActivity extends BaseSupportDialogActivity implements TextWa
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public Dialog onCreateDialog(final Bundle savedInstanceState) {
|
public Dialog onCreateDialog(final Bundle savedInstanceState) {
|
||||||
final Context wrapped = ThemeUtils.getDialogThemedContext(getActivity());
|
final Context wrapped = ThemeUtils.getDialogThemedContext(getActivity());
|
||||||
|
@ -1204,6 +1211,7 @@ public class ComposeActivity extends BaseSupportDialogActivity implements TextWa
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public Dialog onCreateDialog(final Bundle savedInstanceState) {
|
public Dialog onCreateDialog(final Bundle savedInstanceState) {
|
||||||
final Context wrapped = ThemeUtils.getDialogThemedContext(getActivity());
|
final Context wrapped = ThemeUtils.getDialogThemedContext(getActivity());
|
||||||
|
|
|
@ -35,6 +35,7 @@ import android.database.ContentObserver;
|
||||||
import android.graphics.Canvas;
|
import android.graphics.Canvas;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
|
import android.graphics.drawable.ColorDrawable;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
@ -228,9 +229,7 @@ public class HomeActivity extends BaseSupportActivity implements OnClickListener
|
||||||
@Override
|
@Override
|
||||||
public void onClick(final View v) {
|
public void onClick(final View v) {
|
||||||
switch (v.getId()) {
|
switch (v.getId()) {
|
||||||
case R.id.actions:
|
case R.id.actions_button: {
|
||||||
case R.id.actions_button:
|
|
||||||
case R.id.actions_button_bottom: {
|
|
||||||
triggerActionsClick();
|
triggerActionsClick();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -248,7 +247,7 @@ public class HomeActivity extends BaseSupportActivity implements OnClickListener
|
||||||
mSlidingMenu = (HomeSlidingMenu) findViewById(R.id.home_menu);
|
mSlidingMenu = (HomeSlidingMenu) findViewById(R.id.home_menu);
|
||||||
mViewPager = (ExtendedViewPager) findViewById(R.id.main_pager);
|
mViewPager = (ExtendedViewPager) findViewById(R.id.main_pager);
|
||||||
mEmptyTabHint = findViewById(R.id.empty_tab_hint);
|
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);
|
mTabsContainer = findViewById(R.id.tabs_container);
|
||||||
mTabIndicator = (TabPagerIndicator) findViewById(R.id.main_tabs);
|
mTabIndicator = (TabPagerIndicator) findViewById(R.id.main_tabs);
|
||||||
mActionBarOverlay = findViewById(R.id.actionbar_overlay);
|
mActionBarOverlay = findViewById(R.id.actionbar_overlay);
|
||||||
|
@ -297,12 +296,7 @@ public class HomeActivity extends BaseSupportActivity implements OnClickListener
|
||||||
@Override
|
@Override
|
||||||
public boolean onLongClick(final View v) {
|
public boolean onLongClick(final View v) {
|
||||||
switch (v.getId()) {
|
switch (v.getId()) {
|
||||||
case R.id.actions:
|
|
||||||
case R.id.actions_button: {
|
case R.id.actions_button: {
|
||||||
showMenuItemToast(v, v.getContentDescription());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
case R.id.actions_button_bottom: {
|
|
||||||
showMenuItemToast(v, v.getContentDescription(), true);
|
showMenuItemToast(v, v.getContentDescription(), true);
|
||||||
return 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 themeColor = getThemeColor(), contrastColor = Utils.getContrastYIQ(themeColor, 192);
|
||||||
final int themeResId = getCurrentThemeResourceId();
|
final int themeResId = getCurrentThemeResourceId();
|
||||||
if (ThemeUtils.isColoredActionBar(themeResId)) {
|
if (ThemeUtils.isColoredActionBar(themeResId)) {
|
||||||
mTabIndicator.setBackgroundColor(themeColor);
|
ViewAccessor.setBackground(mTabIndicator, new ColorDrawable(themeColor));
|
||||||
mTabIndicator.setStripColor(contrastColor);
|
mTabIndicator.setStripColor(contrastColor);
|
||||||
mTabIndicator.setIconColor(contrastColor);
|
mTabIndicator.setIconColor(contrastColor);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -120,6 +120,10 @@ public class LinkHandlerActivity extends BaseSupportActivity implements OnClickL
|
||||||
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
|
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
|
||||||
setUiOptions(getWindow(), data);
|
setUiOptions(getWindow(), data);
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
final ActionBar actionBar = getActionBar();
|
||||||
|
if (actionBar != null) {
|
||||||
|
actionBar.setDisplayHomeAsUpEnabled(true);
|
||||||
|
}
|
||||||
setContentView(R.layout.layout_link_handler);
|
setContentView(R.layout.layout_link_handler);
|
||||||
setProgressBarIndeterminateVisibility(false);
|
setProgressBarIndeterminateVisibility(false);
|
||||||
if (data == null || !showFragment(data)) {
|
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) {
|
private void setUiOptions(final Window window, final Uri data) {
|
||||||
if (FlymeUtils.hasSmartBar()) {
|
if (FlymeUtils.hasSmartBar()) {
|
||||||
window.setUiOptions(ActivityInfo.UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW);
|
window.setUiOptions(ActivityInfo.UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW);
|
||||||
|
|
|
@ -26,7 +26,6 @@ import android.content.ContentValues;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.content.res.Resources;
|
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.BitmapFactory;
|
import android.graphics.BitmapFactory;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
|
@ -35,7 +34,6 @@ import android.os.Bundle;
|
||||||
import android.text.Editable;
|
import android.text.Editable;
|
||||||
import android.text.TextWatcher;
|
import android.text.TextWatcher;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuInflater;
|
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
|
@ -116,7 +114,7 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta
|
||||||
private SharedPreferences mPreferences;
|
private SharedPreferences mPreferences;
|
||||||
private ContentResolver mResolver;
|
private ContentResolver mResolver;
|
||||||
private AbstractSignInTask mTask;
|
private AbstractSignInTask mTask;
|
||||||
private boolean mSameOAuthSigningUrl;
|
private boolean mSameOAuthSigningUrl, mNoVersionSuffix;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void afterTextChanged(final Editable s) {
|
public void afterTextChanged(final Editable s) {
|
||||||
|
@ -136,6 +134,7 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta
|
||||||
mAPIUrlFormat = data.getStringExtra(Accounts.API_URL_FORMAT);
|
mAPIUrlFormat = data.getStringExtra(Accounts.API_URL_FORMAT);
|
||||||
mAuthType = data.getIntExtra(Accounts.AUTH_TYPE, Accounts.AUTH_TYPE_OAUTH);
|
mAuthType = data.getIntExtra(Accounts.AUTH_TYPE, Accounts.AUTH_TYPE_OAUTH);
|
||||||
mSameOAuthSigningUrl = data.getBooleanExtra(Accounts.SAME_OAUTH_SIGNING_URL, false);
|
mSameOAuthSigningUrl = data.getBooleanExtra(Accounts.SAME_OAUTH_SIGNING_URL, false);
|
||||||
|
mNoVersionSuffix = data.getBooleanExtra(Accounts.NO_VERSION_SUFFIX, false);
|
||||||
mConsumerKey = data.getStringExtra(Accounts.CONSUMER_KEY);
|
mConsumerKey = data.getStringExtra(Accounts.CONSUMER_KEY);
|
||||||
mConsumerSecret = data.getStringExtra(Accounts.CONSUMER_SECRET);
|
mConsumerSecret = data.getStringExtra(Accounts.CONSUMER_SECRET);
|
||||||
final boolean isTwipOMode = mAuthType == Accounts.AUTH_TYPE_TWIP_O_MODE;
|
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.API_URL_FORMAT, mAPIUrlFormat);
|
||||||
intent.putExtra(Accounts.AUTH_TYPE, mAuthType);
|
intent.putExtra(Accounts.AUTH_TYPE, mAuthType);
|
||||||
intent.putExtra(Accounts.SAME_OAUTH_SIGNING_URL, mSameOAuthSigningUrl);
|
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_KEY, mConsumerKey);
|
||||||
intent.putExtra(Accounts.CONSUMER_SECRET, mConsumerSecret);
|
intent.putExtra(Accounts.CONSUMER_SECRET, mConsumerSecret);
|
||||||
startActivityForResult(intent, REQUEST_EDIT_API);
|
startActivityForResult(intent, REQUEST_EDIT_API);
|
||||||
|
@ -305,6 +305,7 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta
|
||||||
outState.putString(Accounts.API_URL_FORMAT, mAPIUrlFormat);
|
outState.putString(Accounts.API_URL_FORMAT, mAPIUrlFormat);
|
||||||
outState.putInt(Accounts.AUTH_TYPE, mAuthType);
|
outState.putInt(Accounts.AUTH_TYPE, mAuthType);
|
||||||
outState.putBoolean(Accounts.SAME_OAUTH_SIGNING_URL, mSameOAuthSigningUrl);
|
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_KEY, mConsumerKey);
|
||||||
outState.putString(Accounts.CONSUMER_SECRET, mConsumerSecret);
|
outState.putString(Accounts.CONSUMER_SECRET, mConsumerSecret);
|
||||||
outState.putString(Accounts.SCREEN_NAME, mUsername);
|
outState.putString(Accounts.SCREEN_NAME, mUsername);
|
||||||
|
@ -368,7 +369,7 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta
|
||||||
setDefaultAPI();
|
setDefaultAPI();
|
||||||
final Configuration conf = getConfiguration();
|
final Configuration conf = getConfiguration();
|
||||||
mTask = new SignInTask(this, conf, mUsername, mPassword, mAuthType, mUserColor, mAPIUrlFormat,
|
mTask = new SignInTask(this, conf, mUsername, mPassword, mAuthType, mUserColor, mAPIUrlFormat,
|
||||||
mSameOAuthSigningUrl);
|
mSameOAuthSigningUrl, mNoVersionSuffix);
|
||||||
mTask.execute();
|
mTask.execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -384,7 +385,7 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta
|
||||||
final String secret = intent.getStringExtra(EXTRA_REQUEST_TOKEN_SECRET);
|
final String secret = intent.getStringExtra(EXTRA_REQUEST_TOKEN_SECRET);
|
||||||
final String verifier = intent.getStringExtra(EXTRA_OAUTH_VERIFIER);
|
final String verifier = intent.getStringExtra(EXTRA_OAUTH_VERIFIER);
|
||||||
mTask = new BrowserSignInTask(this, conf, token, secret, verifier, mUserColor, mAPIUrlFormat,
|
mTask = new BrowserSignInTask(this, conf, token, secret, verifier, mUserColor, mAPIUrlFormat,
|
||||||
mSameOAuthSigningUrl);
|
mSameOAuthSigningUrl, mNoVersionSuffix);
|
||||||
mTask.execute();
|
mTask.execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -397,9 +398,10 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta
|
||||||
cb.setHttpClientFactory(new TwidereHttpClientFactory(mApplication));
|
cb.setHttpClientFactory(new TwidereHttpClientFactory(mApplication));
|
||||||
setUserAgent(this, cb);
|
setUserAgent(this, cb);
|
||||||
if (!isEmpty(mAPIUrlFormat)) {
|
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.setOAuthBaseURL(Utils.getApiUrl(mAPIUrlFormat, "api", "/oauth/"));
|
||||||
cb.setUploadBaseURL(Utils.getApiUrl(mAPIUrlFormat, "upload", "/1.1/"));
|
cb.setUploadBaseURL(Utils.getApiUrl(mAPIUrlFormat, "upload", versionSuffix));
|
||||||
if (!mSameOAuthSigningUrl) {
|
if (!mSameOAuthSigningUrl) {
|
||||||
cb.setSigningRestBaseURL(DEFAULT_SIGNING_REST_BASE_URL);
|
cb.setSigningRestBaseURL(DEFAULT_SIGNING_REST_BASE_URL);
|
||||||
cb.setSigningOAuthBaseURL(DEFAULT_SIGNING_OAUTH_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 String apiUrlFormat = getNonEmptyString(mPreferences, KEY_API_URL_FORMAT, null);
|
||||||
final int authType = mPreferences.getInt(KEY_AUTH_TYPE, Accounts.AUTH_TYPE_OAUTH);
|
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 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 consumerKey = getNonEmptyString(mPreferences, KEY_CONSUMER_KEY, TWITTER_CONSUMER_KEY_2);
|
||||||
final String consumerSecret = getNonEmptyString(mPreferences, KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET_2);
|
final String consumerSecret = getNonEmptyString(mPreferences, KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET_2);
|
||||||
if (isEmpty(mAPIUrlFormat) || defaultApiChanged) {
|
if (isEmpty(mAPIUrlFormat) || defaultApiChanged) {
|
||||||
|
@ -448,6 +451,9 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta
|
||||||
if (defaultApiChanged) {
|
if (defaultApiChanged) {
|
||||||
mSameOAuthSigningUrl = sameOAuthSigningUrl;
|
mSameOAuthSigningUrl = sameOAuthSigningUrl;
|
||||||
}
|
}
|
||||||
|
if (defaultApiChanged) {
|
||||||
|
mNoVersionSuffix = noVersionSuffix;
|
||||||
|
}
|
||||||
if (isEmpty(mConsumerKey) || defaultApiChanged) {
|
if (isEmpty(mConsumerKey) || defaultApiChanged) {
|
||||||
mConsumerKey = consumerKey;
|
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 != null) {
|
||||||
if (result.succeed) {
|
if (result.succeed) {
|
||||||
final ContentValues values;
|
final ContentValues values;
|
||||||
switch (result.auth_type) {
|
switch (result.auth_type) {
|
||||||
case Accounts.AUTH_TYPE_BASIC: {
|
case Accounts.AUTH_TYPE_BASIC: {
|
||||||
values = makeAccountContentValuesBasic(result.conf, result.basic_username,
|
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;
|
break;
|
||||||
}
|
}
|
||||||
case Accounts.AUTH_TYPE_TWIP_O_MODE: {
|
case Accounts.AUTH_TYPE_TWIP_O_MODE: {
|
||||||
values = makeAccountContentValuesTWIP(result.conf, result.user, result.color,
|
values = makeAccountContentValuesTWIP(result.conf, result.user, result.color,
|
||||||
result.api_url_format);
|
result.api_url_format, result.no_version_suffix);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Accounts.AUTH_TYPE_OAUTH:
|
case Accounts.AUTH_TYPE_OAUTH:
|
||||||
case Accounts.AUTH_TYPE_XAUTH: {
|
case Accounts.AUTH_TYPE_XAUTH: {
|
||||||
values = makeAccountContentValuesOAuth(result.conf, result.access_token, result.user,
|
values = makeAccountContentValuesOAuth(result.conf, result.access_token,
|
||||||
result.auth_type, result.color, result.api_url_format, result.same_oauth_signing_url);
|
result.user, result.auth_type, result.color, result.api_url_format,
|
||||||
|
result.same_oauth_signing_url, result.no_version_suffix);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
|
@ -540,7 +548,7 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta
|
||||||
mSetColorButton.setEnabled(false);
|
mSetColorButton.setEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static abstract class AbstractSignInTask extends AsyncTask<Void, Void, SigninResponse> {
|
public static abstract class AbstractSignInTask extends AsyncTask<Void, Void, SignInResponse> {
|
||||||
|
|
||||||
protected final Configuration conf;
|
protected final Configuration conf;
|
||||||
protected final SignInActivity callback;
|
protected final SignInActivity callback;
|
||||||
|
@ -551,7 +559,7 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onPostExecute(final SigninResponse result) {
|
protected void onPostExecute(final SignInResponse result) {
|
||||||
if (callback != null) {
|
if (callback != null) {
|
||||||
callback.onSignInResult(result);
|
callback.onSignInResult(result);
|
||||||
}
|
}
|
||||||
|
@ -597,11 +605,11 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta
|
||||||
|
|
||||||
private final Context context;
|
private final Context context;
|
||||||
private final String api_url_format;
|
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,
|
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 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);
|
super(context, conf);
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.conf = conf;
|
this.conf = conf;
|
||||||
|
@ -611,23 +619,24 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta
|
||||||
this.user_color = user_color;
|
this.user_color = user_color;
|
||||||
this.api_url_format = api_url_format;
|
this.api_url_format = api_url_format;
|
||||||
this.same_oauth_signing_url = same_oauth_signing_url;
|
this.same_oauth_signing_url = same_oauth_signing_url;
|
||||||
|
this.no_version_suffix = no_version_suffix;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected SigninResponse doInBackground(final Void... params) {
|
protected SignInResponse doInBackground(final Void... params) {
|
||||||
try {
|
try {
|
||||||
final Twitter twitter = new TwitterFactory(conf).getInstance();
|
final Twitter twitter = new TwitterFactory(conf).getInstance();
|
||||||
final AccessToken access_token = twitter.getOAuthAccessToken(new RequestToken(conf, request_token,
|
final AccessToken access_token = twitter.getOAuthAccessToken(new RequestToken(conf, request_token,
|
||||||
request_token_secret), oauth_verifier);
|
request_token_secret), oauth_verifier);
|
||||||
final long userId = access_token.getUserId();
|
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();
|
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);
|
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,
|
return new SignInResponse(conf, access_token, user, Accounts.AUTH_TYPE_OAUTH, color,
|
||||||
same_oauth_signing_url);
|
api_url_format, same_oauth_signing_url, no_version_suffix);
|
||||||
} catch (final TwitterException e) {
|
} 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 Context context;
|
||||||
private final String api_url_format;
|
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,
|
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 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);
|
super(context, conf);
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.conf = conf;
|
this.conf = conf;
|
||||||
|
@ -669,10 +678,11 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta
|
||||||
this.user_color = user_color;
|
this.user_color = user_color;
|
||||||
this.api_url_format = api_url_format;
|
this.api_url_format = api_url_format;
|
||||||
this.same_oauth_signing_url = same_oauth_signing_url;
|
this.same_oauth_signing_url = same_oauth_signing_url;
|
||||||
|
this.no_version_suffix = no_version_suffix;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected SigninResponse doInBackground(final Void... params) {
|
protected SignInResponse doInBackground(final Void... params) {
|
||||||
try {
|
try {
|
||||||
switch (auth_type) {
|
switch (auth_type) {
|
||||||
case Accounts.AUTH_TYPE_OAUTH:
|
case Accounts.AUTH_TYPE_OAUTH:
|
||||||
|
@ -687,67 +697,73 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta
|
||||||
return authOAuth();
|
return authOAuth();
|
||||||
} catch (final TwitterException e) {
|
} catch (final TwitterException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
return new SigninResponse(false, false, e);
|
return new SignInResponse(false, false, e);
|
||||||
} catch (final AuthenticationException e) {
|
} catch (final AuthenticationException e) {
|
||||||
e.printStackTrace();
|
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 Twitter twitter = new TwitterFactory(conf).getInstance(new BasicAuthorization(username, password));
|
||||||
final User user = twitter.verifyCredentials();
|
final User user = twitter.verifyCredentials();
|
||||||
final long user_id = user.getId();
|
final long user_id = user.getId();
|
||||||
if (user_id <= 0) return new SigninResponse(false, false, null);
|
if (user_id <= 0) return new SignInResponse(false, false, null);
|
||||||
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);
|
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 Twitter twitter = new TwitterFactory(conf).getInstance();
|
||||||
final OAuthPasswordAuthenticator authenticator = new OAuthPasswordAuthenticator(twitter);
|
final OAuthPasswordAuthenticator authenticator = new OAuthPasswordAuthenticator(twitter);
|
||||||
final AccessToken access_token = authenticator.getOAuthAccessToken(username, password);
|
final AccessToken access_token = authenticator.getOAuthAccessToken(username, password);
|
||||||
final long user_id = access_token.getUserId();
|
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();
|
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);
|
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,
|
return new SignInResponse(conf, access_token, user, Accounts.AUTH_TYPE_OAUTH, color,
|
||||||
same_oauth_signing_url);
|
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 Twitter twitter = new TwitterFactory(conf).getInstance(new TwipOModeAuthorization());
|
||||||
final User user = twitter.verifyCredentials();
|
final User user = twitter.verifyCredentials();
|
||||||
final long user_id = user.getId();
|
final long user_id = user.getId();
|
||||||
if (user_id <= 0) return new SigninResponse(false, false, null);
|
if (user_id <= 0) return new SignInResponse(false, false, null);
|
||||||
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);
|
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 Twitter twitter = new TwitterFactory(conf).getInstance();
|
||||||
final AccessToken access_token = twitter.getOAuthAccessToken(username, password);
|
final AccessToken access_token = twitter.getOAuthAccessToken(username, password);
|
||||||
final User user = twitter.verifyCredentials();
|
final User user = twitter.verifyCredentials();
|
||||||
final long user_id = user.getId();
|
final long user_id = user.getId();
|
||||||
if (user_id <= 0) return new SigninResponse(false, false, null);
|
if (user_id <= 0) return new SignInResponse(false, false, null);
|
||||||
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);
|
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,
|
return new SignInResponse(conf, access_token, user, Accounts.AUTH_TYPE_XAUTH, color,
|
||||||
same_oauth_signing_url);
|
api_url_format, same_oauth_signing_url, no_version_suffix);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getThemeResourceId() {
|
||||||
|
return ThemeUtils.getSettingsThemeResource(this);
|
||||||
|
}
|
||||||
|
|
||||||
static interface SigninCallback {
|
static interface SigninCallback {
|
||||||
void onSigninResult(SigninResponse response);
|
void onSigninResult(SignInResponse response);
|
||||||
|
|
||||||
void onSigninStart();
|
void onSigninStart();
|
||||||
}
|
}
|
||||||
|
|
||||||
static class SigninResponse {
|
static class SignInResponse {
|
||||||
|
|
||||||
public final boolean already_logged_in, succeed;
|
public final boolean already_logged_in, succeed;
|
||||||
public final Exception exception;
|
public final Exception exception;
|
||||||
|
@ -757,16 +773,16 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta
|
||||||
public final User user;
|
public final User user;
|
||||||
public final int auth_type, color;
|
public final int auth_type, color;
|
||||||
public final String api_url_format;
|
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) {
|
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);
|
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 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 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.already_logged_in = already_logged_in;
|
||||||
this.succeed = succeed;
|
this.succeed = succeed;
|
||||||
this.exception = exception;
|
this.exception = exception;
|
||||||
|
@ -779,23 +795,27 @@ public class SignInActivity extends BaseSupportActivity implements TwitterConsta
|
||||||
this.color = color;
|
this.color = color;
|
||||||
this.api_url_format = api_url_format;
|
this.api_url_format = api_url_format;
|
||||||
this.same_oauth_signing_url = same_oauth_signing_url;
|
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,
|
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 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,
|
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,
|
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 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,
|
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,
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -248,6 +248,8 @@ public interface SharedPreferenceConstants {
|
||||||
public static final String KEY_API_URL_FORMAT = "api_url_format";
|
public static final String KEY_API_URL_FORMAT = "api_url_format";
|
||||||
@Preference(type = BOOLEAN, hasDefault = true, defaultBoolean = false)
|
@Preference(type = BOOLEAN, hasDefault = true, defaultBoolean = false)
|
||||||
public static final String KEY_SAME_OAUTH_SIGNING_URL = "same_oauth_signing_url";
|
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)
|
@Preference(type = INT, hasDefault = true, defaultInt = Accounts.AUTH_TYPE_OAUTH)
|
||||||
public static final String KEY_AUTH_TYPE = "auth_type";
|
public static final String KEY_AUTH_TYPE = "auth_type";
|
||||||
@Preference(type = STRING, hasDefault = true, defaultString = TwidereConstants.TWITTER_CONSUMER_KEY_2)
|
@Preference(type = STRING, hasDefault = true, defaultString = TwidereConstants.TWITTER_CONSUMER_KEY_2)
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
|
|
||||||
package org.mariotaku.twidere.fragment.support;
|
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.Utils.getDisplayName;
|
||||||
import static org.mariotaku.twidere.util.content.ContentResolverUtils.bulkDelete;
|
import static org.mariotaku.twidere.util.content.ContentResolverUtils.bulkDelete;
|
||||||
import static org.mariotaku.twidere.util.content.ContentResolverUtils.bulkInsert;
|
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.ParcelableStatus;
|
||||||
import org.mariotaku.twidere.model.ParcelableUserMention;
|
import org.mariotaku.twidere.model.ParcelableUserMention;
|
||||||
import org.mariotaku.twidere.provider.TweetStore.Filters;
|
import org.mariotaku.twidere.provider.TweetStore.Filters;
|
||||||
|
import org.mariotaku.twidere.util.ContentValuesCreator;
|
||||||
import org.mariotaku.twidere.util.HtmlEscapeHelper;
|
import org.mariotaku.twidere.util.HtmlEscapeHelper;
|
||||||
import org.mariotaku.twidere.util.ParseUtils;
|
import org.mariotaku.twidere.util.ParseUtils;
|
||||||
import org.mariotaku.twidere.util.ThemeUtils;
|
import org.mariotaku.twidere.util.ThemeUtils;
|
||||||
|
@ -71,11 +72,11 @@ public class AddStatusFilterDialogFragment extends BaseSupportDialogFragment imp
|
||||||
if (value instanceof ParcelableUserMention) {
|
if (value instanceof ParcelableUserMention) {
|
||||||
final ParcelableUserMention mention = (ParcelableUserMention) value;
|
final ParcelableUserMention mention = (ParcelableUserMention) value;
|
||||||
user_ids.add(mention.id);
|
user_ids.add(mention.id);
|
||||||
user_values.add(makeFilterdUserContentValues(mention));
|
user_values.add(makeFilteredUserContentValues(mention));
|
||||||
} else if (value instanceof ParcelableStatus) {
|
} else if (value instanceof ParcelableStatus) {
|
||||||
final ParcelableStatus status = (ParcelableStatus) value;
|
final ParcelableStatus status = (ParcelableStatus) value;
|
||||||
user_ids.add(status.user_id);
|
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) {
|
} else if (info.type == FilterItemInfo.FILTER_TYPE_KEYWORD) {
|
||||||
if (value != null) {
|
if (value != null) {
|
||||||
final String keyword = ParseUtils.parseString(value);
|
final String keyword = ParseUtils.parseString(value);
|
||||||
|
|
|
@ -65,7 +65,6 @@ import android.widget.ListView;
|
||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import org.mariotaku.menucomponent.widget.MenuBar;
|
|
||||||
import org.mariotaku.refreshnow.widget.RefreshMode;
|
import org.mariotaku.refreshnow.widget.RefreshMode;
|
||||||
import org.mariotaku.twidere.R;
|
import org.mariotaku.twidere.R;
|
||||||
import org.mariotaku.twidere.activity.support.AccountSelectorActivity;
|
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.ColorLabelRelativeLayout;
|
||||||
import org.mariotaku.twidere.view.ExtendedFrameLayout;
|
import org.mariotaku.twidere.view.ExtendedFrameLayout;
|
||||||
import org.mariotaku.twidere.view.StatusTextView;
|
import org.mariotaku.twidere.view.StatusTextView;
|
||||||
|
import org.mariotaku.twidere.view.TwidereMenuBar;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -156,7 +156,7 @@ public class StatusFragment extends ParcelableStatusesListFragment implements On
|
||||||
private boolean mFollowInfoDisplayed, mLocationInfoDisplayed;
|
private boolean mFollowInfoDisplayed, mLocationInfoDisplayed;
|
||||||
private boolean mStatusLoaderInitialized, mLocationLoaderInitialized;
|
private boolean mStatusLoaderInitialized, mLocationLoaderInitialized;
|
||||||
private boolean mFollowInfoLoaderInitialized;
|
private boolean mFollowInfoLoaderInitialized;
|
||||||
;
|
|
||||||
private boolean mShouldScroll;
|
private boolean mShouldScroll;
|
||||||
private SharedPreferences mPreferences;
|
private SharedPreferences mPreferences;
|
||||||
private AsyncTwitterWrapper mTwitterWrapper;
|
private AsyncTwitterWrapper mTwitterWrapper;
|
||||||
|
@ -171,7 +171,7 @@ public class StatusFragment extends ParcelableStatusesListFragment implements On
|
||||||
private Button mRetryButton;
|
private Button mRetryButton;
|
||||||
private View mMainContent, mFollowIndicator, mImagePreviewContainer, mLocationContainer, mLocationBackgroundView;
|
private View mMainContent, mFollowIndicator, mImagePreviewContainer, mLocationContainer, mLocationBackgroundView;
|
||||||
private ColorLabelRelativeLayout mProfileView;
|
private ColorLabelRelativeLayout mProfileView;
|
||||||
private MenuBar mMenuBar;
|
private TwidereMenuBar mMenuBar;
|
||||||
private ProgressBar mDetailsLoadProgress, mFollowInfoProgress;
|
private ProgressBar mDetailsLoadProgress, mFollowInfoProgress;
|
||||||
private LinearLayout mImagePreviewGrid;
|
private LinearLayout mImagePreviewGrid;
|
||||||
private View mHeaderView;
|
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);
|
final View view = inflater.inflate(R.layout.fragment_details_page, null, false);
|
||||||
mMainContent = view.findViewById(R.id.content);
|
mMainContent = view.findViewById(R.id.content);
|
||||||
mDetailsLoadProgress = (ProgressBar) view.findViewById(R.id.details_load_progress);
|
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 = (ExtendedFrameLayout) view.findViewById(R.id.details_container);
|
||||||
mDetailsContainer.addView(super.onCreateView(inflater, container, savedInstanceState));
|
mDetailsContainer.addView(super.onCreateView(inflater, container, savedInstanceState));
|
||||||
mHeaderView = inflater.inflate(R.layout.header_status, null, false);
|
mHeaderView = inflater.inflate(R.layout.header_status, null, false);
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -83,6 +83,7 @@ import org.mariotaku.twidere.provider.TweetStore.Accounts;
|
||||||
import org.mariotaku.twidere.provider.TweetStore.CachedUsers;
|
import org.mariotaku.twidere.provider.TweetStore.CachedUsers;
|
||||||
import org.mariotaku.twidere.provider.TweetStore.Filters;
|
import org.mariotaku.twidere.provider.TweetStore.Filters;
|
||||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||||
|
import org.mariotaku.twidere.util.ContentValuesCreator;
|
||||||
import org.mariotaku.twidere.util.FlymeUtils;
|
import org.mariotaku.twidere.util.FlymeUtils;
|
||||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||||
import org.mariotaku.twidere.util.ParseUtils;
|
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.ColorLabelLinearLayout;
|
||||||
import org.mariotaku.twidere.view.ExtendedFrameLayout;
|
import org.mariotaku.twidere.view.ExtendedFrameLayout;
|
||||||
import org.mariotaku.twidere.view.ProfileImageView;
|
import org.mariotaku.twidere.view.ProfileImageView;
|
||||||
|
import org.mariotaku.twidere.view.TwidereMenuBar;
|
||||||
import org.mariotaku.twidere.view.iface.IExtendedView.OnSizeChangedListener;
|
import org.mariotaku.twidere.view.iface.IExtendedView.OnSizeChangedListener;
|
||||||
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
@ -101,7 +103,6 @@ import twitter4j.Twitter;
|
||||||
import twitter4j.TwitterException;
|
import twitter4j.TwitterException;
|
||||||
|
|
||||||
import static android.text.TextUtils.isEmpty;
|
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.ParseUtils.parseLong;
|
||||||
import static org.mariotaku.twidere.util.UserColorNicknameUtils.clearUserColor;
|
import static org.mariotaku.twidere.util.UserColorNicknameUtils.clearUserColor;
|
||||||
import static org.mariotaku.twidere.util.UserColorNicknameUtils.clearUserNickname;
|
import static org.mariotaku.twidere.util.UserColorNicknameUtils.clearUserNickname;
|
||||||
|
@ -161,7 +162,7 @@ public class UserProfileFragment extends BaseSupportListFragment implements OnCl
|
||||||
private View mMainContent;
|
private View mMainContent;
|
||||||
private View mProfileBannerSpace;
|
private View mProfileBannerSpace;
|
||||||
private ProgressBar mDetailsLoadProgress;
|
private ProgressBar mDetailsLoadProgress;
|
||||||
private MenuBar mMenuBar;
|
private TwidereMenuBar mMenuBar;
|
||||||
|
|
||||||
private ListActionAdapter mAdapter;
|
private ListActionAdapter mAdapter;
|
||||||
|
|
||||||
|
@ -720,7 +721,7 @@ public class UserProfileFragment extends BaseSupportListFragment implements OnCl
|
||||||
super.onViewCreated(view, savedInstanceState);
|
super.onViewCreated(view, savedInstanceState);
|
||||||
mMainContent = view.findViewById(R.id.content);
|
mMainContent = view.findViewById(R.id.content);
|
||||||
mDetailsLoadProgress = (ProgressBar) view.findViewById(R.id.details_load_progress);
|
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);
|
mErrorRetryContainer = view.findViewById(R.id.error_retry_container);
|
||||||
mRetryButton = (Button) view.findViewById(R.id.retry);
|
mRetryButton = (Button) view.findViewById(R.id.retry);
|
||||||
mErrorMessageView = (TextView) view.findViewById(R.id.error_message);
|
mErrorMessageView = (TextView) view.findViewById(R.id.error_message);
|
||||||
|
@ -792,7 +793,7 @@ public class UserProfileFragment extends BaseSupportListFragment implements OnCl
|
||||||
case MENU_ADD_TO_FILTER: {
|
case MENU_ADD_TO_FILTER: {
|
||||||
final ContentResolver resolver = getContentResolver();
|
final ContentResolver resolver = getContentResolver();
|
||||||
resolver.delete(Filters.Users.CONTENT_URI, Where.equals(Filters.Users.USER_ID, user.id).getSQL(), null);
|
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);
|
showInfoMessage(getActivity(), R.string.message_user_muted, false);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,9 +19,6 @@
|
||||||
|
|
||||||
package org.mariotaku.twidere.model;
|
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.content.Context;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
|
@ -38,263 +35,268 @@ import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
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 class Account implements Parcelable {
|
||||||
|
|
||||||
public static final Parcelable.Creator<Account> CREATOR = new Parcelable.Creator<Account>() {
|
public static final Parcelable.Creator<Account> CREATOR = new Parcelable.Creator<Account>() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Account createFromParcel(final Parcel in) {
|
public Account createFromParcel(final Parcel in) {
|
||||||
return new Account(in);
|
return new Account(in);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Account[] newArray(final int size) {
|
public Account[] newArray(final int size) {
|
||||||
return new Account[size];
|
return new Account[size];
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public final String screen_name, name, profile_image_url, profile_banner_url;
|
public final String screen_name, name, profile_image_url, profile_banner_url;
|
||||||
public final long account_id;
|
public final long account_id;
|
||||||
public final int color;
|
public final int color;
|
||||||
public final boolean is_activated;
|
public final boolean is_activated;
|
||||||
public final boolean is_dummy;
|
public final boolean is_dummy;
|
||||||
|
|
||||||
public Account(final Cursor cursor, final Indices indices) {
|
public Account(final Cursor cursor, final Indices indices) {
|
||||||
is_dummy = false;
|
is_dummy = false;
|
||||||
screen_name = indices.screen_name != -1 ? cursor.getString(indices.screen_name) : null;
|
screen_name = indices.screen_name != -1 ? cursor.getString(indices.screen_name) : null;
|
||||||
name = indices.name != -1 ? cursor.getString(indices.name) : null;
|
name = indices.name != -1 ? cursor.getString(indices.name) : null;
|
||||||
account_id = indices.account_id != -1 ? cursor.getLong(indices.account_id) : -1;
|
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_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;
|
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;
|
color = indices.color != -1 ? cursor.getInt(indices.color) : Color.TRANSPARENT;
|
||||||
is_activated = indices.is_activated != -1 ? cursor.getInt(indices.is_activated) == 1 : false;
|
is_activated = indices.is_activated != -1 ? cursor.getInt(indices.is_activated) == 1 : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Account(final Parcel source) {
|
public Account(final Parcel source) {
|
||||||
is_dummy = source.readInt() == 1;
|
is_dummy = source.readInt() == 1;
|
||||||
is_activated = source.readInt() == 1;
|
is_activated = source.readInt() == 1;
|
||||||
account_id = source.readLong();
|
account_id = source.readLong();
|
||||||
name = source.readString();
|
name = source.readString();
|
||||||
screen_name = source.readString();
|
screen_name = source.readString();
|
||||||
profile_image_url = source.readString();
|
profile_image_url = source.readString();
|
||||||
profile_banner_url = source.readString();
|
profile_banner_url = source.readString();
|
||||||
color = source.readInt();
|
color = source.readInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Account() {
|
private Account() {
|
||||||
is_dummy = true;
|
is_dummy = true;
|
||||||
screen_name = null;
|
screen_name = null;
|
||||||
name = null;
|
name = null;
|
||||||
account_id = -1;
|
account_id = -1;
|
||||||
profile_image_url = null;
|
profile_image_url = null;
|
||||||
profile_banner_url = null;
|
profile_banner_url = null;
|
||||||
color = 0;
|
color = 0;
|
||||||
is_activated = false;
|
is_activated = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int describeContents() {
|
public int describeContents() {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "Account{screen_name=" + screen_name + ", name=" + name + ", profile_image_url=" + profile_image_url
|
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
|
+ ", profile_banner_url=" + profile_banner_url + ", account_id=" + account_id + ", color=" + color
|
||||||
+ ", is_activated=" + is_activated + ", is_dummy=" + is_dummy + "}";
|
+ ", is_activated=" + is_activated + ", is_dummy=" + is_dummy + "}";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeToParcel(final Parcel out, final int flags) {
|
public void writeToParcel(final Parcel out, final int flags) {
|
||||||
out.writeInt(is_dummy ? 1 : 0);
|
out.writeInt(is_dummy ? 1 : 0);
|
||||||
out.writeInt(is_activated ? 1 : 0);
|
out.writeInt(is_activated ? 1 : 0);
|
||||||
out.writeLong(account_id);
|
out.writeLong(account_id);
|
||||||
out.writeString(name);
|
out.writeString(name);
|
||||||
out.writeString(screen_name);
|
out.writeString(screen_name);
|
||||||
out.writeString(profile_image_url);
|
out.writeString(profile_image_url);
|
||||||
out.writeString(profile_banner_url);
|
out.writeString(profile_banner_url);
|
||||||
out.writeInt(color);
|
out.writeInt(color);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Account dummyInstance() {
|
public static Account dummyInstance() {
|
||||||
return new Account();
|
return new Account();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Account getAccount(final Context context, final long account_id) {
|
public static Account getAccount(final Context context, final long account_id) {
|
||||||
if (context == null) return null;
|
if (context == null) return null;
|
||||||
final Cursor cur = ContentResolverUtils.query(context.getContentResolver(), Accounts.CONTENT_URI,
|
final Cursor cur = ContentResolverUtils.query(context.getContentResolver(), Accounts.CONTENT_URI,
|
||||||
Accounts.COLUMNS, Accounts.ACCOUNT_ID + " = " + account_id, null, null);
|
Accounts.COLUMNS, Accounts.ACCOUNT_ID + " = " + account_id, null, null);
|
||||||
if (cur != null) {
|
if (cur != null) {
|
||||||
try {
|
try {
|
||||||
if (cur.getCount() > 0 && cur.moveToFirst()) {
|
if (cur.getCount() > 0 && cur.moveToFirst()) {
|
||||||
final Indices indices = new Indices(cur);
|
final Indices indices = new Indices(cur);
|
||||||
cur.moveToFirst();
|
cur.moveToFirst();
|
||||||
return new Account(cur, indices);
|
return new Account(cur, indices);
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
cur.close();
|
cur.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static long[] getAccountIds(final Account[] accounts) {
|
public static long[] getAccountIds(final Account[] accounts) {
|
||||||
final long[] ids = new long[accounts.length];
|
final long[] ids = new long[accounts.length];
|
||||||
for (int i = 0, j = accounts.length; i < j; i++) {
|
for (int i = 0, j = accounts.length; i < j; i++) {
|
||||||
ids[i] = accounts[i].account_id;
|
ids[i] = accounts[i].account_id;
|
||||||
}
|
}
|
||||||
return ids;
|
return ids;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Account[] getAccounts(final Context context, final boolean activatedOnly,
|
public static Account[] getAccounts(final Context context, final boolean activatedOnly,
|
||||||
final boolean officialKeyOnly) {
|
final boolean officialKeyOnly) {
|
||||||
final List<Account> list = getAccountsList(context, activatedOnly, officialKeyOnly);
|
final List<Account> list = getAccountsList(context, activatedOnly, officialKeyOnly);
|
||||||
return list.toArray(new Account[list.size()]);
|
return list.toArray(new Account[list.size()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Account[] getAccounts(final Context context, final long[] accountIds) {
|
public static Account[] getAccounts(final Context context, final long[] accountIds) {
|
||||||
if (context == null) return new Account[0];
|
if (context == null) return new Account[0];
|
||||||
final String where = accountIds != null ? Where.in(new Column(Accounts.ACCOUNT_ID),
|
final String where = accountIds != null ? Where.in(new Column(Accounts.ACCOUNT_ID),
|
||||||
new RawItemArray(accountIds)).getSQL() : null;
|
new RawItemArray(accountIds)).getSQL() : null;
|
||||||
final Cursor cur = ContentResolverUtils.query(context.getContentResolver(), Accounts.CONTENT_URI,
|
final Cursor cur = ContentResolverUtils.query(context.getContentResolver(), Accounts.CONTENT_URI,
|
||||||
Accounts.COLUMNS_NO_CREDENTIALS, where, null, null);
|
Accounts.COLUMNS_NO_CREDENTIALS, where, null, null);
|
||||||
if (cur == null) return new Account[0];
|
if (cur == null) return new Account[0];
|
||||||
try {
|
try {
|
||||||
final Indices idx = new Indices(cur);
|
final Indices idx = new Indices(cur);
|
||||||
cur.moveToFirst();
|
cur.moveToFirst();
|
||||||
final Account[] names = new Account[cur.getCount()];
|
final Account[] names = new Account[cur.getCount()];
|
||||||
while (!cur.isAfterLast()) {
|
while (!cur.isAfterLast()) {
|
||||||
names[cur.getPosition()] = new Account(cur, idx);
|
names[cur.getPosition()] = new Account(cur, idx);
|
||||||
cur.moveToNext();
|
cur.moveToNext();
|
||||||
}
|
}
|
||||||
return names;
|
return names;
|
||||||
} finally {
|
} finally {
|
||||||
cur.close();
|
cur.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<Account> getAccountsList(final Context context, final boolean activatedOnly) {
|
public static List<Account> getAccountsList(final Context context, final boolean activatedOnly) {
|
||||||
return getAccountsList(context, activatedOnly, false);
|
return getAccountsList(context, activatedOnly, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<Account> getAccountsList(final Context context, final boolean activatedOnly,
|
public static List<Account> getAccountsList(final Context context, final boolean activatedOnly,
|
||||||
final boolean officialKeyOnly) {
|
final boolean officialKeyOnly) {
|
||||||
if (context == null) return Collections.emptyList();
|
if (context == null) return Collections.emptyList();
|
||||||
final ArrayList<Account> accounts = new ArrayList<Account>();
|
final ArrayList<Account> accounts = new ArrayList<Account>();
|
||||||
final Cursor cur = ContentResolverUtils.query(context.getContentResolver(), Accounts.CONTENT_URI,
|
final Cursor cur = ContentResolverUtils.query(context.getContentResolver(), Accounts.CONTENT_URI,
|
||||||
Accounts.COLUMNS_NO_CREDENTIALS, activatedOnly ? Accounts.IS_ACTIVATED + " = 1" : null, null, null);
|
Accounts.COLUMNS_NO_CREDENTIALS, activatedOnly ? Accounts.IS_ACTIVATED + " = 1" : null, null, null);
|
||||||
if (cur != null) {
|
if (cur != null) {
|
||||||
final Indices indices = new Indices(cur);
|
final Indices indices = new Indices(cur);
|
||||||
cur.moveToFirst();
|
cur.moveToFirst();
|
||||||
while (!cur.isAfterLast()) {
|
while (!cur.isAfterLast()) {
|
||||||
if (!officialKeyOnly) {
|
if (!officialKeyOnly) {
|
||||||
accounts.add(new Account(cur, indices));
|
accounts.add(new Account(cur, indices));
|
||||||
} else {
|
} else {
|
||||||
final String consumerKey = cur.getString(indices.consumer_key);
|
final String consumerKey = cur.getString(indices.consumer_key);
|
||||||
final String consumerSecret = cur.getString(indices.consumer_secret);
|
final String consumerSecret = cur.getString(indices.consumer_secret);
|
||||||
if (shouldForceUsingPrivateAPIs(context)
|
if (shouldForceUsingPrivateAPIs(context)
|
||||||
|| isOfficialConsumerKeySecret(context, consumerKey, consumerSecret)) {
|
|| isOfficialConsumerKeySecret(context, consumerKey, consumerSecret)) {
|
||||||
accounts.add(new Account(cur, indices));
|
accounts.add(new Account(cur, indices));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cur.moveToNext();
|
cur.moveToNext();
|
||||||
}
|
}
|
||||||
cur.close();
|
cur.close();
|
||||||
}
|
}
|
||||||
return accounts;
|
return accounts;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static AccountWithCredentials getAccountWithCredentials(final Context context, final long account_id) {
|
public static AccountWithCredentials getAccountWithCredentials(final Context context, final long account_id) {
|
||||||
if (context == null) return null;
|
if (context == null) return null;
|
||||||
final Cursor cur = ContentResolverUtils.query(context.getContentResolver(), Accounts.CONTENT_URI,
|
final Cursor cur = ContentResolverUtils.query(context.getContentResolver(), Accounts.CONTENT_URI,
|
||||||
Accounts.COLUMNS, Accounts.ACCOUNT_ID + " = " + account_id, null, null);
|
Accounts.COLUMNS, Accounts.ACCOUNT_ID + " = " + account_id, null, null);
|
||||||
if (cur != null) {
|
if (cur != null) {
|
||||||
try {
|
try {
|
||||||
if (cur.getCount() > 0 && cur.moveToFirst()) {
|
if (cur.getCount() > 0 && cur.moveToFirst()) {
|
||||||
final Indices indices = new Indices(cur);
|
final Indices indices = new Indices(cur);
|
||||||
cur.moveToFirst();
|
cur.moveToFirst();
|
||||||
return new AccountWithCredentials(cur, indices);
|
return new AccountWithCredentials(cur, indices);
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
cur.close();
|
cur.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class AccountWithCredentials extends Account {
|
public static class AccountWithCredentials extends Account {
|
||||||
|
|
||||||
public final int auth_type;
|
public final int auth_type;
|
||||||
public final String consumer_key, consumer_secret;
|
public final String consumer_key, consumer_secret;
|
||||||
public final String basic_auth_username, basic_auth_password;
|
public final String basic_auth_username, basic_auth_password;
|
||||||
public final String oauth_token, oauth_token_secret;
|
public final String oauth_token, oauth_token_secret;
|
||||||
public final String api_url_format;
|
public final String api_url_format;
|
||||||
public final boolean same_oauth_signing_url;
|
public final boolean same_oauth_signing_url, no_version_suffix;
|
||||||
|
|
||||||
public AccountWithCredentials(final Cursor cursor, final Indices indices) {
|
public AccountWithCredentials(final Cursor cursor, final Indices indices) {
|
||||||
super(cursor, indices);
|
super(cursor, indices);
|
||||||
auth_type = cursor.getInt(indices.auth_type);
|
auth_type = cursor.getInt(indices.auth_type);
|
||||||
consumer_key = cursor.getString(indices.consumer_key);
|
consumer_key = cursor.getString(indices.consumer_key);
|
||||||
consumer_secret = cursor.getString(indices.consumer_secret);
|
consumer_secret = cursor.getString(indices.consumer_secret);
|
||||||
basic_auth_username = cursor.getString(indices.basic_auth_username);
|
basic_auth_username = cursor.getString(indices.basic_auth_username);
|
||||||
basic_auth_password = cursor.getString(indices.basic_auth_password);
|
basic_auth_password = cursor.getString(indices.basic_auth_password);
|
||||||
oauth_token = cursor.getString(indices.oauth_token);
|
oauth_token = cursor.getString(indices.oauth_token);
|
||||||
oauth_token_secret = cursor.getString(indices.oauth_token_secret);
|
oauth_token_secret = cursor.getString(indices.oauth_token_secret);
|
||||||
api_url_format = cursor.getString(indices.api_url_format);
|
api_url_format = cursor.getString(indices.api_url_format);
|
||||||
same_oauth_signing_url = cursor.getInt(indices.same_oauth_signing_url) == 1;
|
same_oauth_signing_url = cursor.getInt(indices.same_oauth_signing_url) == 1;
|
||||||
}
|
no_version_suffix = cursor.getInt(indices.no_version_suffix) == 1;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "AccountWithCredentials{auth_type=" + auth_type + ", consumer_key=" + consumer_key
|
return "AccountWithCredentials{auth_type=" + auth_type + ", consumer_key=" + consumer_key
|
||||||
+ ", consumer_secret=" + consumer_secret + ", basic_auth_password=" + basic_auth_password
|
+ ", consumer_secret=" + consumer_secret + ", basic_auth_password=" + basic_auth_password
|
||||||
+ ", oauth_token=" + oauth_token + ", oauth_token_secret=" + oauth_token_secret
|
+ ", oauth_token=" + oauth_token + ", oauth_token_secret=" + oauth_token_secret
|
||||||
+ ", api_url_format=" + api_url_format + ", same_oauth_signing_url=" + same_oauth_signing_url + "}";
|
+ ", 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) {
|
public static final boolean isOfficialCredentials(final Context context, final AccountWithCredentials account) {
|
||||||
if (account == null) return false;
|
if (account == null) return false;
|
||||||
final boolean isOAuth = account.auth_type == Accounts.AUTH_TYPE_OAUTH
|
final boolean isOAuth = account.auth_type == Accounts.AUTH_TYPE_OAUTH
|
||||||
|| account.auth_type == Accounts.AUTH_TYPE_XAUTH;
|
|| account.auth_type == Accounts.AUTH_TYPE_XAUTH;
|
||||||
final String consumerKey = account.consumer_key, consumerSecret = account.consumer_secret;
|
final String consumerKey = account.consumer_key, consumerSecret = account.consumer_secret;
|
||||||
return isOAuth && isOfficialConsumerKeySecret(context, consumerKey, consumerSecret);
|
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,
|
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,
|
auth_type, consumer_key, consumer_secret, basic_auth_username, basic_auth_password, oauth_token,
|
||||||
oauth_token_secret, api_url_format, same_oauth_signing_url;
|
oauth_token_secret, api_url_format, same_oauth_signing_url, no_version_suffix;
|
||||||
|
|
||||||
public Indices(final Cursor cursor) {
|
public Indices(final Cursor cursor) {
|
||||||
screen_name = cursor.getColumnIndex(Accounts.SCREEN_NAME);
|
screen_name = cursor.getColumnIndex(Accounts.SCREEN_NAME);
|
||||||
name = cursor.getColumnIndex(Accounts.NAME);
|
name = cursor.getColumnIndex(Accounts.NAME);
|
||||||
account_id = cursor.getColumnIndex(Accounts.ACCOUNT_ID);
|
account_id = cursor.getColumnIndex(Accounts.ACCOUNT_ID);
|
||||||
profile_image_url = cursor.getColumnIndex(Accounts.PROFILE_IMAGE_URL);
|
profile_image_url = cursor.getColumnIndex(Accounts.PROFILE_IMAGE_URL);
|
||||||
profile_banner_url = cursor.getColumnIndex(Accounts.PROFILE_BANNER_URL);
|
profile_banner_url = cursor.getColumnIndex(Accounts.PROFILE_BANNER_URL);
|
||||||
color = cursor.getColumnIndex(Accounts.COLOR);
|
color = cursor.getColumnIndex(Accounts.COLOR);
|
||||||
is_activated = cursor.getColumnIndex(Accounts.IS_ACTIVATED);
|
is_activated = cursor.getColumnIndex(Accounts.IS_ACTIVATED);
|
||||||
auth_type = cursor.getColumnIndex(Accounts.AUTH_TYPE);
|
auth_type = cursor.getColumnIndex(Accounts.AUTH_TYPE);
|
||||||
consumer_key = cursor.getColumnIndex(Accounts.CONSUMER_KEY);
|
consumer_key = cursor.getColumnIndex(Accounts.CONSUMER_KEY);
|
||||||
consumer_secret = cursor.getColumnIndex(Accounts.CONSUMER_SECRET);
|
consumer_secret = cursor.getColumnIndex(Accounts.CONSUMER_SECRET);
|
||||||
basic_auth_username = cursor.getColumnIndex(Accounts.BASIC_AUTH_USERNAME);
|
basic_auth_username = cursor.getColumnIndex(Accounts.BASIC_AUTH_USERNAME);
|
||||||
basic_auth_password = cursor.getColumnIndex(Accounts.BASIC_AUTH_PASSWORD);
|
basic_auth_password = cursor.getColumnIndex(Accounts.BASIC_AUTH_PASSWORD);
|
||||||
oauth_token = cursor.getColumnIndex(Accounts.OAUTH_TOKEN);
|
oauth_token = cursor.getColumnIndex(Accounts.OAUTH_TOKEN);
|
||||||
oauth_token_secret = cursor.getColumnIndex(Accounts.OAUTH_TOKEN_SECRET);
|
oauth_token_secret = cursor.getColumnIndex(Accounts.OAUTH_TOKEN_SECRET);
|
||||||
api_url_format = cursor.getColumnIndex(Accounts.API_URL_FORMAT);
|
api_url_format = cursor.getColumnIndex(Accounts.API_URL_FORMAT);
|
||||||
same_oauth_signing_url = cursor.getColumnIndex(Accounts.SAME_OAUTH_SIGNING_URL);
|
same_oauth_signing_url = cursor.getColumnIndex(Accounts.SAME_OAUTH_SIGNING_URL);
|
||||||
}
|
no_version_suffix = cursor.getColumnIndex(Accounts.NO_VERSION_SUFFIX);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "Indices{screen_name=" + screen_name + ", name=" + name + ", account_id=" + account_id
|
return "Indices{screen_name=" + screen_name + ", name=" + name + ", account_id=" + account_id
|
||||||
+ ", profile_image_url=" + profile_image_url + ", profile_banner_url=" + profile_banner_url
|
+ ", profile_image_url=" + profile_image_url + ", profile_banner_url=" + profile_banner_url
|
||||||
+ ", color=" + color + ", is_activated=" + is_activated + ", auth_type=" + auth_type
|
+ ", color=" + color + ", is_activated=" + is_activated + ", auth_type=" + auth_type
|
||||||
+ ", consumer_key=" + consumer_key + ", consumer_secret=" + consumer_secret
|
+ ", consumer_key=" + consumer_key + ", consumer_secret=" + consumer_secret
|
||||||
+ ", basic_auth_password=" + basic_auth_password + ", oauth_token=" + oauth_token
|
+ ", basic_auth_password=" + basic_auth_password + ", oauth_token=" + oauth_token
|
||||||
+ ", oauth_token_secret=" + oauth_token_secret + ", api_url_format=" + api_url_format
|
+ ", oauth_token_secret=" + oauth_token_secret + ", api_url_format=" + api_url_format
|
||||||
+ ", same_oauth_signing_url=" + same_oauth_signing_url + "}";
|
+ ", same_oauth_signing_url=" + same_oauth_signing_url + "}";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -19,8 +19,6 @@
|
||||||
|
|
||||||
package org.mariotaku.twidere.util;
|
package org.mariotaku.twidere.util;
|
||||||
|
|
||||||
import static org.mariotaku.twidere.util.HtmlEscapeHelper.toPlainText;
|
|
||||||
|
|
||||||
import android.content.ContentValues;
|
import android.content.ContentValues;
|
||||||
|
|
||||||
import org.json.JSONException;
|
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.Filters;
|
||||||
import org.mariotaku.twidere.provider.TweetStore.Statuses;
|
import org.mariotaku.twidere.provider.TweetStore.Statuses;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import twitter4j.DirectMessage;
|
import twitter4j.DirectMessage;
|
||||||
import twitter4j.GeoLocation;
|
import twitter4j.GeoLocation;
|
||||||
import twitter4j.Status;
|
import twitter4j.Status;
|
||||||
|
@ -54,302 +55,305 @@ import twitter4j.User;
|
||||||
import twitter4j.auth.AccessToken;
|
import twitter4j.auth.AccessToken;
|
||||||
import twitter4j.conf.Configuration;
|
import twitter4j.conf.Configuration;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import static org.mariotaku.twidere.util.HtmlEscapeHelper.toPlainText;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public final class ContentValuesCreator implements TwidereConstants {
|
public final class ContentValuesCreator implements TwidereConstants {
|
||||||
|
|
||||||
public static ContentValues makeAccountContentValuesBasic(final Configuration conf, final String basicUsername,
|
public static ContentValues makeAccountContentValuesBasic(final Configuration conf, final String basicUsername,
|
||||||
final String basicPassword, final User user, final int color, final String apiUrlFormat) {
|
final String basicPassword, final User user, final int color, final String apiUrlFormat,
|
||||||
if (user == null || user.getId() <= 0) return null;
|
final boolean noVersionSuffix) {
|
||||||
final ContentValues values = new ContentValues();
|
if (user == null || user.getId() <= 0) return null;
|
||||||
if (basicUsername == null || basicPassword == null) return null;
|
final ContentValues values = new ContentValues();
|
||||||
values.put(Accounts.BASIC_AUTH_USERNAME, basicUsername);
|
if (basicUsername == null || basicPassword == null) return null;
|
||||||
values.put(Accounts.BASIC_AUTH_PASSWORD, basicPassword);
|
values.put(Accounts.BASIC_AUTH_USERNAME, basicUsername);
|
||||||
values.put(Accounts.AUTH_TYPE, Accounts.AUTH_TYPE_BASIC);
|
values.put(Accounts.BASIC_AUTH_PASSWORD, basicPassword);
|
||||||
values.put(Accounts.ACCOUNT_ID, user.getId());
|
values.put(Accounts.AUTH_TYPE, Accounts.AUTH_TYPE_BASIC);
|
||||||
values.put(Accounts.SCREEN_NAME, user.getScreenName());
|
values.put(Accounts.ACCOUNT_ID, user.getId());
|
||||||
values.put(Accounts.NAME, user.getName());
|
values.put(Accounts.SCREEN_NAME, user.getScreenName());
|
||||||
values.put(Accounts.PROFILE_IMAGE_URL, ParseUtils.parseString(user.getProfileImageUrlHttps()));
|
values.put(Accounts.NAME, user.getName());
|
||||||
values.put(Accounts.PROFILE_BANNER_URL, ParseUtils.parseString(user.getProfileBannerImageUrl()));
|
values.put(Accounts.PROFILE_IMAGE_URL, ParseUtils.parseString(user.getProfileImageUrlHttps()));
|
||||||
values.put(Accounts.COLOR, color);
|
values.put(Accounts.PROFILE_BANNER_URL, ParseUtils.parseString(user.getProfileBannerImageUrl()));
|
||||||
values.put(Accounts.IS_ACTIVATED, 1);
|
values.put(Accounts.COLOR, color);
|
||||||
values.put(Accounts.API_URL_FORMAT, apiUrlFormat);
|
values.put(Accounts.IS_ACTIVATED, 1);
|
||||||
return values;
|
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,
|
public static ContentValues makeAccountContentValuesOAuth(final Configuration conf, final AccessToken accessToken,
|
||||||
final User user, final int authType, final int color, final String apiUrlFormat,
|
final User user, final int authType, final int color, final String apiUrlFormat,
|
||||||
final boolean sameOAuthSigningUrl) {
|
final boolean sameOAuthSigningUrl, final boolean noVersionSuffix) {
|
||||||
if (user == null || user.getId() <= 0 || accessToken == null || user.getId() != accessToken.getUserId())
|
if (user == null || user.getId() <= 0 || accessToken == null || user.getId() != accessToken.getUserId())
|
||||||
return null;
|
return null;
|
||||||
final ContentValues values = new ContentValues();
|
final ContentValues values = new ContentValues();
|
||||||
values.put(Accounts.OAUTH_TOKEN, accessToken.getToken());
|
values.put(Accounts.OAUTH_TOKEN, accessToken.getToken());
|
||||||
values.put(Accounts.OAUTH_TOKEN_SECRET, accessToken.getTokenSecret());
|
values.put(Accounts.OAUTH_TOKEN_SECRET, accessToken.getTokenSecret());
|
||||||
values.put(Accounts.CONSUMER_KEY, conf.getOAuthConsumerKey());
|
values.put(Accounts.CONSUMER_KEY, conf.getOAuthConsumerKey());
|
||||||
values.put(Accounts.CONSUMER_SECRET, conf.getOAuthConsumerSecret());
|
values.put(Accounts.CONSUMER_SECRET, conf.getOAuthConsumerSecret());
|
||||||
values.put(Accounts.AUTH_TYPE, authType);
|
values.put(Accounts.AUTH_TYPE, authType);
|
||||||
values.put(Accounts.ACCOUNT_ID, user.getId());
|
values.put(Accounts.ACCOUNT_ID, user.getId());
|
||||||
values.put(Accounts.SCREEN_NAME, user.getScreenName());
|
values.put(Accounts.SCREEN_NAME, user.getScreenName());
|
||||||
values.put(Accounts.NAME, user.getName());
|
values.put(Accounts.NAME, user.getName());
|
||||||
values.put(Accounts.PROFILE_IMAGE_URL, ParseUtils.parseString(user.getProfileImageUrlHttps()));
|
values.put(Accounts.PROFILE_IMAGE_URL, ParseUtils.parseString(user.getProfileImageUrlHttps()));
|
||||||
values.put(Accounts.PROFILE_BANNER_URL, ParseUtils.parseString(user.getProfileBannerImageUrl()));
|
values.put(Accounts.PROFILE_BANNER_URL, ParseUtils.parseString(user.getProfileBannerImageUrl()));
|
||||||
values.put(Accounts.COLOR, color);
|
values.put(Accounts.COLOR, color);
|
||||||
values.put(Accounts.IS_ACTIVATED, 1);
|
values.put(Accounts.IS_ACTIVATED, 1);
|
||||||
values.put(Accounts.API_URL_FORMAT, apiUrlFormat);
|
values.put(Accounts.API_URL_FORMAT, apiUrlFormat);
|
||||||
values.put(Accounts.SAME_OAUTH_SIGNING_URL, sameOAuthSigningUrl);
|
values.put(Accounts.SAME_OAUTH_SIGNING_URL, sameOAuthSigningUrl);
|
||||||
return values;
|
values.put(Accounts.NO_VERSION_SUFFIX, noVersionSuffix);
|
||||||
}
|
return values;
|
||||||
|
}
|
||||||
|
|
||||||
public static ContentValues makeAccountContentValuesTWIP(final Configuration conf, final User user,
|
public static ContentValues makeAccountContentValuesTWIP(final Configuration conf, final User user,
|
||||||
final int color, final String apiUrlFormat) {
|
final int color, final String apiUrlFormat, final boolean noVersionSuffix) {
|
||||||
if (user == null || user.getId() <= 0) return null;
|
if (user == null || user.getId() <= 0) return null;
|
||||||
final ContentValues values = new ContentValues();
|
final ContentValues values = new ContentValues();
|
||||||
values.put(Accounts.AUTH_TYPE, Accounts.AUTH_TYPE_TWIP_O_MODE);
|
values.put(Accounts.AUTH_TYPE, Accounts.AUTH_TYPE_TWIP_O_MODE);
|
||||||
values.put(Accounts.ACCOUNT_ID, user.getId());
|
values.put(Accounts.ACCOUNT_ID, user.getId());
|
||||||
values.put(Accounts.SCREEN_NAME, user.getScreenName());
|
values.put(Accounts.SCREEN_NAME, user.getScreenName());
|
||||||
values.put(Accounts.NAME, user.getName());
|
values.put(Accounts.NAME, user.getName());
|
||||||
values.put(Accounts.PROFILE_IMAGE_URL, ParseUtils.parseString(user.getProfileImageUrlHttps()));
|
values.put(Accounts.PROFILE_IMAGE_URL, ParseUtils.parseString(user.getProfileImageUrlHttps()));
|
||||||
values.put(Accounts.PROFILE_BANNER_URL, ParseUtils.parseString(user.getProfileBannerImageUrl()));
|
values.put(Accounts.PROFILE_BANNER_URL, ParseUtils.parseString(user.getProfileBannerImageUrl()));
|
||||||
values.put(Accounts.COLOR, color);
|
values.put(Accounts.COLOR, color);
|
||||||
values.put(Accounts.IS_ACTIVATED, 1);
|
values.put(Accounts.IS_ACTIVATED, 1);
|
||||||
values.put(Accounts.API_URL_FORMAT, apiUrlFormat);
|
values.put(Accounts.API_URL_FORMAT, apiUrlFormat);
|
||||||
return values;
|
values.put(Accounts.NO_VERSION_SUFFIX, noVersionSuffix);
|
||||||
}
|
return values;
|
||||||
|
}
|
||||||
|
|
||||||
public static ContentValues makeCachedUserContentValues(final User user) {
|
public static ContentValues makeCachedUserContentValues(final User user) {
|
||||||
if (user == null || user.getId() <= 0) return null;
|
if (user == null || user.getId() <= 0) return null;
|
||||||
final String profile_image_url = ParseUtils.parseString(user.getProfileImageUrlHttps());
|
final String profile_image_url = ParseUtils.parseString(user.getProfileImageUrlHttps());
|
||||||
final String url = ParseUtils.parseString(user.getURL());
|
final String url = ParseUtils.parseString(user.getURL());
|
||||||
final URLEntity[] urls = user.getURLEntities();
|
final URLEntity[] urls = user.getURLEntities();
|
||||||
final ContentValues values = new ContentValues();
|
final ContentValues values = new ContentValues();
|
||||||
values.put(CachedUsers.USER_ID, user.getId());
|
values.put(CachedUsers.USER_ID, user.getId());
|
||||||
values.put(CachedUsers.NAME, user.getName());
|
values.put(CachedUsers.NAME, user.getName());
|
||||||
values.put(CachedUsers.SCREEN_NAME, user.getScreenName());
|
values.put(CachedUsers.SCREEN_NAME, user.getScreenName());
|
||||||
values.put(CachedUsers.PROFILE_IMAGE_URL, profile_image_url);
|
values.put(CachedUsers.PROFILE_IMAGE_URL, profile_image_url);
|
||||||
values.put(CachedUsers.CREATED_AT, user.getCreatedAt().getTime());
|
values.put(CachedUsers.CREATED_AT, user.getCreatedAt().getTime());
|
||||||
values.put(CachedUsers.IS_PROTECTED, user.isProtected());
|
values.put(CachedUsers.IS_PROTECTED, user.isProtected());
|
||||||
values.put(CachedUsers.IS_VERIFIED, user.isVerified());
|
values.put(CachedUsers.IS_VERIFIED, user.isVerified());
|
||||||
values.put(CachedUsers.IS_FOLLOWING, user.isFollowing());
|
values.put(CachedUsers.IS_FOLLOWING, user.isFollowing());
|
||||||
values.put(CachedUsers.FAVORITES_COUNT, user.getFavouritesCount());
|
values.put(CachedUsers.FAVORITES_COUNT, user.getFavouritesCount());
|
||||||
values.put(CachedUsers.FOLLOWERS_COUNT, user.getFollowersCount());
|
values.put(CachedUsers.FOLLOWERS_COUNT, user.getFollowersCount());
|
||||||
values.put(CachedUsers.FRIENDS_COUNT, user.getFriendsCount());
|
values.put(CachedUsers.FRIENDS_COUNT, user.getFriendsCount());
|
||||||
values.put(CachedUsers.STATUSES_COUNT, user.getStatusesCount());
|
values.put(CachedUsers.STATUSES_COUNT, user.getStatusesCount());
|
||||||
values.put(CachedUsers.LOCATION, user.getLocation());
|
values.put(CachedUsers.LOCATION, user.getLocation());
|
||||||
values.put(CachedUsers.DESCRIPTION_PLAIN, user.getDescription());
|
values.put(CachedUsers.DESCRIPTION_PLAIN, user.getDescription());
|
||||||
values.put(CachedUsers.DESCRIPTION_HTML, Utils.formatUserDescription(user));
|
values.put(CachedUsers.DESCRIPTION_HTML, Utils.formatUserDescription(user));
|
||||||
values.put(CachedUsers.DESCRIPTION_EXPANDED, Utils.formatExpandedUserDescription(user));
|
values.put(CachedUsers.DESCRIPTION_EXPANDED, Utils.formatExpandedUserDescription(user));
|
||||||
values.put(CachedUsers.URL, url);
|
values.put(CachedUsers.URL, url);
|
||||||
values.put(CachedUsers.URL_EXPANDED,
|
values.put(CachedUsers.URL_EXPANDED,
|
||||||
url != null && urls != null && urls.length > 0 ? ParseUtils.parseString(urls[0].getExpandedURL())
|
url != null && urls != null && urls.length > 0 ? ParseUtils.parseString(urls[0].getExpandedURL())
|
||||||
: null);
|
: null);
|
||||||
values.put(CachedUsers.PROFILE_BANNER_URL, user.getProfileBannerImageUrl());
|
values.put(CachedUsers.PROFILE_BANNER_URL, user.getProfileBannerImageUrl());
|
||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ContentValues makeDirectMessageContentValues(final DirectMessage message, final long account_id,
|
public static ContentValues makeDirectMessageContentValues(final DirectMessage message, final long account_id,
|
||||||
final boolean is_outgoing) {
|
final boolean is_outgoing) {
|
||||||
if (message == null || message.getId() <= 0) return null;
|
if (message == null || message.getId() <= 0) return null;
|
||||||
final ContentValues values = new ContentValues();
|
final ContentValues values = new ContentValues();
|
||||||
final User sender = message.getSender(), recipient = message.getRecipient();
|
final User sender = message.getSender(), recipient = message.getRecipient();
|
||||||
if (sender == null || recipient == null) return null;
|
if (sender == null || recipient == null) return null;
|
||||||
final String sender_profile_image_url = ParseUtils.parseString(sender.getProfileImageUrlHttps());
|
final String sender_profile_image_url = ParseUtils.parseString(sender.getProfileImageUrlHttps());
|
||||||
final String recipient_profile_image_url = ParseUtils.parseString(recipient.getProfileImageUrlHttps());
|
final String recipient_profile_image_url = ParseUtils.parseString(recipient.getProfileImageUrlHttps());
|
||||||
values.put(DirectMessages.ACCOUNT_ID, account_id);
|
values.put(DirectMessages.ACCOUNT_ID, account_id);
|
||||||
values.put(DirectMessages.MESSAGE_ID, message.getId());
|
values.put(DirectMessages.MESSAGE_ID, message.getId());
|
||||||
values.put(DirectMessages.MESSAGE_TIMESTAMP, message.getCreatedAt().getTime());
|
values.put(DirectMessages.MESSAGE_TIMESTAMP, message.getCreatedAt().getTime());
|
||||||
values.put(DirectMessages.SENDER_ID, sender.getId());
|
values.put(DirectMessages.SENDER_ID, sender.getId());
|
||||||
values.put(DirectMessages.RECIPIENT_ID, recipient.getId());
|
values.put(DirectMessages.RECIPIENT_ID, recipient.getId());
|
||||||
final String text_html = Utils.formatDirectMessageText(message);
|
final String text_html = Utils.formatDirectMessageText(message);
|
||||||
values.put(DirectMessages.TEXT_HTML, text_html);
|
values.put(DirectMessages.TEXT_HTML, text_html);
|
||||||
values.put(DirectMessages.TEXT_PLAIN, message.getText());
|
values.put(DirectMessages.TEXT_PLAIN, message.getText());
|
||||||
values.put(DirectMessages.TEXT_UNESCAPED, toPlainText(text_html));
|
values.put(DirectMessages.TEXT_UNESCAPED, toPlainText(text_html));
|
||||||
values.put(DirectMessages.IS_OUTGOING, is_outgoing);
|
values.put(DirectMessages.IS_OUTGOING, is_outgoing);
|
||||||
values.put(DirectMessages.SENDER_NAME, sender.getName());
|
values.put(DirectMessages.SENDER_NAME, sender.getName());
|
||||||
values.put(DirectMessages.SENDER_SCREEN_NAME, sender.getScreenName());
|
values.put(DirectMessages.SENDER_SCREEN_NAME, sender.getScreenName());
|
||||||
values.put(DirectMessages.RECIPIENT_NAME, recipient.getName());
|
values.put(DirectMessages.RECIPIENT_NAME, recipient.getName());
|
||||||
values.put(DirectMessages.RECIPIENT_SCREEN_NAME, recipient.getScreenName());
|
values.put(DirectMessages.RECIPIENT_SCREEN_NAME, recipient.getScreenName());
|
||||||
values.put(DirectMessages.SENDER_PROFILE_IMAGE_URL, sender_profile_image_url);
|
values.put(DirectMessages.SENDER_PROFILE_IMAGE_URL, sender_profile_image_url);
|
||||||
values.put(DirectMessages.RECIPIENT_PROFILE_IMAGE_URL, recipient_profile_image_url);
|
values.put(DirectMessages.RECIPIENT_PROFILE_IMAGE_URL, recipient_profile_image_url);
|
||||||
final ParcelableMedia[] medias = ParcelableMedia.fromEntities(message);
|
final ParcelableMedia[] medias = ParcelableMedia.fromEntities(message);
|
||||||
if (medias != null) {
|
if (medias != null) {
|
||||||
values.put(DirectMessages.MEDIAS, JSONSerializer.toJSONArrayString(medias));
|
values.put(DirectMessages.MEDIAS, JSONSerializer.toJSONArrayString(medias));
|
||||||
values.put(DirectMessages.FIRST_MEDIA, medias[0].url);
|
values.put(DirectMessages.FIRST_MEDIA, medias[0].url);
|
||||||
}
|
}
|
||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ContentValues makeDirectMessageContentValues(final ParcelableDirectMessage message) {
|
public static ContentValues makeDirectMessageContentValues(final ParcelableDirectMessage message) {
|
||||||
if (message == null || message.id <= 0) return null;
|
if (message == null || message.id <= 0) return null;
|
||||||
final ContentValues values = new ContentValues();
|
final ContentValues values = new ContentValues();
|
||||||
values.put(DirectMessages.ACCOUNT_ID, message.account_id);
|
values.put(DirectMessages.ACCOUNT_ID, message.account_id);
|
||||||
values.put(DirectMessages.MESSAGE_ID, message.id);
|
values.put(DirectMessages.MESSAGE_ID, message.id);
|
||||||
values.put(DirectMessages.MESSAGE_TIMESTAMP, message.timestamp);
|
values.put(DirectMessages.MESSAGE_TIMESTAMP, message.timestamp);
|
||||||
values.put(DirectMessages.SENDER_ID, message.sender_id);
|
values.put(DirectMessages.SENDER_ID, message.sender_id);
|
||||||
values.put(DirectMessages.RECIPIENT_ID, message.recipient_id);
|
values.put(DirectMessages.RECIPIENT_ID, message.recipient_id);
|
||||||
values.put(DirectMessages.TEXT_HTML, message.text_html);
|
values.put(DirectMessages.TEXT_HTML, message.text_html);
|
||||||
values.put(DirectMessages.TEXT_PLAIN, message.text_plain);
|
values.put(DirectMessages.TEXT_PLAIN, message.text_plain);
|
||||||
values.put(DirectMessages.IS_OUTGOING, message.is_outgoing);
|
values.put(DirectMessages.IS_OUTGOING, message.is_outgoing);
|
||||||
values.put(DirectMessages.SENDER_NAME, message.sender_name);
|
values.put(DirectMessages.SENDER_NAME, message.sender_name);
|
||||||
values.put(DirectMessages.SENDER_SCREEN_NAME, message.sender_screen_name);
|
values.put(DirectMessages.SENDER_SCREEN_NAME, message.sender_screen_name);
|
||||||
values.put(DirectMessages.RECIPIENT_NAME, message.recipient_name);
|
values.put(DirectMessages.RECIPIENT_NAME, message.recipient_name);
|
||||||
values.put(DirectMessages.RECIPIENT_SCREEN_NAME, message.recipient_screen_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.SENDER_PROFILE_IMAGE_URL, message.sender_profile_image_url);
|
||||||
values.put(DirectMessages.RECIPIENT_PROFILE_IMAGE_URL, message.recipient_profile_image_url);
|
values.put(DirectMessages.RECIPIENT_PROFILE_IMAGE_URL, message.recipient_profile_image_url);
|
||||||
if (message.medias != null) {
|
if (message.medias != null) {
|
||||||
values.put(Statuses.MEDIAS, JSONSerializer.toJSONArrayString(message.medias));
|
values.put(Statuses.MEDIAS, JSONSerializer.toJSONArrayString(message.medias));
|
||||||
values.put(Statuses.FIRST_MEDIA, message.medias[0].url);
|
values.put(Statuses.FIRST_MEDIA, message.medias[0].url);
|
||||||
}
|
}
|
||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ContentValues makeDirectMessageDraftContentValues(final long accountId, final long recipientId,
|
public static ContentValues makeDirectMessageDraftContentValues(final long accountId, final long recipientId,
|
||||||
final String text, final String imageUri) {
|
final String text, final String imageUri) {
|
||||||
final ContentValues values = new ContentValues();
|
final ContentValues values = new ContentValues();
|
||||||
values.put(Drafts.ACTION_TYPE, Drafts.ACTION_SEND_DIRECT_MESSAGE);
|
values.put(Drafts.ACTION_TYPE, Drafts.ACTION_SEND_DIRECT_MESSAGE);
|
||||||
values.put(Drafts.TEXT, text);
|
values.put(Drafts.TEXT, text);
|
||||||
values.put(Drafts.ACCOUNT_IDS, ArrayUtils.toString(new long[] { accountId }, ',', false));
|
values.put(Drafts.ACCOUNT_IDS, ArrayUtils.toString(new long[]{accountId}, ',', false));
|
||||||
values.put(Drafts.TIMESTAMP, System.currentTimeMillis());
|
values.put(Drafts.TIMESTAMP, System.currentTimeMillis());
|
||||||
if (imageUri != null) {
|
if (imageUri != null) {
|
||||||
final ParcelableMediaUpdate[] medias = { new ParcelableMediaUpdate(imageUri, 0) };
|
final ParcelableMediaUpdate[] medias = {new ParcelableMediaUpdate(imageUri, 0)};
|
||||||
values.put(Drafts.MEDIAS, JSONSerializer.toJSONArrayString(medias));
|
values.put(Drafts.MEDIAS, JSONSerializer.toJSONArrayString(medias));
|
||||||
}
|
}
|
||||||
final JSONObject extras = new JSONObject();
|
final JSONObject extras = new JSONObject();
|
||||||
try {
|
try {
|
||||||
extras.put(EXTRA_RECIPIENT_ID, recipientId);
|
extras.put(EXTRA_RECIPIENT_ID, recipientId);
|
||||||
} catch (final JSONException e) {
|
} catch (final JSONException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
values.put(Drafts.ACTION_EXTRAS, extras.toString());
|
values.put(Drafts.ACTION_EXTRAS, extras.toString());
|
||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ContentValues makeFilterdUserContentValues(final ParcelableStatus status) {
|
public static ContentValues makeFilteredUserContentValues(final ParcelableStatus status) {
|
||||||
if (status == null) return null;
|
if (status == null) return null;
|
||||||
final ContentValues values = new ContentValues();
|
final ContentValues values = new ContentValues();
|
||||||
values.put(Filters.Users.USER_ID, status.user_id);
|
values.put(Filters.Users.USER_ID, status.user_id);
|
||||||
values.put(Filters.Users.NAME, status.user_name);
|
values.put(Filters.Users.NAME, status.user_name);
|
||||||
values.put(Filters.Users.SCREEN_NAME, status.user_screen_name);
|
values.put(Filters.Users.SCREEN_NAME, status.user_screen_name);
|
||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ContentValues makeFilterdUserContentValues(final ParcelableUser user) {
|
public static ContentValues makeFilteredUserContentValues(final ParcelableUser user) {
|
||||||
if (user == null) return null;
|
if (user == null) return null;
|
||||||
final ContentValues values = new ContentValues();
|
final ContentValues values = new ContentValues();
|
||||||
values.put(Filters.Users.USER_ID, user.id);
|
values.put(Filters.Users.USER_ID, user.id);
|
||||||
values.put(Filters.Users.NAME, user.name);
|
values.put(Filters.Users.NAME, user.name);
|
||||||
values.put(Filters.Users.SCREEN_NAME, user.screen_name);
|
values.put(Filters.Users.SCREEN_NAME, user.screen_name);
|
||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ContentValues makeFilterdUserContentValues(final ParcelableUserMention user) {
|
public static ContentValues makeFilteredUserContentValues(final ParcelableUserMention user) {
|
||||||
if (user == null) return null;
|
if (user == null) return null;
|
||||||
final ContentValues values = new ContentValues();
|
final ContentValues values = new ContentValues();
|
||||||
values.put(Filters.Users.USER_ID, user.id);
|
values.put(Filters.Users.USER_ID, user.id);
|
||||||
values.put(Filters.Users.NAME, user.name);
|
values.put(Filters.Users.NAME, user.name);
|
||||||
values.put(Filters.Users.SCREEN_NAME, user.screen_name);
|
values.put(Filters.Users.SCREEN_NAME, user.screen_name);
|
||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ContentValues makeStatusContentValues(final Status orig, final long account_id) {
|
public static ContentValues makeStatusContentValues(final Status orig, final long account_id) {
|
||||||
if (orig == null || orig.getId() <= 0) return null;
|
if (orig == null || orig.getId() <= 0) return null;
|
||||||
final ContentValues values = new ContentValues();
|
final ContentValues values = new ContentValues();
|
||||||
values.put(Statuses.ACCOUNT_ID, account_id);
|
values.put(Statuses.ACCOUNT_ID, account_id);
|
||||||
values.put(Statuses.STATUS_ID, orig.getId());
|
values.put(Statuses.STATUS_ID, orig.getId());
|
||||||
values.put(Statuses.STATUS_TIMESTAMP, orig.getCreatedAt().getTime());
|
values.put(Statuses.STATUS_TIMESTAMP, orig.getCreatedAt().getTime());
|
||||||
values.put(Statuses.MY_RETWEET_ID, orig.getCurrentUserRetweet());
|
values.put(Statuses.MY_RETWEET_ID, orig.getCurrentUserRetweet());
|
||||||
final boolean is_retweet = orig.isRetweet();
|
final boolean isRetweet = orig.isRetweet();
|
||||||
final Status status;
|
final Status status;
|
||||||
final Status retweeted_status = is_retweet ? orig.getRetweetedStatus() : null;
|
final Status retweetedStatus = isRetweet ? orig.getRetweetedStatus() : null;
|
||||||
if (retweeted_status != null) {
|
if (retweetedStatus != null) {
|
||||||
final User retweet_user = orig.getUser();
|
final User retweetUser = orig.getUser();
|
||||||
values.put(Statuses.RETWEET_ID, retweeted_status.getId());
|
values.put(Statuses.RETWEET_ID, retweetedStatus.getId());
|
||||||
values.put(Statuses.RETWEET_TIMESTAMP, retweeted_status.getCreatedAt().getTime());
|
values.put(Statuses.RETWEET_TIMESTAMP, retweetedStatus.getCreatedAt().getTime());
|
||||||
values.put(Statuses.RETWEETED_BY_USER_ID, retweet_user.getId());
|
values.put(Statuses.RETWEETED_BY_USER_ID, retweetUser.getId());
|
||||||
values.put(Statuses.RETWEETED_BY_USER_NAME, retweet_user.getName());
|
values.put(Statuses.RETWEETED_BY_USER_NAME, retweetUser.getName());
|
||||||
values.put(Statuses.RETWEETED_BY_USER_SCREEN_NAME, retweet_user.getScreenName());
|
values.put(Statuses.RETWEETED_BY_USER_SCREEN_NAME, retweetUser.getScreenName());
|
||||||
status = retweeted_status;
|
status = retweetedStatus;
|
||||||
} else {
|
} else {
|
||||||
status = orig;
|
status = orig;
|
||||||
}
|
}
|
||||||
final User user = status.getUser();
|
final User user = status.getUser();
|
||||||
if (user != null) {
|
if (user != null) {
|
||||||
final long userId = user.getId();
|
final long userId = user.getId();
|
||||||
final String profileImageUrl = ParseUtils.parseString(user.getProfileImageUrlHttps());
|
final String profileImageUrl = ParseUtils.parseString(user.getProfileImageUrlHttps());
|
||||||
final String name = user.getName(), screenName = user.getScreenName();
|
final String name = user.getName(), screenName = user.getScreenName();
|
||||||
values.put(Statuses.USER_ID, userId);
|
values.put(Statuses.USER_ID, userId);
|
||||||
values.put(Statuses.USER_NAME, name);
|
values.put(Statuses.USER_NAME, name);
|
||||||
values.put(Statuses.USER_SCREEN_NAME, screenName);
|
values.put(Statuses.USER_SCREEN_NAME, screenName);
|
||||||
values.put(Statuses.IS_PROTECTED, user.isProtected());
|
values.put(Statuses.IS_PROTECTED, user.isProtected());
|
||||||
values.put(Statuses.IS_VERIFIED, user.isVerified());
|
values.put(Statuses.IS_VERIFIED, user.isVerified());
|
||||||
values.put(Statuses.USER_PROFILE_IMAGE_URL, profileImageUrl);
|
values.put(Statuses.USER_PROFILE_IMAGE_URL, profileImageUrl);
|
||||||
values.put(CachedUsers.IS_FOLLOWING, user.isFollowing());
|
values.put(CachedUsers.IS_FOLLOWING, user.isFollowing());
|
||||||
}
|
}
|
||||||
final String text_html = Utils.formatStatusText(status);
|
final String text_html = Utils.formatStatusText(status);
|
||||||
values.put(Statuses.TEXT_HTML, text_html);
|
values.put(Statuses.TEXT_HTML, text_html);
|
||||||
values.put(Statuses.TEXT_PLAIN, status.getText());
|
values.put(Statuses.TEXT_PLAIN, status.getText());
|
||||||
values.put(Statuses.TEXT_UNESCAPED, toPlainText(text_html));
|
values.put(Statuses.TEXT_UNESCAPED, toPlainText(text_html));
|
||||||
values.put(Statuses.RETWEET_COUNT, status.getRetweetCount());
|
values.put(Statuses.RETWEET_COUNT, status.getRetweetCount());
|
||||||
values.put(Statuses.IN_REPLY_TO_STATUS_ID, status.getInReplyToStatusId());
|
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_ID, status.getInReplyToUserId());
|
||||||
values.put(Statuses.IN_REPLY_TO_USER_NAME, Utils.getInReplyToName(status));
|
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.IN_REPLY_TO_USER_SCREEN_NAME, status.getInReplyToScreenName());
|
||||||
values.put(Statuses.SOURCE, status.getSource());
|
values.put(Statuses.SOURCE, status.getSource());
|
||||||
values.put(Statuses.IS_POSSIBLY_SENSITIVE, status.isPossiblySensitive());
|
values.put(Statuses.IS_POSSIBLY_SENSITIVE, status.isPossiblySensitive());
|
||||||
final GeoLocation location = status.getGeoLocation();
|
final GeoLocation location = status.getGeoLocation();
|
||||||
if (location != null) {
|
if (location != null) {
|
||||||
values.put(Statuses.LOCATION, location.getLatitude() + "," + location.getLongitude());
|
values.put(Statuses.LOCATION, location.getLatitude() + "," + location.getLongitude());
|
||||||
}
|
}
|
||||||
values.put(Statuses.IS_RETWEET, is_retweet);
|
values.put(Statuses.IS_RETWEET, isRetweet);
|
||||||
values.put(Statuses.IS_FAVORITE, status.isFavorited());
|
values.put(Statuses.IS_FAVORITE, status.isFavorited());
|
||||||
final ParcelableMedia[] medias = ParcelableMedia.fromEntities(status);
|
final ParcelableMedia[] medias = ParcelableMedia.fromEntities(status);
|
||||||
if (medias != null) {
|
if (medias != null) {
|
||||||
values.put(Statuses.MEDIAS, JSONSerializer.toJSONArrayString(medias));
|
values.put(Statuses.MEDIAS, JSONSerializer.toJSONArrayString(medias));
|
||||||
values.put(Statuses.FIRST_MEDIA, medias[0].url);
|
values.put(Statuses.FIRST_MEDIA, medias[0].url);
|
||||||
}
|
}
|
||||||
final ParcelableUserMention[] mentions = ParcelableUserMention.fromStatus(status);
|
final ParcelableUserMention[] mentions = ParcelableUserMention.fromStatus(status);
|
||||||
if (mentions != null) {
|
if (mentions != null) {
|
||||||
values.put(Statuses.MENTIONS, JSONSerializer.toJSONArrayString(mentions));
|
values.put(Statuses.MENTIONS, JSONSerializer.toJSONArrayString(mentions));
|
||||||
}
|
}
|
||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ContentValues makeStatusDraftContentValues(final ParcelableStatusUpdate status) {
|
public static ContentValues makeStatusDraftContentValues(final ParcelableStatusUpdate status) {
|
||||||
return makeStatusDraftContentValues(status, Account.getAccountIds(status.accounts));
|
return makeStatusDraftContentValues(status, Account.getAccountIds(status.accounts));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ContentValues makeStatusDraftContentValues(final ParcelableStatusUpdate status,
|
public static ContentValues makeStatusDraftContentValues(final ParcelableStatusUpdate status,
|
||||||
final long[] accountIds) {
|
final long[] accountIds) {
|
||||||
final ContentValues values = new ContentValues();
|
final ContentValues values = new ContentValues();
|
||||||
values.put(Drafts.ACTION_TYPE, Drafts.ACTION_UPDATE_STATUS);
|
values.put(Drafts.ACTION_TYPE, Drafts.ACTION_UPDATE_STATUS);
|
||||||
values.put(Drafts.TEXT, status.text);
|
values.put(Drafts.TEXT, status.text);
|
||||||
values.put(Drafts.ACCOUNT_IDS, ArrayUtils.toString(accountIds, ',', false));
|
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.IN_REPLY_TO_STATUS_ID, status.in_reply_to_status_id);
|
||||||
values.put(Drafts.LOCATION, ParcelableLocation.toString(status.location));
|
values.put(Drafts.LOCATION, ParcelableLocation.toString(status.location));
|
||||||
values.put(Drafts.IS_POSSIBLY_SENSITIVE, status.is_possibly_sensitive);
|
values.put(Drafts.IS_POSSIBLY_SENSITIVE, status.is_possibly_sensitive);
|
||||||
values.put(Drafts.TIMESTAMP, System.currentTimeMillis());
|
values.put(Drafts.TIMESTAMP, System.currentTimeMillis());
|
||||||
if (status.medias != null) {
|
if (status.medias != null) {
|
||||||
values.put(Drafts.MEDIAS, JSONSerializer.toJSONArrayString(status.medias));
|
values.put(Drafts.MEDIAS, JSONSerializer.toJSONArrayString(status.medias));
|
||||||
}
|
}
|
||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ContentValues[] makeTrendsContentValues(final List<Trends> trends_list) {
|
public static ContentValues[] makeTrendsContentValues(final List<Trends> trendsList) {
|
||||||
if (trends_list == null) return new ContentValues[0];
|
if (trendsList == null) return new ContentValues[0];
|
||||||
final List<ContentValues> result_list = new ArrayList<ContentValues>();
|
final List<ContentValues> resultList = new ArrayList<>();
|
||||||
for (final Trends trends : trends_list) {
|
for (final Trends trends : trendsList) {
|
||||||
if (trends == null) {
|
if (trends == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
final long timestamp = trends.getTrendAt().getTime();
|
final long timestamp = trends.getTrendAt().getTime();
|
||||||
for (final Trend trend : trends.getTrends()) {
|
for (final Trend trend : trends.getTrends()) {
|
||||||
final ContentValues values = new ContentValues();
|
final ContentValues values = new ContentValues();
|
||||||
values.put(CachedTrends.NAME, trend.getName());
|
values.put(CachedTrends.NAME, trend.getName());
|
||||||
values.put(CachedTrends.TIMESTAMP, timestamp);
|
values.put(CachedTrends.TIMESTAMP, timestamp);
|
||||||
result_list.add(values);
|
resultList.add(values);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result_list.toArray(new ContentValues[result_list.size()]);
|
return resultList.toArray(new ContentValues[resultList.size()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,7 +52,6 @@ import java.util.TreeSet;
|
||||||
import de.keyboardsurfer.android.widget.crouton.Crouton;
|
import de.keyboardsurfer.android.widget.crouton.Crouton;
|
||||||
import de.keyboardsurfer.android.widget.crouton.CroutonStyle;
|
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.Utils.getAccountScreenNames;
|
||||||
import static org.mariotaku.twidere.util.content.ContentResolverUtils.bulkDelete;
|
import static org.mariotaku.twidere.util.content.ContentResolverUtils.bulkDelete;
|
||||||
import static org.mariotaku.twidere.util.content.ContentResolverUtils.bulkInsert;
|
import static org.mariotaku.twidere.util.content.ContentResolverUtils.bulkInsert;
|
||||||
|
@ -145,11 +144,11 @@ public class MultiSelectEventHandler implements Constants, ActionMode.Callback,
|
||||||
if (object instanceof ParcelableStatus) {
|
if (object instanceof ParcelableStatus) {
|
||||||
final ParcelableStatus status = (ParcelableStatus) object;
|
final ParcelableStatus status = (ParcelableStatus) object;
|
||||||
userIds.add(status.user_id);
|
userIds.add(status.user_id);
|
||||||
valuesList.add(makeFilterdUserContentValues(status));
|
valuesList.add(ContentValuesCreator.makeFilteredUserContentValues(status));
|
||||||
} else if (object instanceof ParcelableUser) {
|
} else if (object instanceof ParcelableUser) {
|
||||||
final ParcelableUser user = (ParcelableUser) object;
|
final ParcelableUser user = (ParcelableUser) object;
|
||||||
userIds.add(user.id);
|
userIds.add(user.id);
|
||||||
valuesList.add(makeFilterdUserContentValues(user));
|
valuesList.add(ContentValuesCreator.makeFilteredUserContentValues(user));
|
||||||
} else {
|
} else {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
package org.mariotaku.twidere.util;
|
|
||||||
|
|
||||||
public class SpannableStringBuilder {
|
|
||||||
|
|
||||||
}
|
|
|
@ -35,10 +35,14 @@ import android.support.annotation.NonNull;
|
||||||
import android.text.TextPaint;
|
import android.text.TextPaint;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
|
import android.view.ContextMenu.ContextMenuInfo;
|
||||||
import android.view.ContextThemeWrapper;
|
import android.view.ContextThemeWrapper;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
|
import org.mariotaku.menucomponent.widget.MenuBar.MenuBarMenuInfo;
|
||||||
import org.mariotaku.refreshnow.widget.RefreshNowConfig;
|
import org.mariotaku.refreshnow.widget.RefreshNowConfig;
|
||||||
import org.mariotaku.refreshnow.widget.RefreshNowProgressIndicator.IndicatorConfig;
|
import org.mariotaku.refreshnow.widget.RefreshNowProgressIndicator.IndicatorConfig;
|
||||||
import org.mariotaku.twidere.Constants;
|
import org.mariotaku.twidere.Constants;
|
||||||
|
@ -114,6 +118,25 @@ public class ThemeUtils implements Constants {
|
||||||
d.setAlpha(getUserThemeBackgroundAlpha(context));
|
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) {
|
public static IndicatorConfig buildRefreshIndicatorConfig(final Context context) {
|
||||||
final IndicatorConfig.Builder builder = new IndicatorConfig.Builder(context);
|
final IndicatorConfig.Builder builder = new IndicatorConfig.Builder(context);
|
||||||
final Resources res = context.getResources();
|
final Resources res = context.getResources();
|
||||||
|
|
|
@ -1493,7 +1493,8 @@ public final class Utils implements Constants, TwitterConstants {
|
||||||
|
|
||||||
public static String getApiUrl(final String pattern, final String domain, final String appendPath) {
|
public static String getApiUrl(final String pattern, final String domain, final String appendPath) {
|
||||||
final String urlBase = getApiBaseUrl(pattern, domain);
|
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);
|
final StringBuilder sb = new StringBuilder(urlBase);
|
||||||
if (urlBase.endsWith("/")) {
|
if (urlBase.endsWith("/")) {
|
||||||
sb.append(appendPath.startsWith("/") ? appendPath.substring(1) : appendPath);
|
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 String prefConsumerSecret = prefs.getString(KEY_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET);
|
||||||
final ConfigurationBuilder cb = new ConfigurationBuilder();
|
final ConfigurationBuilder cb = new ConfigurationBuilder();
|
||||||
if (!isEmpty(account.api_url_format)) {
|
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.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) {
|
if (!account.same_oauth_signing_url) {
|
||||||
cb.setSigningRestBaseURL(DEFAULT_SIGNING_REST_BASE_URL);
|
cb.setSigningRestBaseURL(DEFAULT_SIGNING_REST_BASE_URL);
|
||||||
cb.setSigningOAuthBaseURL(DEFAULT_SIGNING_OAUTH_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 String where = Where.equals(new Column(Accounts.ACCOUNT_ID), accountId).getSQL();
|
||||||
final Cursor c = ContentResolverUtils.query(context.getContentResolver(), Accounts.CONTENT_URI,
|
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;
|
if (c == null) return null;
|
||||||
try {
|
try {
|
||||||
if (!c.moveToFirst()) return null;
|
if (!c.moveToFirst()) return null;
|
||||||
|
@ -2416,7 +2418,7 @@ public final class Utils implements Constants, TwitterConstants {
|
||||||
// versions
|
// versions
|
||||||
final String where = Where.equals(new Column(Accounts.ACCOUNT_ID), accountId).getSQL();
|
final String where = Where.equals(new Column(Accounts.ACCOUNT_ID), accountId).getSQL();
|
||||||
final Cursor c = ContentResolverUtils.query(context.getContentResolver(), Accounts.CONTENT_URI,
|
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;
|
if (c == null) return null;
|
||||||
try {
|
try {
|
||||||
if (!c.moveToFirst()) return null;
|
if (!c.moveToFirst()) return null;
|
||||||
|
@ -2793,22 +2795,22 @@ public final class Utils implements Constants, TwitterConstants {
|
||||||
// SCREENLAYOUT_LAYOUTDIR_RTL;
|
// SCREENLAYOUT_LAYOUTDIR_RTL;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isSameAccount(final Context context, final long account_id, final long user_id) {
|
public static boolean isSameAccount(final Context context, final long accountId, final long userId) {
|
||||||
if (context == null || account_id <= 0 || user_id <= 0) return false;
|
if (context == null || accountId <= 0 || userId <= 0) return false;
|
||||||
return account_id == user_id;
|
return accountId == userId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isSameAccount(final Context context, final long account_id, final String screen_name) {
|
public static boolean isSameAccount(final Context context, final long accountId, final String screenName) {
|
||||||
if (context == null || account_id <= 0 || screen_name == null) return false;
|
if (context == null || accountId <= 0 || screenName == null) return false;
|
||||||
return screen_name.equalsIgnoreCase(getAccountScreenName(context, account_id));
|
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;
|
if (context == null) return false;
|
||||||
final long[] ids = getAccountIds(context);
|
final long[] ids = getAccountIds(context);
|
||||||
if (ids == null) return false;
|
if (ids == null) return false;
|
||||||
for (final long id : ids) {
|
for (final long id : ids) {
|
||||||
if (id == account_id) return true;
|
if (id == accountId) return true;
|
||||||
}
|
}
|
||||||
return false;
|
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,
|
addIntentToMenuForExtension(context, menu, MENU_GROUP_STATUS_EXTENSION, INTENT_ACTION_EXTENSION_OPEN_STATUS,
|
||||||
EXTRA_STATUS, EXTRA_STATUS_JSON, status);
|
EXTRA_STATUS, EXTRA_STATUS_JSON, status);
|
||||||
final MenuItem shareItem = menu.findItem(R.id.share_submenu);
|
final MenuItem shareItem = menu.findItem(R.id.share_submenu);
|
||||||
final Menu shareSubmenu = shareItem != null && shareItem.hasSubMenu() ? shareItem.getSubMenu() : null;
|
final Menu shareSubMenu = shareItem != null && shareItem.hasSubMenu() ? shareItem.getSubMenu() : null;
|
||||||
if (shareSubmenu != null) {
|
if (shareSubMenu != null) {
|
||||||
final Intent shareIntent = createStatusShareIntent(context, status);
|
final Intent shareIntent = createStatusShareIntent(context, status);
|
||||||
shareSubmenu.removeGroup(MENU_GROUP_STATUS_SHARE);
|
shareSubMenu.removeGroup(MENU_GROUP_STATUS_SHARE);
|
||||||
addIntentToMenu(context, shareSubmenu, shareIntent, 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) {
|
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;
|
final ActivityInfo activityInfo = info.activityInfo;
|
||||||
if (activityInfo.metaData != null && activityInfo.metaData.containsKey(METADATA_KEY_EXTENSION_USE_JSON))
|
if (activityInfo.metaData != null && activityInfo.metaData.containsKey(METADATA_KEY_EXTENSION_USE_JSON))
|
||||||
return activityInfo.metaData.getBoolean(METADATA_KEY_EXTENSION_USE_JSON);
|
return activityInfo.metaData.getBoolean(METADATA_KEY_EXTENSION_USE_JSON);
|
||||||
final ApplicationInfo appInfo = activityInfo.applicationInfo;
|
final ApplicationInfo appInfo = activityInfo.applicationInfo;
|
||||||
if (appInfo == null) return true;
|
if (appInfo == null) return false;
|
||||||
if (appInfo.metaData != null && appInfo.metaData.containsKey(METADATA_KEY_EXTENSION_USE_JSON))
|
return appInfo.metaData != null && appInfo.metaData.getBoolean(METADATA_KEY_EXTENSION_USE_JSON, false);
|
||||||
return appInfo.metaData.getBoolean(METADATA_KEY_EXTENSION_USE_JSON);
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void parseEntities(final HtmlBuilder builder, final EntitySupport entities) {
|
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
|
* Get most contrasting color
|
||||||
*
|
*
|
||||||
* @param color
|
* @param color Input color, alpha channel will be disposed.
|
||||||
* @return {@link Color#WHITE} or {@link Color#BLACK}
|
* @return {@link Color#WHITE} or {@link Color#BLACK}
|
||||||
* @see <a href='http://24ways.org/2010/calculating-color-contrast/'>Calculating Color Contrast</a>
|
* @see <a href='http://24ways.org/2010/calculating-color-contrast/'>Calculating Color Contrast</a>
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,26 +1,46 @@
|
||||||
package org.mariotaku.twidere.view;
|
package org.mariotaku.twidere.view;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.graphics.PorterDuff.Mode;
|
||||||
import android.util.AttributeSet;
|
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.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.
|
* 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) {
|
public TwidereMenuBar(Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
public TwidereMenuBar(Context context, AttributeSet attrs) {
|
public TwidereMenuBar(Context context, AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
|
setMenuBarListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOnMenuItemClickListener(OnMenuItemClickListener listener) {
|
||||||
|
mListener = listener;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MenuInflater getMenuInflater() {
|
public void onPreShowMenu(Menu menu) {
|
||||||
return new TwidereMenuInflater(getContext());
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<org.mariotaku.twidere.view.HomeActionButton
|
<org.mariotaku.twidere.view.HomeActionButton
|
||||||
android:id="@+id/actions_button_bottom"
|
android:id="@+id/actions_button"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_width="@dimen/float_action_button_size"
|
android:layout_width="@dimen/float_action_button_size"
|
||||||
android:layout_height="@dimen/float_action_button_size"
|
android:layout_height="@dimen/float_action_button_size"
|
||||||
|
|
|
@ -3,11 +3,11 @@
|
||||||
|
|
||||||
<ProgressBar
|
<ProgressBar
|
||||||
android:id="@android:id/progress"
|
android:id="@android:id/progress"
|
||||||
style="?android:attr/progressBarStyleLarge"
|
style="?android:attr/progressBarStyle"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center"
|
android:layout_gravity="center"
|
||||||
android:layout_margin="@dimen/element_spacing_small"
|
android:layout_margin="@dimen/element_spacing_normal"
|
||||||
android:visibility="gone"/>
|
android:visibility="gone"/>
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
|
|
|
@ -1,47 +1,57 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<LinearLayout
|
||||||
android:id="@+id/advanced_api_config"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_width="match_parent"
|
android:id="@+id/advanced_api_config"
|
||||||
android:layout_height="wrap_content"
|
android:layout_width="match_parent"
|
||||||
android:layout_below="@+id/advanced_api_config_label"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical"
|
android:layout_below="@+id/advanced_api_config_label"
|
||||||
android:paddingLeft="@dimen/element_spacing_normal">
|
android:orientation="vertical"
|
||||||
|
android:paddingLeft="@dimen/element_spacing_normal">
|
||||||
|
|
||||||
<CheckBox
|
<CheckBox
|
||||||
android:id="@+id/same_oauth_signing_url"
|
android:id="@+id/same_oauth_signing_url"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingBottom="@dimen/element_spacing_normal"
|
android:paddingBottom="@dimen/element_spacing_normal"
|
||||||
android:paddingTop="@dimen/element_spacing_normal"
|
android:paddingTop="@dimen/element_spacing_normal"
|
||||||
android:text="@string/same_oauth_signing_url"
|
android:text="@string/same_oauth_signing_url"
|
||||||
android:textAppearance="?android:attr/textAppearanceSmall"/>
|
android:textAppearance="?android:attr/textAppearanceSmall"/>
|
||||||
|
|
||||||
<TextView
|
<CheckBox
|
||||||
android:layout_width="match_parent"
|
android:id="@+id/no_version_suffix"
|
||||||
android:layout_height="wrap_content"
|
android:layout_width="match_parent"
|
||||||
android:text="@string/consumer_key"
|
android:layout_height="wrap_content"
|
||||||
android:textAppearance="?android:attr/textAppearanceSmall"/>
|
android:paddingBottom="@dimen/element_spacing_normal"
|
||||||
|
android:paddingTop="@dimen/element_spacing_normal"
|
||||||
|
android:text="@string/no_version_suffix"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceSmall"/>
|
||||||
|
|
||||||
<EditText
|
<TextView
|
||||||
android:id="@+id/consumer_key"
|
android:layout_width="match_parent"
|
||||||
android:layout_width="match_parent"
|
android:layout_height="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:text="@string/consumer_key"
|
||||||
android:ems="10"
|
android:textAppearance="?android:attr/textAppearanceSmall"/>
|
||||||
android:inputType="text|textVisiblePassword"
|
|
||||||
android:singleLine="true"/>
|
|
||||||
|
|
||||||
<TextView
|
<EditText
|
||||||
android:layout_width="match_parent"
|
android:id="@+id/consumer_key"
|
||||||
android:layout_height="wrap_content"
|
android:layout_width="match_parent"
|
||||||
android:text="@string/consumer_secret"
|
android:layout_height="wrap_content"
|
||||||
android:textAppearance="?android:attr/textAppearanceSmall"/>
|
android:ems="10"
|
||||||
|
android:inputType="text|textVisiblePassword"
|
||||||
|
android:singleLine="true"/>
|
||||||
|
|
||||||
<EditText
|
<TextView
|
||||||
android:id="@+id/consumer_secret"
|
android:layout_width="match_parent"
|
||||||
android:layout_width="match_parent"
|
android:layout_height="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:text="@string/consumer_secret"
|
||||||
android:ems="10"
|
android:textAppearance="?android:attr/textAppearanceSmall"/>
|
||||||
android:inputType="text|textVisiblePassword"
|
|
||||||
android:singleLine="true"/>
|
<EditText
|
||||||
|
android:id="@+id/consumer_secret"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ems="10"
|
||||||
|
android:inputType="text|textVisiblePassword"
|
||||||
|
android:singleLine="true"/>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<org.mariotaku.twidere.view.HomeActionButtonCompat
|
<org.mariotaku.twidere.view.HomeActionButtonCompat
|
||||||
android:id="@+id/actions_button_bottom"
|
android:id="@+id/actions_button"
|
||||||
style="?android:buttonStyle"
|
style="?android:buttonStyle"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_width="@dimen/float_action_button_size"
|
android:layout_width="@dimen/float_action_button_size"
|
||||||
|
|
|
@ -645,5 +645,6 @@
|
||||||
<string name="excluded">Excluded</string>
|
<string name="excluded">Excluded</string>
|
||||||
<string name="exclude_this_host">Exclude this host</string>
|
<string name="exclude_this_host">Exclude this host</string>
|
||||||
<string name="api_url_format_help">[DOMAIN]: Twitter API domain.\nExample: https://[DOMAIN].twitter.com/ will be replaced to https://api.twitter.com/.</string>
|
<string name="api_url_format_help">[DOMAIN]: Twitter API domain.\nExample: https://[DOMAIN].twitter.com/ will be replaced to https://api.twitter.com/.</string>
|
||||||
|
<string name="no_version_suffix">No version suffix</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
Loading…
Reference in New Issue