fix: user register; update dependencies
This commit is contained in:
@@ -44,10 +44,7 @@ public class RunIntentActivity extends Activity {
|
||||
InputStream stream = getContentResolver().openInputStream(uri);
|
||||
Scripts.run(new StringScriptSource(PFiles.read(stream)));
|
||||
} else {
|
||||
final String path = intent.getData().getPath();
|
||||
if (!TextUtils.isEmpty(path)) {
|
||||
Scripts.run(new ScriptFile(path));
|
||||
}
|
||||
CommonUtils.handleIntent(this, intent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.stardust.scriptdroid.network;
|
||||
|
||||
import com.bumptech.glide.annotation.GlideModule;
|
||||
import com.bumptech.glide.module.AppGlideModule;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/10/26.
|
||||
*/
|
||||
@GlideModule
|
||||
public class Glides extends AppGlideModule {
|
||||
}
|
||||
@@ -2,8 +2,12 @@ package com.stardust.scriptdroid.network;
|
||||
|
||||
import com.google.gson.GsonBuilder;
|
||||
import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
|
||||
import com.stardust.scriptdroid.network.api.ConfigApi;
|
||||
import com.stardust.scriptdroid.network.entity.config.Config;
|
||||
import com.stardust.scriptdroid.network.util.WebkitCookieManagerProxy;
|
||||
|
||||
import io.reactivex.Observable;
|
||||
import io.reactivex.Scheduler;
|
||||
import okhttp3.OkHttpClient;
|
||||
import retrofit2.Retrofit;
|
||||
import retrofit2.converter.gson.GsonConverterFactory;
|
||||
@@ -14,13 +18,16 @@ import retrofit2.converter.gson.GsonConverterFactory;
|
||||
|
||||
public class NodeBB {
|
||||
|
||||
public static final String BASE_URL = "http://www.autojs.org/";
|
||||
private static final NodeBB sInstance = new NodeBB();
|
||||
private Config mConfig;
|
||||
|
||||
|
||||
private Retrofit mRetrofit;
|
||||
|
||||
NodeBB() {
|
||||
mRetrofit = new Retrofit.Builder()
|
||||
.baseUrl("http://www.autojs.org/")
|
||||
.baseUrl(BASE_URL)
|
||||
.addConverterFactory(GsonConverterFactory.create(new GsonBuilder()
|
||||
.setLenient()
|
||||
.create()))
|
||||
@@ -38,4 +45,14 @@ public class NodeBB {
|
||||
public Retrofit getRetrofit() {
|
||||
return mRetrofit;
|
||||
}
|
||||
|
||||
public Observable<Config> getConfig() {
|
||||
if (mConfig == null) {
|
||||
return mRetrofit.create(ConfigApi.class)
|
||||
.getConfig()
|
||||
.doOnNext(config -> mConfig = config);
|
||||
}
|
||||
return Observable.just(mConfig);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ public class UserService {
|
||||
}
|
||||
|
||||
public Observable<ResponseBody> login(String userName, final String password) {
|
||||
return mRetrofit.create(ConfigApi.class)
|
||||
return NodeBB.getInstance()
|
||||
.getConfig()
|
||||
.flatMap(config -> {
|
||||
Log.d("login", config.toString());
|
||||
@@ -39,4 +39,15 @@ public class UserService {
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
public Observable<ResponseBody> register(String email, String userName, String password) {
|
||||
return NodeBB.getInstance()
|
||||
.getConfig()
|
||||
.flatMap(config -> {
|
||||
Log.d("login", config.toString());
|
||||
return mRetrofit.create(UserApi.class)
|
||||
.register(Collections.singletonMap("x-csrf-token", config.getCsrfToken()),
|
||||
email, userName, password);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,5 +25,10 @@ public interface UserApi {
|
||||
@POST("/login")
|
||||
Observable<ResponseBody> login(@HeaderMap Map<String, String> csrfToken, @Field("username") String userName, @Field("password") String password);
|
||||
|
||||
@FormUrlEncoded
|
||||
@POST("/register")
|
||||
Observable<ResponseBody> register(@HeaderMap Map<String, String> csrfToken, @Field("email") String email,
|
||||
@Field("username") String userName, @Field("password") String password);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -120,7 +120,7 @@ public class CommunityWebView extends EWebView {
|
||||
private class MyWebChromeClient extends EWebView.MyWebChromeClient {
|
||||
|
||||
@Override
|
||||
public void openFileChooser(ValueCallback<Uri> callback) {
|
||||
public void openFileChooser(ValueCallback<Uri> callback, String[] acceptType, boolean isCaptureEnabled) {
|
||||
new FileChooserDialogBuilder(getContext())
|
||||
.title(R.string.text_select_file_to_upload)
|
||||
.dir(StorageFileProvider.DEFAULT_DIRECTORY_PATH)
|
||||
@@ -128,6 +128,5 @@ public class CommunityWebView extends EWebView {
|
||||
.cancelListener(dialog -> callback.onReceiveValue(null))
|
||||
.show();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,16 +1,23 @@
|
||||
package com.stardust.scriptdroid.ui.main.drawer;
|
||||
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.text.TextUtils;
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.afollestad.materialdialogs.MaterialDialog;
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
||||
import com.bumptech.glide.request.target.SimpleTarget;
|
||||
import com.bumptech.glide.request.transition.Transition;
|
||||
import com.stardust.scriptdroid.App;
|
||||
import com.stardust.scriptdroid.Pref;
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.network.GlideApp;
|
||||
import com.stardust.scriptdroid.network.UserService;
|
||||
import com.stardust.scriptdroid.ui.floating.CircularMenu;
|
||||
import com.stardust.scriptdroid.ui.floating.FloatyWindowManger;
|
||||
import com.stardust.scriptdroid.network.NodeBB;
|
||||
@@ -19,10 +26,12 @@ import com.stardust.scriptdroid.network.api.UserApi;
|
||||
import com.stardust.scriptdroid.network.entity.user.User;
|
||||
import com.stardust.scriptdroid.network.entity.VersionInfo;
|
||||
import com.stardust.scriptdroid.tool.SimpleObserver;
|
||||
import com.stardust.scriptdroid.ui.login.LoginActivity_;
|
||||
import com.stardust.scriptdroid.ui.user.LoginActivity_;
|
||||
import com.stardust.scriptdroid.ui.settings.SettingsActivity;
|
||||
import com.stardust.scriptdroid.ui.update.UpdateInfoDialogBuilder;
|
||||
import com.stardust.scriptdroid.ui.widget.AvatarView;
|
||||
import com.stardust.theme.ThemeColorManager;
|
||||
import com.stardust.theme.ThemeColorManagerCompat;
|
||||
import com.stardust.view.accessibility.AccessibilityService;
|
||||
import com.stardust.scriptdroid.sublime.SublimePluginService;
|
||||
import com.stardust.scriptdroid.tool.AccessibilityServiceTool;
|
||||
@@ -69,7 +78,13 @@ public class DrawerFragment extends android.support.v4.app.Fragment {
|
||||
TextView mUserName;
|
||||
|
||||
@ViewById(R.id.avatar)
|
||||
ImageView mAvatar;
|
||||
AvatarView mAvatar;
|
||||
|
||||
@ViewById(R.id.shadow)
|
||||
View mShadow;
|
||||
|
||||
@ViewById(R.id.default_cover)
|
||||
View mDefaultCover;
|
||||
|
||||
|
||||
private Disposable mConnectionStateDisposable;
|
||||
@@ -108,21 +123,36 @@ public class DrawerFragment extends android.support.v4.app.Fragment {
|
||||
.me()
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new SimpleObserver<User>() {
|
||||
@Override
|
||||
public void onNext(@io.reactivex.annotations.NonNull User user) {
|
||||
setUpUserInfo(user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(@io.reactivex.annotations.NonNull Throwable e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
});
|
||||
.subscribe(this::setUpUserInfo, Throwable::printStackTrace);
|
||||
}
|
||||
|
||||
private void setUpUserInfo(User user) {
|
||||
mUserName.setText(user.getUsername());
|
||||
mAvatar.setUser(user);
|
||||
setCoverImage(user);
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void setCoverImage(User user) {
|
||||
String coverUrl = user.getCoverUrl();
|
||||
if (TextUtils.isEmpty(coverUrl) || coverUrl.equals("/assets/images/cover-default.png")) {
|
||||
mDefaultCover.setVisibility(View.VISIBLE);
|
||||
mShadow.setVisibility(View.GONE);
|
||||
mHeaderView.setBackgroundColor(ThemeColorManagerCompat.getColorPrimary());
|
||||
} else {
|
||||
mDefaultCover.setVisibility(View.GONE);
|
||||
mShadow.setVisibility(View.VISIBLE);
|
||||
GlideApp.with(getContext())
|
||||
.load(NodeBB.BASE_URL + coverUrl)
|
||||
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
||||
.into(new SimpleTarget<Drawable>() {
|
||||
@Override
|
||||
public void onResourceReady(Drawable resource, Transition<? super Drawable> transition) {
|
||||
mHeaderView.setBackground(resource);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Click(R.id.avatar)
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
package com.stardust.scriptdroid.ui.login;
|
||||
package com.stardust.scriptdroid.ui.user;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.afollestad.materialdialogs.MaterialDialog;
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.network.UserService;
|
||||
import com.stardust.scriptdroid.ui.BaseActivity;
|
||||
@@ -39,15 +43,29 @@ public class LoginActivity extends BaseActivity {
|
||||
if (!checkNotEmpty(userName, password)) {
|
||||
return;
|
||||
}
|
||||
MaterialDialog dialog = new MaterialDialog.Builder(this)
|
||||
.progress(true, 0)
|
||||
.content(R.string.text_logining)
|
||||
.cancelable(false)
|
||||
.show();
|
||||
UserService.getInstance().login(userName, password)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(response -> {
|
||||
dialog.dismiss();
|
||||
Toast.makeText(getApplicationContext(), R.string.text_login_succeed, Toast.LENGTH_SHORT).show();
|
||||
finish();
|
||||
}
|
||||
, error ->
|
||||
Toast.makeText(getApplicationContext(), R.string.text_login_fail, Toast.LENGTH_SHORT).show());
|
||||
, error -> {
|
||||
dialog.dismiss();
|
||||
mPassword.setError(getString(R.string.text_login_fail));
|
||||
error.printStackTrace();
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Click(R.id.forgot_password)
|
||||
void forgotPassword() {
|
||||
|
||||
}
|
||||
|
||||
@@ -62,4 +80,20 @@ public class LoginActivity extends BaseActivity {
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
getMenuInflater().inflate(R.menu.menu_login, menu);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
if (item.getItemId() == R.id.action_register) {
|
||||
RegisterActivity_.intent(this).start();
|
||||
finish();
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
package com.stardust.scriptdroid.ui.user;
|
||||
|
||||
import android.util.Log;
|
||||
import android.util.Patterns;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.afollestad.materialdialogs.MaterialDialog;
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.network.UserService;
|
||||
import com.stardust.scriptdroid.ui.BaseActivity;
|
||||
|
||||
import org.androidannotations.annotations.AfterViews;
|
||||
import org.androidannotations.annotations.Click;
|
||||
import org.androidannotations.annotations.EActivity;
|
||||
import org.androidannotations.annotations.ViewById;
|
||||
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/10/26.
|
||||
*/
|
||||
@EActivity(R.layout.activity_register)
|
||||
public class RegisterActivity extends BaseActivity {
|
||||
|
||||
@ViewById(R.id.email)
|
||||
TextView mEmail;
|
||||
|
||||
@ViewById(R.id.username)
|
||||
TextView mUserName;
|
||||
|
||||
@ViewById(R.id.password)
|
||||
TextView mPassword;
|
||||
|
||||
@AfterViews
|
||||
void setUpViews() {
|
||||
setToolbarAsBack(getString(R.string.text_register));
|
||||
}
|
||||
|
||||
@Click(R.id.register)
|
||||
void login() {
|
||||
String email = mEmail.getText().toString();
|
||||
String userName = mUserName.getText().toString();
|
||||
String password = mPassword.getText().toString();
|
||||
if (!validateInput(email, userName, password)) {
|
||||
return;
|
||||
}
|
||||
MaterialDialog dialog = new MaterialDialog.Builder(this)
|
||||
.progress(true, 0)
|
||||
.content(R.string.text_registering)
|
||||
.cancelable(false)
|
||||
.show();
|
||||
UserService.getInstance().register(email, userName, password)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(response -> {
|
||||
dialog.dismiss();
|
||||
onRegisterResponse(response.string());
|
||||
}
|
||||
, error -> {
|
||||
dialog.dismiss();
|
||||
mPassword.setError(getString(R.string.text_register_fail));
|
||||
error.printStackTrace();
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private void onRegisterResponse(String res) {
|
||||
Toast.makeText(this, R.string.text_register_succeed, Toast.LENGTH_SHORT).show();
|
||||
finish();
|
||||
}
|
||||
|
||||
private boolean validateInput(String email, String userName, String password) {
|
||||
if (email.isEmpty()) {
|
||||
mEmail.setError(getString(R.string.text_email_cannot_be_empty));
|
||||
return false;
|
||||
}
|
||||
if (!Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
|
||||
mEmail.setError(getString(R.string.text_email_format_error));
|
||||
return false;
|
||||
}
|
||||
if (userName.isEmpty()) {
|
||||
mUserName.setError(getString(R.string.text_username_cannot_be_empty));
|
||||
return false;
|
||||
}
|
||||
if (password.isEmpty()) {
|
||||
mUserName.setError(getString(R.string.text_password_cannot_be_empty));
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.stardust.scriptdroid.ui.user;
|
||||
|
||||
import com.stardust.scriptdroid.ui.BaseActivity;
|
||||
|
||||
/**
|
||||
* Created by Stardust on 2017/10/26.
|
||||
*/
|
||||
|
||||
public class UserDetailActivity extends BaseActivity {
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
package com.stardust.scriptdroid.ui.widget;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.graphics.drawable.GradientDrawable;
|
||||
import android.support.annotation.AttrRes;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.text.TextUtils;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
||||
import com.makeramen.roundedimageview.RoundedImageView;
|
||||
import com.nickandjerry.dynamiclayoutinflator.lib.DynamicLayoutInflator;
|
||||
import com.stardust.scriptdroid.R;
|
||||
import com.stardust.scriptdroid.network.GlideApp;
|
||||
import com.stardust.scriptdroid.network.Glides;
|
||||
import com.stardust.scriptdroid.network.NodeBB;
|
||||
import com.stardust.scriptdroid.network.entity.user.User;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
|
||||
/**
|
||||
* Created by 婷 on 2017/9/29.
|
||||
*/
|
||||
|
||||
public class AvatarView extends FrameLayout {
|
||||
|
||||
@BindView(R.id.icon_text)
|
||||
TextView mIconText;
|
||||
|
||||
@BindView(R.id.icon)
|
||||
RoundedImageView mIcon;
|
||||
|
||||
private GradientDrawable mIconTextBackground;
|
||||
|
||||
|
||||
public AvatarView(@NonNull Context context) {
|
||||
super(context);
|
||||
init();
|
||||
}
|
||||
|
||||
public AvatarView(@NonNull Context context, @Nullable AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
init();
|
||||
}
|
||||
|
||||
public AvatarView(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
init();
|
||||
}
|
||||
|
||||
private void init() {
|
||||
inflate(getContext(), R.layout.avatar_view, this);
|
||||
ButterKnife.bind(this);
|
||||
mIconTextBackground = (GradientDrawable) mIconText.getBackground();
|
||||
}
|
||||
|
||||
public void setUser(final User user) {
|
||||
if (TextUtils.isEmpty(user.getPicture())) {
|
||||
mIcon.setVisibility(View.GONE);
|
||||
mIconText.setVisibility(View.VISIBLE);
|
||||
mIconTextBackground.setColor(Color.parseColor(user.getIconBgColor()));
|
||||
mIconTextBackground.setCornerRadius(getWidth() / 2);
|
||||
mIconText.setText(user.getIconText());
|
||||
} else {
|
||||
mIcon.setVisibility(View.VISIBLE);
|
||||
mIconText.setVisibility(View.GONE);
|
||||
mIcon.setCornerRadius(getWidth() / 2);
|
||||
GlideApp.with(getContext())
|
||||
.load(NodeBB.BASE_URL + user.getPicture())
|
||||
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
||||
.skipMemoryCache(true)
|
||||
.into(mIcon);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -82,25 +82,19 @@ public class EWebView extends FrameLayout implements SwipeRefreshLayout.OnRefres
|
||||
mProgressBar.setProgress(newProgress);
|
||||
}
|
||||
|
||||
|
||||
// For Android < 3.0
|
||||
public void openFileChooser(ValueCallback<Uri> valueCallback) {
|
||||
|
||||
}
|
||||
|
||||
// For Android >= 3.0
|
||||
@SuppressWarnings("unchecked")
|
||||
public void openFileChooser(ValueCallback valueCallback, String acceptType) {
|
||||
openFileChooser(valueCallback);
|
||||
}
|
||||
|
||||
//For Android >= 4.1
|
||||
public void openFileChooser(ValueCallback<Uri> valueCallback,
|
||||
String acceptType, String capture) {
|
||||
openFileChooser(valueCallback);
|
||||
openFileChooser(valueCallback, acceptType.split(","), capture.equals("true"));
|
||||
}
|
||||
|
||||
public void openFileChooser(ValueCallback<Uri> valueCallback,
|
||||
String[] acceptType, boolean isCaptureEnabled) {
|
||||
|
||||
}
|
||||
|
||||
// For Android >= 5.0
|
||||
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
|
||||
@Override
|
||||
public boolean onShowFileChooser(WebView webView,
|
||||
ValueCallback<Uri[]> filePathCallback,
|
||||
@@ -111,7 +105,7 @@ public class EWebView extends FrameLayout implements SwipeRefreshLayout.OnRefres
|
||||
} else {
|
||||
filePathCallback.onReceiveValue(new Uri[]{value});
|
||||
}
|
||||
});
|
||||
}, fileChooserParams.getAcceptTypes(), fileChooserParams.isCaptureEnabled());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user