From a046d5a804d6842796a718fba4e98c3259340a60 Mon Sep 17 00:00:00 2001 From: Runt <qingingrunt2010@qq.com> Date: Sat, 04 Jun 2022 12:42:04 +0000 Subject: [PATCH] 接口参数问题 标题栏 添加收藏功能 --- app/src/main/java/com/auto/lyric/MainActivity.java | 61 ++++++-------- app/src/main/java/com/auto/lyric/base/model/BaseViewModel.java | 22 +++++ app/src/main/res/values-night/themes.xml | 2 app/src/main/java/com/auto/lyric/ui/collect/CollectActivity.java | 6 + app/src/main/java/com/auto/lyric/vm/MainViewModel.java | 35 +++----- app/src/main/res/values/themes.xml | 2 app/src/main/AndroidManifest.xml | 1 app/src/main/java/com/auto/lyric/ui/collect/CollectViewModel.java | 21 +++++ app/src/main/java/com/auto/lyric/retrofit/api/FieldData.java | 10 ++ app/src/main/res/layout/activity_collect.xml | 4 app/src/main/java/com/auto/lyric/base/activities/BaseActivity.java | 41 ++++++++++ app/src/main/java/com/auto/lyric/retrofit/api/CollectApiCenter.java | 27 ++---- 12 files changed, 153 insertions(+), 79 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 611afe8..03e9360 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -44,6 +44,7 @@ <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> + <activity android:name=".ui.collect.CollectActivity" /> <service android:name=".service.AutoInputService" android:enabled="true" diff --git a/app/src/main/java/com/auto/lyric/MainActivity.java b/app/src/main/java/com/auto/lyric/MainActivity.java index 2bee5ac..8bed626 100644 --- a/app/src/main/java/com/auto/lyric/MainActivity.java +++ b/app/src/main/java/com/auto/lyric/MainActivity.java @@ -6,12 +6,7 @@ import android.provider.Settings; import android.text.TextUtils; import android.util.Log; -import android.view.ViewGroup; -import android.widget.EditText; -import android.widget.LinearLayout; import android.widget.Toast; - -import androidx.appcompat.app.AlertDialog; import com.auto.lyric.base.activities.BaseActivity; import com.auto.lyric.data.ActiveResult; @@ -22,7 +17,7 @@ import com.auto.lyric.retrofit.observable.LoadingHttpObserver; import com.auto.lyric.service.AutoInputService; import com.auto.lyric.service.FloatingWindowService; -import com.auto.lyric.util.DeviceUtil; +import com.auto.lyric.ui.collect.CollectActivity; import com.auto.lyric.vm.MainViewModel; import com.google.gson.Gson; @@ -35,27 +30,31 @@ public class MainActivity extends BaseActivity<ActivityMainBinding, MainViewModel> { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); - + UserInfo userInfo; @Override public void initViews() { Intent floatService = new Intent(getApplicationContext(), FloatingWindowService.class); String key = getStringProjectPrefrence("activeKey"); - UserInfo result = new Gson().fromJson(key,UserInfo.class); + userInfo = new Gson().fromJson(key,UserInfo.class); try { - if(TextUtils.isEmpty(key) || TextUtils.isEmpty(result.keyDateValid)|| - new Date().getTime() > dateFormat.parse(result.keyDateValid).getTime()){ + if(TextUtils.isEmpty(key) || TextUtils.isEmpty(userInfo.keyDateValid)|| + new Date().getTime() > dateFormat.parse(userInfo.keyDateValid).getTime()){ activeDialog(); }else{ - viewModel.checkActive(result.userId,result.activeKey,new LoadingHttpObserver<ActiveResult>(this) { + viewModel.checkActive(userInfo.userId,userInfo.activeKey,new LoadingHttpObserver<ActiveResult>(this) { @Override public void onError(ActiveResult error) { super.onError(error); + if(error.result.equals("108")){ + activeDialog(); + } } @Override public void onComplete(ActiveResult result) { + userInfo = result.userInfo; } }); } @@ -113,6 +112,8 @@ //startService(floatService); } }); + binding.collect.setOnClickListener(v -> addCollectDailog(userInfo.userId,userInfo.activeKey,binding.edit.getText().toString())); + binding.txtFavorite.setOnClickListener(v -> startActivity(new Intent(mContext, CollectActivity.class))); } public boolean isAccessibilitySettingsOn() { @@ -153,39 +154,31 @@ return false; } + private void addCollectDailog(String userId,String activeKey,String lrc ){ + + showInputDialog("收藏歌词","填写歌词名称","收藏","取消",(dialog1,editText, which) -> { + viewModel.addToCollect(userId, activeKey, editText.getText().toString(), lrc, new LoadingHttpObserver<ActiveResult>(this) { + @Override + public void onComplete(ActiveResult error) { + + } + }); + },(dialog1,editText, which) -> {}); + } private void activeDialog(){ - AlertDialog.Builder builder = new AlertDialog.Builder(this); - builder.setTitle("软件尚未激活或已过期"); - EditText editText = new EditText(this); - editText.setHint("请输入激活码"); - ViewGroup.MarginLayoutParams params = new ViewGroup.MarginLayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); - params.setMargins(DeviceUtil.convertDpToPixel(30,this),DeviceUtil.convertDpToPixel(20,this),DeviceUtil.convertDpToPixel(30,this),0); - editText.setLayoutParams(params); - LinearLayout lin = new LinearLayout(this); - lin.addView(editText); - builder.setView(lin); - builder.setCancelable(false); - AlertDialog dialg = builder.create(); - dialg.setButton(AlertDialog.BUTTON_NEGATIVE,"激活", (dialog, which) -> { + showInputDialog("软件尚未激活或已过期", "请输入激活码", "激活", "退出程序", (dialog1,editText, which) -> { viewModel.register(editText.getText().toString().trim(),new LoadingHttpObserver<ActiveResult>(this) { - - @Override - public void onError(ActiveResult error) { - super.onError(error); - dialg.show(); - } - @Override public void onComplete(ActiveResult result) { + dialog1.dismiss(); + userInfo = result.userInfo; putStringProjectPrefrence("activeKey",new Gson().toJson(result.userInfo)); } }); - }); - dialg.setButton(AlertDialog.BUTTON_POSITIVE,"退出程序",(dialog,which) ->{ + }, (dialog1,editText, which) -> { System.exit(0); }); - dialg.show(); } } \ No newline at end of file diff --git a/app/src/main/java/com/auto/lyric/base/activities/BaseActivity.java b/app/src/main/java/com/auto/lyric/base/activities/BaseActivity.java index 23a5cac..d4dfaff 100644 --- a/app/src/main/java/com/auto/lyric/base/activities/BaseActivity.java +++ b/app/src/main/java/com/auto/lyric/base/activities/BaseActivity.java @@ -10,9 +10,11 @@ import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; +import android.view.ViewGroup; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; +import android.widget.LinearLayout; import android.widget.Toast; import androidx.annotation.ColorRes; @@ -25,6 +27,7 @@ import com.auto.lyric.R; import com.auto.lyric.base.model.BaseViewModel; import com.auto.lyric.base.model.ViewModelFactory; +import com.auto.lyric.util.DeviceUtil; import com.auto.lyric.util.PreferencesUtils; import java.io.File; @@ -271,6 +274,44 @@ } /** + * inputdialog + * @param title 标题文本 + * @param hint 提示文本 + * @param confirm 确认文本 + * @param cancle 取消文本 + * @param confirmClick 确认事件 + * @param cancleClick 取消事件 + * @return + */ + public void showInputDialog(String title, String hint, String confirm, String cancle, InputDialogClick confirmClick, InputDialogClick cancleClick){ + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle(title); + EditText editText = new EditText(this); + editText.setHint(hint); + ViewGroup.MarginLayoutParams params = new ViewGroup.MarginLayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); + params.setMargins(DeviceUtil.convertDpToPixel(30,this),DeviceUtil.convertDpToPixel(20,this),DeviceUtil.convertDpToPixel(30,this),0); + editText.setLayoutParams(params); + LinearLayout lin = new LinearLayout(this); + lin.addView(editText); + builder.setView(lin); + builder.setCancelable(false); + AlertDialog dialg = builder.create(); + dialg.setCanceledOnTouchOutside(false); + dialg.setCancelable(false); + dialg.setButton(AlertDialog.BUTTON_NEGATIVE, confirm, (dialog, which) -> { + confirmClick.onClick(dialg,editText,which); + }); + dialg.setButton(AlertDialog.BUTTON_POSITIVE,cancle,(dialog, which) -> { + cancleClick.onClick(dialg,editText,which); + }); + dialg.show(); + } + + protected interface InputDialogClick{ + void onClick(AlertDialog dialog,EditText editText,int whitch); + } + + /** * 获取文件保存路径 sdcard根目录/download/文件名称 * @param fileUrl * @return diff --git a/app/src/main/java/com/auto/lyric/base/model/BaseViewModel.java b/app/src/main/java/com/auto/lyric/base/model/BaseViewModel.java index 83badfd..90a0797 100644 --- a/app/src/main/java/com/auto/lyric/base/model/BaseViewModel.java +++ b/app/src/main/java/com/auto/lyric/base/model/BaseViewModel.java @@ -4,7 +4,16 @@ import com.auto.lyric.base.activities.BaseActivity; import com.auto.lyric.retrofit.AndroidScheduler; +import com.auto.lyric.retrofit.api.FieldData; import com.auto.lyric.retrofit.observable.HttpObserver; +import com.auto.lyric.util.DeviceIdUtils; +import com.auto.lyric.util.NetWorkUtils; +import com.auto.lyric.util.SHA1UTIL; +import com.google.gson.Gson; + +import java.util.Date; +import java.util.Map; +import java.util.UUID; import io.reactivex.Observable; import io.reactivex.schedulers.Schedulers; @@ -32,6 +41,19 @@ .subscribe(observer); } + public Map getApiFileds(String userId,String activeKey){ + FieldData data = new FieldData(); + data.userID = userId; + data.ip = NetWorkUtils.getNetIp(); + data.random = UUID.randomUUID().toString(); + data.timeStamp = new Date().getTime()/1000+""; + data.phoneID = DeviceIdUtils.getAndroidId(activity); + data.activeKey = activeKey; + String sign = String.format("%s%s%s%s%s%s",activeKey,data.ip,data.phoneID ,data.random,data.timeStamp,userId); + data.sign = SHA1UTIL.MD5(SHA1UTIL.getSHA(sign)); + Gson gson = new Gson(); + return gson.fromJson(gson.toJson(data), Map.class); + } } diff --git a/app/src/main/java/com/auto/lyric/retrofit/api/CollectApiCenter.java b/app/src/main/java/com/auto/lyric/retrofit/api/CollectApiCenter.java index 0be526c..04c4eba 100644 --- a/app/src/main/java/com/auto/lyric/retrofit/api/CollectApiCenter.java +++ b/app/src/main/java/com/auto/lyric/retrofit/api/CollectApiCenter.java @@ -3,8 +3,11 @@ import com.auto.lyric.data.ActiveResult; import com.auto.lyric.ui.collect.CollectListResult; +import java.util.Map; + import io.reactivex.Observable; import retrofit2.http.Field; +import retrofit2.http.FieldMap; import retrofit2.http.FormUrlEncoded; import retrofit2.http.POST; @@ -20,7 +23,7 @@ */ @FormUrlEncoded @POST("index.php?route=lrc/favorites/getFavoritesList") - Observable<CollectListResult> getCollectList(); + Observable<CollectListResult> getCollectList(@FieldMap Map<String,String> obj); /** * 歌词详情 @@ -43,37 +46,23 @@ * @return */ @FormUrlEncoded - @POST("index.php?route=lrc/favorites/delLrc") - Observable<CollectListResult> addLrcToCollect(@Field("lrc_title") String lrc_title,@Field("lrc_text") String lrc_text); + @POST("index.php?route=lrc/favorites/addLrc") + Observable<CollectListResult> addLrcToCollect(@Field("lrc_title") String lrc_title,@Field("lrc_text") String lrc_text,@FieldMap Map<String,String> obj); /** * 激活软件 - * @param activeKey - * @param ip - * @param random - * @param time - * @param userId - * @param sign * @return */ @FormUrlEncoded @POST("index.php?route=lrc/login_check") - Observable<ActiveResult> loginCheck(@Field("activeKey") String activeKey, @Field("ip") String ip,@Field("phoneID") String phoneID, @Field("random") String random, - @Field("timeStamp") long time, @Field("userID") String userId, @Field("sign") String sign); + Observable<ActiveResult> loginCheck(@FieldMap Map<String,String> obj); /** * 激活软件 - * @param activeKey - * @param ip - * @param random - * @param time - * @param userId - * @param sign * @return */ @FormUrlEncoded @POST("index.php?route=lrc/register") - Observable<ActiveResult> register(@Field("activeKey") String activeKey, @Field("ip") String ip,@Field("phoneID") String phoneID, @Field("random") String random, - @Field("timeStamp") long time, @Field("userID") int userId, @Field("sign") String sign); + Observable<ActiveResult> register(@FieldMap Map<String,String> obj); } diff --git a/app/src/main/java/com/auto/lyric/retrofit/api/FieldData.java b/app/src/main/java/com/auto/lyric/retrofit/api/FieldData.java new file mode 100644 index 0000000..eac499f --- /dev/null +++ b/app/src/main/java/com/auto/lyric/retrofit/api/FieldData.java @@ -0,0 +1,10 @@ +package com.auto.lyric.retrofit.api; + +/** + * 接口请求数据 + * Created by Runt (qingingrunt2010@qq.com) on 2022/6/4. + */ +public class FieldData { + public String activeKey, ip, phoneID, random, sign; + public String timeStamp , userID; +} diff --git a/app/src/main/java/com/auto/lyric/ui/collect/CollectActivity.java b/app/src/main/java/com/auto/lyric/ui/collect/CollectActivity.java index fb255a7..1aaba78 100644 --- a/app/src/main/java/com/auto/lyric/ui/collect/CollectActivity.java +++ b/app/src/main/java/com/auto/lyric/ui/collect/CollectActivity.java @@ -2,6 +2,7 @@ import com.auto.lyric.base.activities.BaseTitleBarActivity; import com.auto.lyric.databinding.ActivityCollectBinding; +import com.auto.lyric.retrofit.observable.LoadingHttpObserver; /** * Created by Runt (qingingrunt2010@qq.com) on 2022/5/29. @@ -11,6 +12,11 @@ @Override public void initViews() { + viewModel.getLrcList(new LoadingHttpObserver<CollectListResult>(this) { + @Override + public void onComplete(CollectListResult error) { + } + }); } } diff --git a/app/src/main/java/com/auto/lyric/ui/collect/CollectViewModel.java b/app/src/main/java/com/auto/lyric/ui/collect/CollectViewModel.java index 40d2382..c1e54c2 100644 --- a/app/src/main/java/com/auto/lyric/ui/collect/CollectViewModel.java +++ b/app/src/main/java/com/auto/lyric/ui/collect/CollectViewModel.java @@ -1,15 +1,34 @@ package com.auto.lyric.ui.collect; +import com.auto.lyric.base.activities.BaseActivity; import com.auto.lyric.base.model.BaseViewModel; +import com.auto.lyric.data.UserInfo; +import com.auto.lyric.retrofit.api.CollectApiCenter; import com.auto.lyric.retrofit.observable.LoadingHttpObserver; +import com.auto.lyric.retrofit.utils.RetrofitUtils; +import com.google.gson.Gson; /** * Created by Runt (qingingrunt2010@qq.com) on 2022/5/29. */ public class CollectViewModel extends BaseViewModel { - public void getLrcList(LoadingHttpObserver<CollectListResult> observer){ + CollectApiCenter apiCenter; + UserInfo userInfo; + public CollectViewModel(){ + apiCenter = RetrofitUtils.getInstance().getRetrofit(CollectApiCenter.class); + } + + @Override + public void onCreate(BaseActivity activity) { + super.onCreate(activity); + String key = activity.getStringProjectPrefrence("activeKey"); + userInfo = new Gson().fromJson(key,UserInfo.class); + } + + public void getLrcList(LoadingHttpObserver<CollectListResult> observer){ + httpObserverOn(apiCenter.getCollectList(getApiFileds(userInfo.userId,userInfo.activeKey)),observer); } } diff --git a/app/src/main/java/com/auto/lyric/vm/MainViewModel.java b/app/src/main/java/com/auto/lyric/vm/MainViewModel.java index e83144f..4e3ec42 100644 --- a/app/src/main/java/com/auto/lyric/vm/MainViewModel.java +++ b/app/src/main/java/com/auto/lyric/vm/MainViewModel.java @@ -5,12 +5,6 @@ import com.auto.lyric.retrofit.api.CollectApiCenter; import com.auto.lyric.retrofit.observable.LoadingHttpObserver; import com.auto.lyric.retrofit.utils.RetrofitUtils; -import com.auto.lyric.util.DeviceIdUtils; -import com.auto.lyric.util.NetWorkUtils; -import com.auto.lyric.util.SHA1UTIL; - -import java.util.Date; -import java.util.UUID; import io.reactivex.Observable; @@ -26,26 +20,25 @@ } public void checkActive(String userId,String activeKey,LoadingHttpObserver<ActiveResult> observer){ - String ip = NetWorkUtils.getNetIp(); - String random = UUID.randomUUID().toString(); - long time = new Date().getTime()/1000; - String deviceId = DeviceIdUtils.getAndroidId(activity); - String sign = String.format("%s%s%s%s%s%s",activeKey,ip,deviceId ,random,time,userId); - - Observable<ActiveResult> observable = apiCenter.loginCheck(activeKey, ip,deviceId, random, time, userId, SHA1UTIL.MD5(SHA1UTIL.getSHA(sign))); + Observable<ActiveResult> observable = apiCenter.loginCheck(getApiFileds(userId,activeKey)); httpObserverOn(observable,observer); } public void register(String activeKey,LoadingHttpObserver<ActiveResult> observer){ - String ip = NetWorkUtils.getNetIp(); - String random = UUID.randomUUID().toString(); - long time = new Date().getTime()/1000; - int userId = 0; - String deviceId = DeviceIdUtils.getAndroidId(activity); - String sign = String.format("%s%s%s%s%s%s",activeKey,ip,deviceId ,random,time,userId); - - Observable<ActiveResult> observable = apiCenter.register(activeKey, ip,deviceId, random, time, userId, SHA1UTIL.MD5(SHA1UTIL.getSHA(sign))); + Observable<ActiveResult> observable = apiCenter.register(getApiFileds("0",activeKey)); httpObserverOn(observable,observer); } + /** + * + * @param userId + * @param activeKey + * @param title 歌词标题 + * @param lrc 歌词内容 + * @param observer + */ + public void addToCollect(String userId,String activeKey,String title,String lrc,LoadingHttpObserver<ActiveResult> observer){ + httpObserverOn(apiCenter.addLrcToCollect(title,lrc,getApiFileds(userId,activeKey)),observer); + } + } diff --git a/app/src/main/res/layout/activity_collect.xml b/app/src/main/res/layout/activity_collect.xml index d1772ef..f1394a2 100644 --- a/app/src/main/res/layout/activity_collect.xml +++ b/app/src/main/res/layout/activity_collect.xml @@ -6,7 +6,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto"> <com.auto.lyric.widgets.TitleBarView - android:id="@+id/titlebar" + android:id="@+id/titleBar" android:layout_width="match_parent" android:layout_height="50dp" android:background="@color/black" @@ -21,7 +21,7 @@ <include layout="@layout/refresh_recycler" android:layout_width="match_parent" android:layout_height="0dp" - app:layout_constraintTop_toBottomOf="@id/titlebar" + app:layout_constraintTop_toBottomOf="@id/titleBar" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent"/> diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml index 40d9949..20a6728 100644 --- a/app/src/main/res/values-night/themes.xml +++ b/app/src/main/res/values-night/themes.xml @@ -1,6 +1,6 @@ <resources xmlns:tools="http://schemas.android.com/tools"> <!-- Base application theme. --> - <style name="Theme.AutoLyric" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> + <style name="Theme.AutoLyric" parent="Theme.AppCompat.DayNight.NoActionBar"> <!-- Primary brand color. --> <item name="colorPrimary">@color/white</item> <item name="colorPrimaryVariant">@color/color_gray</item> diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index f7a09d4..4ac838e 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -1,6 +1,6 @@ <resources xmlns:tools="http://schemas.android.com/tools"> <!-- Base application theme. --> - <style name="Theme.AutoLyric" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> + <style name="Theme.AutoLyric" parent="Theme.AppCompat.Light.NoActionBar"> <!-- Primary brand color. --> <item name="colorPrimary">@color/black</item> <item name="colorPrimaryVariant">@color/gray_normal</item> -- Gitblit v1.9.1