From 549a487148522fa4a459967cd6546e22a315ae52 Mon Sep 17 00:00:00 2001 From: Runt <qingingrunt2010@qq.com> Date: Mon, 26 Dec 2022 15:17:52 +0000 Subject: [PATCH] 上传歌词 --- app/src/main/java/com/auto/lyric/MainActivity.java | 46 ++++++++++++++- app/src/main/java/com/auto/lyric/base/model/BaseViewModel.java | 11 +++ app/src/main/java/com/auto/lyric/vm/MainViewModel.java | 17 +++++ app/src/main/res/layout/activity_main.xml | 1 app/src/main/java/com/auto/lyric/base/activities/BaseActivity.java | 52 +++++++++++++++++ app/build.gradle | 4 app/src/main/java/com/auto/lyric/retrofit/api/CollectApiCenter.java | 13 ++++ 7 files changed, 137 insertions(+), 7 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 947103f..6a19aa5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -7,7 +7,7 @@ defaultConfig { applicationId "com.auto.lyric" - minSdk 21 + minSdk 22 targetSdk 31 versionCode 1 versionName "1.0" @@ -47,7 +47,7 @@ dependencies { - implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.appcompat:appcompat:1.3.1' implementation 'com.google.android.material:material:1.3.0' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1' diff --git a/app/src/main/java/com/auto/lyric/MainActivity.java b/app/src/main/java/com/auto/lyric/MainActivity.java index 8bed626..ece5151 100644 --- a/app/src/main/java/com/auto/lyric/MainActivity.java +++ b/app/src/main/java/com/auto/lyric/MainActivity.java @@ -1,12 +1,17 @@ package com.auto.lyric; +import android.Manifest; import android.content.Intent; import android.net.Uri; import android.os.Build; +import android.os.Environment; import android.provider.Settings; import android.text.TextUtils; import android.util.Log; import android.widget.Toast; + +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; import com.auto.lyric.base.activities.BaseActivity; import com.auto.lyric.data.ActiveResult; @@ -21,11 +26,11 @@ import com.auto.lyric.vm.MainViewModel; import com.google.gson.Gson; +import java.io.File; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; -import java.util.Date; import java.util.regex.Pattern; public class MainActivity extends BaseActivity<ActivityMainBinding, MainViewModel> { @@ -33,9 +38,33 @@ UserInfo userInfo; @Override public void initViews() { + //选择文件 + ActivityResultLauncher fileLauncher = registerForActivityResult(new ActivityResultContracts.OpenDocument(), result -> { + Log.e(TAG,"result:"+result+" "+(result == null?"":result.getPath())); + if(result != null && result.getPath().indexOf(".lrc") == result.getPath().length()-4) { + Log.e(TAG,"getRootDirectory:"+" "+Environment.getExternalStorageDirectory()); + String path = Environment.getExternalStorageDirectory()+"/"+result.getPath().split(":")[1]; + + viewModel.uploadFile(userInfo.userId,userInfo.activeKey,new File(path)); + }else{ + showDialog("文件格式错误", "请选择标准的歌词文件", (dialog, which) -> { + dialog.dismiss(); + }); + } + }); + //单个权限申请 + ActivityResultLauncher singlePermission = registerForActivityResult(new ActivityResultContracts.RequestPermission(), result -> { + if(result){ + fileLauncher.launch(new String[]{"*/*"}); + }else{ + showDialog("权限申请", "没有文件读取权限", (dialog, which) -> { + dialog.dismiss(); + }); + } + }); Intent floatService = new Intent(getApplicationContext(), FloatingWindowService.class); String key = getStringProjectPrefrence("activeKey"); - userInfo = new Gson().fromJson(key,UserInfo.class); + /*userInfo = new Gson().fromJson(key,UserInfo.class); try { if(TextUtils.isEmpty(key) || TextUtils.isEmpty(userInfo.keyDateValid)|| new Date().getTime() > dateFormat.parse(userInfo.keyDateValid).getTime()){ @@ -60,8 +89,8 @@ } } catch (ParseException e) { e.printStackTrace(); - } - + }*/ + //确认 binding.button.setOnClickListener(v -> { if(binding.edit.getText().toString().trim().length() == 0){ @@ -112,7 +141,16 @@ //startService(floatService); } }); + //收藏 binding.collect.setOnClickListener(v -> addCollectDailog(userInfo.userId,userInfo.activeKey,binding.edit.getText().toString())); + //清空 + binding.clear.setOnClickListener(v -> binding.edit.setText("")); + //保存本地 + binding.save.setOnClickListener(v -> {}); + binding.txtLocal.setOnClickListener(v -> { + singlePermission.launch(Manifest.permission.READ_EXTERNAL_STORAGE);//读取文件权限 + }); + //收藏夹 binding.txtFavorite.setOnClickListener(v -> startActivity(new Intent(mContext, CollectActivity.class))); } 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 d4dfaff..4f072c1 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 @@ -3,6 +3,7 @@ import android.Manifest; import android.app.AlertDialog; import android.content.Context; +import android.content.DialogInterface; import android.content.pm.ActivityInfo; import android.os.Build; import android.os.Bundle; @@ -273,6 +274,12 @@ showToast(getString(msg)); } + public void showInputDialog(String title, String hint, InputDialogClick confirmClick){ + showInputDialog(title,hint,"确认",confirmClick); + } + public void showInputDialog(String title, String hint, String confirm,InputDialogClick confirmClick){ + showInputDialog(title,hint,confirm,"取消",confirmClick,null); + } /** * inputdialog * @param title 标题文本 @@ -302,7 +309,11 @@ confirmClick.onClick(dialg,editText,which); }); dialg.setButton(AlertDialog.BUTTON_POSITIVE,cancle,(dialog, which) -> { - cancleClick.onClick(dialg,editText,which); + if(cancleClick != null) { + cancleClick.onClick(dialg, editText, which); + }else{ + dialg.dismiss(); + } }); dialg.show(); } @@ -311,6 +322,45 @@ void onClick(AlertDialog dialog,EditText editText,int whitch); } + + public void showDialog(String title, String hint, DialogInterface.OnClickListener confirmClick){ + showDialog(title,hint,"确认",confirmClick); + } + public void showDialog(String title, String hint, String confirm,DialogInterface.OnClickListener confirmClick){ + showDialog(title,hint,confirm,"取消",confirmClick,null); + } + /** + * inputdialog + * @param title 标题文本 + * @param hint 提示文本 + * @param confirm 确认文本 + * @param cancle 取消文本 + * @param confirmClick 确认事件 + * @param cancleClick 取消事件 + * @return + */ + public void showDialog(String title, String hint, String confirm, String cancle, DialogInterface.OnClickListener confirmClick, DialogInterface.OnClickListener cancleClick){ + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle(title); + builder.setMessage(hint); + builder.setCancelable(false); + AlertDialog dialg = builder.create(); + dialg.setCanceledOnTouchOutside(false); + dialg.setCancelable(false); + dialg.setButton(AlertDialog.BUTTON_NEGATIVE, confirm, (dialog, which) -> { + confirmClick.onClick(dialg,which); + }); + dialg.setButton(AlertDialog.BUTTON_POSITIVE,cancle,(dialog, which) -> { + if(cancleClick != null) { + cancleClick.onClick(dialg, which); + }else{ + dialg.dismiss(); + } + }); + dialg.show(); + } + + /** * 获取文件保存路径 sdcard根目录/download/文件名称 * @param fileUrl 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 90a0797..a511ae5 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 @@ -12,11 +12,13 @@ import com.google.gson.Gson; import java.util.Date; +import java.util.HashMap; import java.util.Map; import java.util.UUID; import io.reactivex.Observable; import io.reactivex.schedulers.Schedulers; +import okhttp3.RequestBody; /** * Created by Administrator on 2021/11/11 0011. @@ -55,5 +57,14 @@ return gson.fromJson(gson.toJson(data), Map.class); } + public Map<String, RequestBody> getApiMultiFileds(String userId, String activeKey){ + Map<String,String> fileds = getApiFileds(userId,activeKey); + Map<String, RequestBody> multiMap = new HashMap<>(); + for(String key : fileds.keySet()){ + multiMap.put(key,RequestBody.create(fileds.get(key),null)); + } + return multiMap; + } + } 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 04c4eba..0c5f3d9 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 @@ -6,10 +6,15 @@ import java.util.Map; import io.reactivex.Observable; +import okhttp3.MultipartBody; +import okhttp3.RequestBody; import retrofit2.http.Field; import retrofit2.http.FieldMap; import retrofit2.http.FormUrlEncoded; +import retrofit2.http.Multipart; import retrofit2.http.POST; +import retrofit2.http.Part; +import retrofit2.http.PartMap; /** * Created by Runt (qingingrunt2010@qq.com) on 2022/5/29. @@ -50,6 +55,14 @@ Observable<CollectListResult> addLrcToCollect(@Field("lrc_title") String lrc_title,@Field("lrc_text") String lrc_text,@FieldMap Map<String,String> obj); /** + * 上传歌词 + * @return + */ + @Multipart + @POST("index.php?route=lrc/krc2lrc") + Observable<ActiveResult> uploadLrc(@Part MultipartBody.Part file, @PartMap() Map<String, RequestBody> obj); + + /** * 激活软件 * @return */ 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 4e3ec42..d646f38 100644 --- a/app/src/main/java/com/auto/lyric/vm/MainViewModel.java +++ b/app/src/main/java/com/auto/lyric/vm/MainViewModel.java @@ -6,7 +6,12 @@ import com.auto.lyric.retrofit.observable.LoadingHttpObserver; import com.auto.lyric.retrofit.utils.RetrofitUtils; +import java.io.File; + import io.reactivex.Observable; +import okhttp3.MediaType; +import okhttp3.MultipartBody; +import okhttp3.RequestBody; /** * Created by Runt (qingingrunt2010@qq.com) on 2022/3/20. @@ -29,6 +34,18 @@ httpObserverOn(observable,observer); } + public void uploadFile(String userId,String activeKey,File file){ + RequestBody body = RequestBody.create(MediaType.parse("text/plain; charset=utf-8"),file); + MultipartBody.Part part = MultipartBody.Part.createFormData("file", file.getName(), body); + httpObserverOn(apiCenter.uploadLrc(part, getApiMultiFileds(userId, activeKey)), new LoadingHttpObserver<ActiveResult>(activity) { + @Override + public void onComplete(ActiveResult error) { + + } + + }); + } + /** * * @param userId diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 0362135..865aef9 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -53,6 +53,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="保存" + android:visibility="invisible" android:layout_margin="10dp" app:layout_constraintRight_toLeftOf="@id/collect" app:layout_constraintLeft_toLeftOf="@id/edit" -- Gitblit v1.9.1