diff --git a/twidere.component.common/src/main/java/org/mariotaku/twidere/constant/SharedPreferenceConstants.java b/twidere.component.common/src/main/java/org/mariotaku/twidere/constant/SharedPreferenceConstants.java
index 36f609c3a..36f22712a 100644
--- a/twidere.component.common/src/main/java/org/mariotaku/twidere/constant/SharedPreferenceConstants.java
+++ b/twidere.component.common/src/main/java/org/mariotaku/twidere/constant/SharedPreferenceConstants.java
@@ -249,6 +249,7 @@ public interface SharedPreferenceConstants {
@Preference(type = STRING, hasDefault = true, defaultString = TwidereConstants.TWITTER_CONSUMER_SECRET)
String KEY_CONSUMER_SECRET = "consumer_secret";
String KEY_SETTINGS_WIZARD_COMPLETED = "settings_wizard_completed";
+ String KEY_CONSUMER_KEY_SECRET_SET = "consumer_key_secret_set";
@Preference(type = BOOLEAN, hasDefault = true, defaultBoolean = true)
String KEY_CARD_ANIMATION = "card_animation";
@Preference(type = BOOLEAN, hasDefault = true, defaultBoolean = true)
diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/ComposeActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/support/ComposeActivity.java
index e501ced89..6a868c228 100644
--- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/ComposeActivity.java
+++ b/twidere/src/main/java/org/mariotaku/twidere/activity/support/ComposeActivity.java
@@ -1038,22 +1038,6 @@ public class ComposeActivity extends ThemedFragmentActivity implements LocationL
// mAccountActionProvider.setSelectedAccounts(mAccountsAdapter.getSelectedAccounts());
}
- @TargetApi(Build.VERSION_CODES.KITKAT)
- private boolean openDocument() {
- final Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
- final String[] mimeTypes = {"image/png", "image/jpeg", "image/gif"};
- intent.setType("image/*");
- intent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes);
- intent.addCategory(Intent.CATEGORY_OPENABLE);
- intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
- try {
- startActivityForResult(intent, REQUEST_OPEN_DOCUMENT);
- } catch (final ActivityNotFoundException e) {
- return false;
- }
- return true;
- }
-
private boolean pickImage() {
final Intent intent = ThemedImagePickerActivity.withThemed(this).pickImage().build();
startActivityForResult(intent, REQUEST_PICK_IMAGE);
@@ -1375,6 +1359,7 @@ public class ComposeActivity extends ThemedFragmentActivity implements LocationL
mSelection = new LongSparseArray<>();
final SharedPreferencesWrapper preferences = SharedPreferencesWrapper.getInstance(activity,
SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE, SharedPreferenceConstants.class);
+ assert preferences != null;
mNameFirst = preferences.getBoolean(KEY_NAME_FIRST);
}
diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/SignInActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/support/SignInActivity.java
index 85b326d8d..fe797758a 100644
--- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/SignInActivity.java
+++ b/twidere/src/main/java/org/mariotaku/twidere/activity/support/SignInActivity.java
@@ -19,11 +19,11 @@
package org.mariotaku.twidere.activity.support;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
+import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.ColorStateList;
@@ -42,6 +42,7 @@ import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewCompat;
import android.support.v7.app.ActionBar;
+import android.support.v7.app.AlertDialog;
import android.support.v7.widget.ActionMenuView;
import android.support.v7.widget.Toolbar;
import android.text.Editable;
@@ -85,10 +86,12 @@ import org.mariotaku.twidere.util.OAuthPasswordAuthenticator.AuthenticationExcep
import org.mariotaku.twidere.util.OAuthPasswordAuthenticator.AuthenticityTokenException;
import org.mariotaku.twidere.util.OAuthPasswordAuthenticator.WrongUserPassException;
import org.mariotaku.twidere.util.ParseUtils;
+import org.mariotaku.twidere.util.SharedPreferencesWrapper;
import org.mariotaku.twidere.util.ThemeUtils;
import org.mariotaku.twidere.util.TwidereActionModeForChildListener;
import org.mariotaku.twidere.util.TwidereColorUtils;
import org.mariotaku.twidere.util.TwitterAPIFactory;
+import org.mariotaku.twidere.util.Utils;
import org.mariotaku.twidere.util.support.ViewSupport;
import org.mariotaku.twidere.util.support.view.ViewOutlineProviderCompat;
import org.mariotaku.twidere.view.TintedStatusNativeActionModeAwareLayout;
@@ -346,6 +349,15 @@ public class SignInActivity extends BaseAppCompatActivity implements OnClickList
final ColorStateList color = ColorStateList.valueOf(resources.getColor(R.color.material_light_green));
ViewCompat.setBackgroundTintList(mSignInButton, color);
setSignInButton();
+
+ final String consumerKey = mPreferences.getString(KEY_CONSUMER_KEY, null);
+ final String consumerSecret = mPreferences.getString(KEY_CONSUMER_SECRET, null);
+ if (savedInstanceState == null && !mPreferences.getBoolean(KEY_CONSUMER_KEY_SECRET_SET, false)
+ && !Utils.isCustomConsumerKeySecret(consumerKey, consumerSecret)) {
+ final SetConsumerKeySecretDialogFragment df = new SetConsumerKeySecretDialogFragment();
+ df.setCancelable(false);
+ df.show(getSupportFragmentManager(), "set_consumer_key_secret");
+ }
}
private void doLogin() {
@@ -816,4 +828,38 @@ public class SignInActivity extends BaseAppCompatActivity implements OnClickList
apiUrlFormat, false, noVersionSuffix);
}
}
+
+ public static class SetConsumerKeySecretDialogFragment extends BaseSupportDialogFragment {
+
+ @NonNull
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ builder.setView(R.layout.dialog_set_consumer_key_secret);
+ builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ final EditText editConsumerKey = (EditText) ((Dialog) dialog).findViewById(R.id.consumer_key);
+ final EditText editConsumerSecret = (EditText) ((Dialog) dialog).findViewById(R.id.consumer_secret);
+ final SharedPreferences prefs = SharedPreferencesWrapper.getInstance(getActivity(), SHARED_PREFERENCES_NAME, MODE_PRIVATE);
+ final SharedPreferences.Editor editor = prefs.edit();
+ editor.putString(KEY_CONSUMER_KEY, ParseUtils.parseString(editConsumerKey.getText()));
+ editor.putString(KEY_CONSUMER_SECRET, ParseUtils.parseString(editConsumerSecret.getText()));
+ editor.apply();
+ }
+ });
+ final AlertDialog dialog = builder.create();
+ dialog.setOnShowListener(new DialogInterface.OnShowListener() {
+ @Override
+ public void onShow(DialogInterface dialog) {
+ final EditText editConsumerKey = (EditText) ((Dialog) dialog).findViewById(R.id.consumer_key);
+ final EditText editConsumerSecret = (EditText) ((Dialog) dialog).findViewById(R.id.consumer_secret);
+ final SharedPreferences prefs = SharedPreferencesWrapper.getInstance(getActivity(), SHARED_PREFERENCES_NAME, MODE_PRIVATE);
+ editConsumerKey.setText(prefs.getString(KEY_CONSUMER_KEY, null));
+ editConsumerSecret.setText(prefs.getString(KEY_CONSUMER_SECRET, null));
+ }
+ });
+ return dialog;
+ }
+ }
}
diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/Utils.java b/twidere/src/main/java/org/mariotaku/twidere/util/Utils.java
index e804520f4..2065186e5 100644
--- a/twidere/src/main/java/org/mariotaku/twidere/util/Utils.java
+++ b/twidere/src/main/java/org/mariotaku/twidere/util/Utils.java
@@ -3839,6 +3839,12 @@ public final class Utils implements Constants {
textView.setText(text);
}
+ public static boolean isCustomConsumerKeySecret(String consumerKey, String consumerSecret) {
+ if (TextUtils.isEmpty(consumerKey) || TextUtils.isEmpty(consumerSecret)) return false;
+ return (!TWITTER_CONSUMER_KEY.equals(consumerKey) && !TWITTER_CONSUMER_SECRET.equals(consumerKey))
+ && (!TWITTER_CONSUMER_KEY_LEGACY.equals(consumerKey) && !TWITTER_CONSUMER_SECRET_LEGACY.equals(consumerSecret));
+ }
+
static class UtilsL {
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
diff --git a/twidere/src/main/res/layout/dialog_set_consumer_key_secret.xml b/twidere/src/main/res/layout/dialog_set_consumer_key_secret.xml
new file mode 100644
index 000000000..c6dba64e0
--- /dev/null
+++ b/twidere/src/main/res/layout/dialog_set_consumer_key_secret.xml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/twidere/src/main/res/values/strings.xml b/twidere/src/main/res/values/strings.xml
index 23b82ed6a..5f429e7f9 100644
--- a/twidere/src/main/res/values/strings.xml
+++ b/twidere/src/main/res/values/strings.xml
@@ -769,4 +769,5 @@
This month
Media preload
On mobile network
+ Twidere is reaching token limit, you will have to create an app at https://apps.twitter.com/ and paste consumer key and secret below.\nIf you continue using default key, you may not be able to sign in.
\ No newline at end of file