diff --git a/base/src/main/java/com/heyongrui/base/assist/ConfigConstants.java b/base/src/main/java/com/heyongrui/base/assist/ConfigConstants.java index b31975d..c4e21e0 100644 --- a/base/src/main/java/com/heyongrui/base/assist/ConfigConstants.java +++ b/base/src/main/java/com/heyongrui/base/assist/ConfigConstants.java @@ -31,6 +31,7 @@ public class ConfigConstants { public static final String PATH_MONO_TEA_HISTORY_DATE = "/module/monoTeaHistoryDate"; public static final String PATH_MONO_CATEGORY = "/module/monoCategory"; public static final String PATH_HITOKOTO = "/module/hitokoto"; + public static final String PATH_SMART_ROBOT = "/module/smartRobot"; public static final String PATH_POETRY = "/module/poetry"; public static final String PATH_POETRY_SEARCH = "/module/poetrySearch"; public static final String PATH_POETRY_DETAIL = "/module/poetryDetail"; diff --git a/base/src/main/java/com/heyongrui/base/interceptor/LoginInterceptor.java b/base/src/main/java/com/heyongrui/base/interceptor/LoginInterceptor.java index 04bb57a..0b334ca 100644 --- a/base/src/main/java/com/heyongrui/base/interceptor/LoginInterceptor.java +++ b/base/src/main/java/com/heyongrui/base/interceptor/LoginInterceptor.java @@ -14,8 +14,9 @@ import java.util.Random; import io.reactivex.Single; +import io.reactivex.SingleObserver; import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.functions.Consumer; +import io.reactivex.disposables.Disposable; @Interceptor(priority = 5, name = "login") public class LoginInterceptor implements IInterceptor { @@ -34,18 +35,33 @@ public void process(Postcard postcard, InterceptorCallback callback) { //主线程跳转登录页面(走绿色通道,不走拦截器) Single.just(postcard) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Consumer() { + .subscribe(new SingleObserver() { @Override - public void accept(Postcard postcard) throws Exception { - String targetPath = postcard.getPath(); - if (TextUtils.isEmpty(targetPath)) return; - Bundle bundle = postcard.getExtras(); - bundle.putString(ConfigConstants.PATH_TARGET, targetPath); + public void onSubscribe(Disposable d) { + } + + @Override + public void onSuccess(Postcard postcard) { + Bundle bundle = null; + if (null != postcard) { + String targetPath = postcard.getPath(); + bundle = postcard.getExtras(); + if (!TextUtils.isEmpty(targetPath)) { + if (!TextUtils.equals(ConfigConstants.PATH_LOGIN, targetPath)) { + bundle.putString(ConfigConstants.PATH_TARGET, targetPath); + } + } + } ARouter.getInstance().build(ConfigConstants.PATH_LOGIN) .with(bundle) .greenChannel() .navigation(); } + + @Override + public void onError(Throwable e) { + e.printStackTrace(); + } }); callback.onInterrupt(null); } else {//不需要登录 diff --git a/module/src/main/AndroidManifest.xml b/module/src/main/AndroidManifest.xml index 0b6ef40..7f30aba 100644 --- a/module/src/main/AndroidManifest.xml +++ b/module/src/main/AndroidManifest.xml @@ -43,5 +43,8 @@ + diff --git a/module/src/main/debug/AndroidManifest.xml b/module/src/main/debug/AndroidManifest.xml index e81872b..646853a 100644 --- a/module/src/main/debug/AndroidManifest.xml +++ b/module/src/main/debug/AndroidManifest.xml @@ -59,6 +59,9 @@ + diff --git a/module/src/main/java/com/heyongrui/module/ModuleFragment.java b/module/src/main/java/com/heyongrui/module/ModuleFragment.java index 59bd601..88067f5 100644 --- a/module/src/main/java/com/heyongrui/module/ModuleFragment.java +++ b/module/src/main/java/com/heyongrui/module/ModuleFragment.java @@ -80,6 +80,7 @@ private void initRecyclerView(RecyclerView recyclerView) { ARouter.getInstance().build(ConfigConstants.PATH_POETRY).navigation(); break; case 4://探索 + ARouter.getInstance().build(ConfigConstants.PATH_SMART_ROBOT).navigation(); break; case 5://音乐 ARouter.getInstance().build(ConfigConstants.PATH_H5).withString("h5Url", "https://ys.juan8014.cn/yin/").navigation(); diff --git a/module/src/main/java/com/heyongrui/module/dagger/ModuleComponent.java b/module/src/main/java/com/heyongrui/module/dagger/ModuleComponent.java index 6816ced..a59c136 100644 --- a/module/src/main/java/com/heyongrui/module/dagger/ModuleComponent.java +++ b/module/src/main/java/com/heyongrui/module/dagger/ModuleComponent.java @@ -9,6 +9,7 @@ import com.heyongrui.module.ModuleFragment; import com.heyongrui.module.douban.presenter.DouBanPresenter; import com.heyongrui.module.douban.view.DouBanActivity; +import com.heyongrui.module.textword.view.SmartRobotActivity; import dagger.Component; @@ -30,4 +31,6 @@ public interface ModuleComponent { void inject(DouBanPresenter douBanPresenter); void inject(ModuleFragment moduleFragment); + + void inject(SmartRobotActivity smartRobotActivity); } diff --git a/module/src/main/java/com/heyongrui/module/data/api/TextApi.java b/module/src/main/java/com/heyongrui/module/data/api/TextApi.java index 0679087..3a0a095 100644 --- a/module/src/main/java/com/heyongrui/module/data/api/TextApi.java +++ b/module/src/main/java/com/heyongrui/module/data/api/TextApi.java @@ -73,4 +73,11 @@ public interface TextApi { */ @GET("api/group/topicList.do") Observable groupDetail(@Query("groupId") String groupId, @Query("pageNo") int pageNo, @Query("pageSize") int pageSize); + + /** + * 智能机器人(天气、翻译、藏头诗、笑话、歌词、计算、域名信息/备案/收录查询、IP查询、手机号码归属、人工智能聊天) + * {"result":0,"content":"内容"} + */ + @GET("api.php?key=free&appid=0") + Observable smartRobot(@Query("msg") String msg); } diff --git a/module/src/main/java/com/heyongrui/module/data/service/TextService.java b/module/src/main/java/com/heyongrui/module/data/service/TextService.java index 3211ea0..3211541 100644 --- a/module/src/main/java/com/heyongrui/module/data/service/TextService.java +++ b/module/src/main/java/com/heyongrui/module/data/service/TextService.java @@ -101,4 +101,14 @@ public Observable groupDetail(String groupId, int pageNo, in .groupDetail(groupId, pageNo, pageSize) .compose(RxHelper.rxSchedulerHelper()); } + + /** + * 智能机器人(天气、翻译、藏头诗、笑话、歌词、计算、域名信息/备案/收录查询、IP查询、手机号码归属、人工智能聊天) + * {"result":0,"content":"内容"} + */ + public Observable smartRobot(String conversationContent) { + return ApiService.createApi(TextApi.class, "http://api.qingyunke.com/") + .smartRobot(conversationContent) + .compose(RxHelper.rxSchedulerHelper()); + } } diff --git a/module/src/main/java/com/heyongrui/module/textword/view/SmartRobotActivity.java b/module/src/main/java/com/heyongrui/module/textword/view/SmartRobotActivity.java new file mode 100644 index 0000000..db19508 --- /dev/null +++ b/module/src/main/java/com/heyongrui/module/textword/view/SmartRobotActivity.java @@ -0,0 +1,170 @@ +package com.heyongrui.module.textword.view; + +import android.graphics.Color; +import android.os.Bundle; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.text.method.ScrollingMovementMethod; +import android.view.View; +import android.view.inputmethod.EditorInfo; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.TextView; + +import com.alibaba.android.arouter.facade.annotation.Route; +import com.blankj.utilcode.util.KeyboardUtils; +import com.blankj.utilcode.util.ToastUtils; +import com.google.gson.Gson; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.heyongrui.base.assist.ConfigConstants; +import com.heyongrui.base.assist.RxManager; +import com.heyongrui.base.base.BaseActivity; +import com.heyongrui.base.utils.DrawableUtil; +import com.heyongrui.module.R; +import com.heyongrui.module.dagger.DaggerModuleComponent; +import com.heyongrui.module.dagger.ModuleModule; +import com.heyongrui.module.data.service.TextService; +import com.heyongrui.network.configure.ResponseDisposable; + +import javax.inject.Inject; + +@Route(path = ConfigConstants.PATH_SMART_ROBOT) +public class SmartRobotActivity extends BaseActivity implements View.OnClickListener { + + private EditText etInput; + private TextView tvContent; + private ImageView ivClear; + + @Inject + TextService mTextService; + + RxManager mRxManager; + + @Override + protected void initializeInjector() { + super.initializeInjector(); + DaggerModuleComponent + .builder() + .appComponent(getAppComponent()) + .moduleModule(new ModuleModule(this)) + .build() + .inject(this); + } + + @Override + public void onClick(View view) { + int id = view.getId(); + if (id == R.id.iv_back) { + finish(); + } else if (id == R.id.iv_clear) { + etInput.setText(""); + } else if (id == R.id.btn_chat) { + KeyboardUtils.hideSoftInput(etInput); + String conversationContent = etInput.getText().toString(); + if (!TextUtils.isEmpty(conversationContent)) { + chatWithSmartRobot(conversationContent); + } + } + } + + @Override + protected int getLayoutId() { + return R.layout.activity_smart_robot; + } + + @Override + protected void init(Bundle savedInstanceState) { + mRxManager = new RxManager(); + + ImageView ivBack = findViewById(R.id.iv_back); + ivBack.setImageDrawable(DrawableUtil.tintDrawable(this, R.drawable.ic_back, Color.WHITE)); + etInput = findViewById(R.id.et_input); + ivClear = findViewById(R.id.iv_clear); + Button btnChat = findViewById(R.id.btn_chat); + tvContent = findViewById(R.id.tv_content); + tvContent.setMovementMethod(ScrollingMovementMethod.getInstance()); + + addOnClickListeners(this, ivBack, ivClear, btnChat); + + initEdit(etInput); + } + + private void initEdit(EditText editText) { + editText.setOnEditorActionListener((textView, i, keyEvent) -> { + if (i == EditorInfo.IME_ACTION_SEARCH) { + KeyboardUtils.hideSoftInput(editText); + String conversationContent = textView.getText().toString(); + if (!TextUtils.isEmpty(conversationContent)) { + chatWithSmartRobot(conversationContent); + } + return true; + } + return false; + }); + editText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { + + } + + @Override + public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { + + } + + @Override + public void afterTextChanged(Editable editable) { + String string = editable.toString(); + if (TextUtils.isEmpty(string)) { + ivClear.setVisibility(View.GONE); + } else { + ivClear.setVisibility(View.VISIBLE); + } + } + }); + } + + private void chatWithSmartRobot(String conversationContent) { + mRxManager.add(mTextService.smartRobot(conversationContent) + .subscribeWith(new ResponseDisposable(this, true) { + @Override + protected void onSuccess(Object object) { + tvContent.setText(""); + String resultString = new Gson().toJson(object); + if (!TextUtils.isEmpty(resultString)) { + JsonObject jsonObject = new JsonParser().parse(resultString).getAsJsonObject(); + if (jsonObject != null) { + boolean isHasContent = jsonObject.has("content"); + if (isHasContent) { + try { + String content = jsonObject.get("content").getAsString(); + content = TextUtils.isEmpty(content) ? "" : content; + content = content.replace("{br}", "\n"); + tvContent.setText(content); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + } + + @Override + protected void onFailure(int errorCode, String errorMsg) { + ToastUtils.showShort(errorMsg); + tvContent.setText(""); + } + })); + } + + @Override + protected void onDestroy() { + if (null != mRxManager) { + mRxManager.clear(); + } + super.onDestroy(); + } +} diff --git a/module/src/main/res/layout/activity_smart_robot.xml b/module/src/main/res/layout/activity_smart_robot.xml new file mode 100644 index 0000000..3ee2e59 --- /dev/null +++ b/module/src/main/res/layout/activity_smart_robot.xml @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + +