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