fix: user register; update dependencies

This commit is contained in:
hyb1996
2017-10-26 17:01:29 +08:00
parent 1e5c05efb9
commit f55593a7a2
30 changed files with 630 additions and 239 deletions

View File

@@ -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);
}
}
}

View File

@@ -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 {
}

View File

@@ -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);
}
}

View File

@@ -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);
});
}
}

View File

@@ -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);
}

View File

@@ -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();
}
}
}

View File

@@ -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)

View File

@@ -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);
}
}

View File

@@ -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;
}
}

View File

@@ -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 {
}

View File

@@ -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);
}
}
}

View File

@@ -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;
}
}