diff --git a/app/src/main/java/com/gh/gamecenter/CleanApkActivity.java b/app/src/main/java/com/gh/gamecenter/CleanApkActivity.java index a560c38591..60b6aa7f17 100644 --- a/app/src/main/java/com/gh/gamecenter/CleanApkActivity.java +++ b/app/src/main/java/com/gh/gamecenter/CleanApkActivity.java @@ -27,4 +27,11 @@ public class CleanApkActivity extends ToolBarActivity { return getTargetIntent(context, CleanApkActivity.class, ApkCleanerFragment.class, bundle); } + @NonNull + public static Intent getIntent(Context context, Boolean isChooseApk, String platformRequestsId) { + Bundle bundle = new Bundle(); + bundle.putBoolean(EntranceConsts.KEY_IS_CHOOSE_APK, isChooseApk); + bundle.putString(EntranceConsts.KEY_PLATFORM_REQUESTS_ID, platformRequestsId); + return getTargetIntent(context, CleanApkActivity.class, ApkCleanerFragment.class, bundle); + } } diff --git a/app/src/main/java/com/gh/gamecenter/adapter/CleanApkAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/CleanApkAdapter.java index 5e8c922082..725861cffd 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/CleanApkAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/CleanApkAdapter.java @@ -131,6 +131,13 @@ public class CleanApkAdapter extends BaseRecyclerAdapter apkEntity.setGameSize(file.length()); apkEntity.setLastUpdateTime(file.lastModified()); apkEntity.setPackageName(PackageUtils.getPackageNameByPath(mContext, apk_path)); + apkEntity.setVersionCode(packageInfo.versionCode); + if (apkEntity.getGamePath() != null && apkEntity.getGamePath().length() > 0) { + int dot = apkEntity.getGamePath().lastIndexOf('.'); + if ((dot > -1) && (dot < apkEntity.getGamePath().length() - 1)) { + apkEntity.setFormat(apkEntity.getGamePath().substring(dot + 1)); + } + } /**安装处理类型*/ /** 得到包名 */ diff --git a/app/src/main/java/com/gh/gamecenter/entity/InstallGameEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/InstallGameEntity.kt index d26d67325c..49f5dc4f79 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/InstallGameEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/InstallGameEntity.kt @@ -25,4 +25,11 @@ class InstallGameEntity { var installStatus: Int = 0 var packageName: String? = null + + var format: String? = null + + var versionCode: Int = 0 + + // 求版本id + var platformRequestsId: String = "" } diff --git a/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java b/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java index 65420c0d5d..ad25478be3 100644 --- a/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java +++ b/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java @@ -3543,4 +3543,10 @@ public interface ApiService { */ @POST("videos/{video_id}/comments/{comment_id}:unset-top") Observable postVideoCommentUnTop(@Path("video_id") String videoId, @Path("comment_id") String commentId); + + /** + * 求版本上传apk后回调 + */ + @POST("games/platform_requests/{platform_requests_id}/apk") + Observable postPlatformRequestApk(@Path("platform_requests_id") String platformRequestsId, @Body RequestBody body); } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/suggest/SuggestSelectGameAdapter.java b/app/src/main/java/com/gh/gamecenter/suggest/SuggestSelectGameAdapter.java index fe1ff43e13..e0aa7ae5d8 100644 --- a/app/src/main/java/com/gh/gamecenter/suggest/SuggestSelectGameAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/suggest/SuggestSelectGameAdapter.java @@ -38,6 +38,8 @@ public class SuggestSelectGameAdapter extends BaseRecyclerAdapter(); + + initData(); + } + private void initData() { Observable .create(emitter -> { @@ -75,6 +88,13 @@ public class SuggestSelectGameAdapter extends BaseRecyclerAdapter 0) { + int dot = installGameEntity.getGamePath().lastIndexOf('.'); + if ((dot > -1) && (dot < installGameEntity.getGamePath().length() - 1)) { + installGameEntity.setFormat(installGameEntity.getGamePath().substring(dot + 1)); + } + } File file = new File(installedPackage.applicationInfo.sourceDir); installGameEntity.setGameSize(file.length()); @@ -108,6 +128,9 @@ public class SuggestSelectGameAdapter extends BaseRecyclerAdapter(R.id.dialog_suggest_game_rv) val back = view.findViewById(R.id.dialog_suggest_game_back) @@ -256,7 +256,7 @@ class VoteAdapter(context: Context, private val fragment: VoteFragment, private val manualBtn = view.findViewById(R.id.dialog_suggest_manual) val titleTv = view.findViewById(R.id.titleTv) recyclerView.layoutManager = GridLayoutManager(mContext, 4) - recyclerView.adapter = SuggestSelectGameAdapter(fragment, pb) + recyclerView.adapter = SuggestSelectGameAdapter(fragment, pb, id) titleTv.text = "请选择你要上传的游戏" manualBtn.text = "从设备上选择" @@ -274,7 +274,7 @@ class VoteAdapter(context: Context, private val fragment: VoteFragment, private } manualBtn.setOnClickListener { MtaHelper.onEvent("游戏上传", "安装包", "从设备上选择") - val intent = CleanApkActivity.getIntent(mContext, true) + val intent = CleanApkActivity.getIntent(mContext, true, id) fragment.startActivityForResult(intent, GameUploadFragment.CHOOSE_LOCAL_APK) } } diff --git a/app/src/main/java/com/gh/gamecenter/vote/VoteFragment.kt b/app/src/main/java/com/gh/gamecenter/vote/VoteFragment.kt index eecb66cd94..bb24156199 100644 --- a/app/src/main/java/com/gh/gamecenter/vote/VoteFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/vote/VoteFragment.kt @@ -76,6 +76,19 @@ class VoteFragment: ListFragment() { initSearchBar() } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + mListViewModel.uploadSuccess.observe(viewLifecycleOwner) { + if (it) { + mUploadDialog.updateProgress(360) // 上传完APK就到100% + mUploadDialog.dismiss() + toast("上传成功,正在加急制作中~") + } else { + mUploadDialog.uploadFail() + } + } + } + private fun initAd() { val ad = AdHelper.getAd(AdHelper.LOCATION_GAME_REQUEST_VERSION) if (ad != null) { @@ -129,7 +142,7 @@ class VoteFragment: ListFragment() { } mUploadDialog.onClickListener = getUploadClickListener(obj) mUploadDialog.show(childFragmentManager, "upload") - uploadApk(obj.gamePath ?: "") + uploadApk(obj) } } @@ -147,10 +160,9 @@ class VoteFragment: ListFragment() { "游戏上传中,确定要退出上传吗?", "不了", "确定", { mUploadDialog.isDisable = false if (mApkUrl.isEmpty()) { - uploadApk(entity.gamePath ?: "") + uploadApk(entity) } else { - mUploadDialog.dismiss() - toast("上传成功,正在加急制作中~") + mListViewModel.postApkInfo(mApkUrl, entity) } }, { mUploadDialog.dismiss() @@ -168,25 +180,25 @@ class VoteFragment: ListFragment() { } //上传apk - private fun uploadApk(apkPath: String) { - // 假进度,30秒渐增到100%,若30秒内已经上传完APK,则不再渐增,立刻到100% + private fun uploadApk(installGameEntity: InstallGameEntity) { + val path = installGameEntity.gamePath ?: "" + // 假进度,30秒渐增到90%,若30秒内已经上传完APK,则不再渐增,立刻到95% mUploadProgressDisposable = countDownTimer(30) { finish, time -> if (finish) { - mUploadDialog.updateProgress(360) //即100% + mUploadDialog.updateProgress(342) //即95% } else { val progress = (30 - time.toInt()) * 324 / 30 mUploadDialog.updateProgress(progress) } } - mUploadFileDisposable = OssUploadUtils.uploadFile(apkPath, OssUploadUtils.UploadType.GAME, object : OssUploadUtils.OnUploadFileListener { + mUploadFileDisposable = OssUploadUtils.uploadFile(path, OssUploadUtils.UploadType.GAME, object : OssUploadUtils.OnUploadFileListener { override fun onSuccess(url: String) { mApkUrl = url mUploadProgressDisposable?.dispose() mUploadFileDisposable?.dispose() - mUploadDialog.updateProgress(360) // 上传完APK就到100% - mUploadDialog.dismiss() - toast("上传成功,正在加急制作中~") + mUploadDialog.updateProgress(342) //即95% + mListViewModel.postApkInfo(mApkUrl, installGameEntity) } override fun onError(e: Throwable?) { @@ -202,6 +214,9 @@ class VoteFragment: ListFragment() { val packageName = data.getStringExtra(EntranceConsts.KEY_PACKAGENAME) ?: "" val gamePath = data.getStringExtra(EntranceConsts.KEY_PATH) ?: "" val version = PackageUtils.getVersionNameByPackageName(packageName) + val versionCode = data.getIntExtra(EntranceConsts.KEY_VERSION_CODE, 0) + val format = data.getStringExtra(EntranceConsts.KEY_FORMAT) ?: "" + val id = data.getStringExtra(EntranceConsts.KEY_PLATFORM_REQUESTS_ID) ?: "" val length = File(gamePath).length() if (length > 5 * 1024 * 1024 * 1024) { ToastUtils.showToast(getString(R.string.apk_max_size_hint, 5)) @@ -212,6 +227,9 @@ class VoteFragment: ListFragment() { this.gameSize = length this.gamePath = gamePath this.gameVersion = version + this.versionCode = versionCode + this.format = format + this.platformRequestsId = id }) } } diff --git a/app/src/main/java/com/gh/gamecenter/vote/VoteViewModel.kt b/app/src/main/java/com/gh/gamecenter/vote/VoteViewModel.kt index 3bd04b667f..ee9e9f49d0 100644 --- a/app/src/main/java/com/gh/gamecenter/vote/VoteViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/vote/VoteViewModel.kt @@ -1,17 +1,18 @@ package com.gh.gamecenter.vote import android.app.Application +import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider -import com.gh.common.util.DialogUtils -import com.gh.gamecenter.R import com.gh.gamecenter.baselist.ListViewModel import com.gh.gamecenter.baselist.LoadType +import com.gh.gamecenter.common.retrofit.ApiResponse import com.gh.gamecenter.common.retrofit.Response +import com.gh.gamecenter.core.utils.GsonUtils +import com.gh.gamecenter.entity.InstallGameEntity import com.gh.gamecenter.entity.VersionVoteEntity import com.gh.gamecenter.retrofit.RetrofitManager import com.halo.assistant.HaloApp -import com.lightgame.utils.Utils import io.reactivex.Observable import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.schedulers.Schedulers @@ -21,12 +22,12 @@ import okhttp3.ResponseBody import org.json.JSONException import org.json.JSONObject import retrofit2.HttpException -import java.util.* class VoteViewModel(application: Application, private val mGameId: String = "") : ListViewModel(application) { var mKeyword = "" + val uploadSuccess = MutableLiveData() override fun mergeResultLiveData() { mResultLiveData.addSource(mListLiveData) { list -> @@ -37,6 +38,35 @@ class VoteViewModel(application: Application, private val mGameId: String = "") override fun provideDataObservable(page: Int): Observable> = RetrofitManager.getInstance().api.getVersionVote(mGameId, page, mKeyword) + fun postApkInfo(url: String, installGameEntity: InstallGameEntity) { + val requestMap = HashMap() + requestMap["url"] = url + requestMap["package"] = installGameEntity.packageName.toString() + requestMap["format"] = installGameEntity.format ?: "" + requestMap["size_code"] = installGameEntity.gameSize.toInt() + requestMap["version"] = installGameEntity.gameVersion ?: "" + requestMap["version_code"] = installGameEntity.versionCode + + val body = RequestBody.create( + MediaType.parse("application/json"), + GsonUtils.toJson(requestMap) + ) + RetrofitManager.getInstance().api.postPlatformRequestApk(installGameEntity.platformRequestsId, body) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(object : Response() { + override fun onResponse(response: ResponseBody?) { + super.onResponse(response) + uploadSuccess.postValue(true) + } + + override fun onApiFailure(e: ApiResponse?) { + super.onApiFailure(e) + uploadSuccess.postValue(false) + } + }) + } + fun postVersionVote( name: String, isNewVote: Boolean, diff --git a/app/src/main/java/com/halo/assistant/fragment/ApkCleanerFragment.java b/app/src/main/java/com/halo/assistant/fragment/ApkCleanerFragment.java index 2a84552216..512baacf6d 100644 --- a/app/src/main/java/com/halo/assistant/fragment/ApkCleanerFragment.java +++ b/app/src/main/java/com/halo/assistant/fragment/ApkCleanerFragment.java @@ -54,6 +54,7 @@ public class ApkCleanerFragment extends ToolbarFragment implements CleanApkAdapt private CleanApkAdapter mAdapter; private boolean isChooseApk = false; + private String platformRequestsId; @Override protected int getLayoutId() { @@ -79,6 +80,7 @@ public class ApkCleanerFragment extends ToolbarFragment implements CleanApkAdapt mNodataSkipBtn.setOnClickListener(this); isChooseApk = requireArguments().getBoolean(EntranceConsts.KEY_IS_CHOOSE_APK, false); + platformRequestsId = requireArguments().getString(EntranceConsts.KEY_PLATFORM_REQUESTS_ID, ""); setNavigationTitle(isChooseApk ? getString(R.string.title_choose_apk) : getString(R.string.title_clean_apk)); mNodataSkipLl.setVisibility(View.GONE); @@ -155,6 +157,9 @@ public class ApkCleanerFragment extends ToolbarFragment implements CleanApkAdapt Intent intent = new Intent(); intent.putExtra(EntranceConsts.KEY_PACKAGENAME, installGameEntity.getPackageName()); intent.putExtra(EntranceConsts.KEY_PATH, installGameEntity.getGamePath()); + intent.putExtra(EntranceConsts.KEY_FORMAT, installGameEntity.getFormat()); + intent.putExtra(EntranceConsts.KEY_VERSION_CODE, installGameEntity.getVersionCode()); + intent.putExtra(EntranceConsts.KEY_PLATFORM_REQUESTS_ID, platformRequestsId); requireActivity().setResult(Activity.RESULT_OK, intent); requireActivity().finish(); } diff --git a/module_common/src/main/java/com/gh/gamecenter/common/constant/EntranceConsts.java b/module_common/src/main/java/com/gh/gamecenter/common/constant/EntranceConsts.java index 2b607b8691..d9142aac8b 100644 --- a/module_common/src/main/java/com/gh/gamecenter/common/constant/EntranceConsts.java +++ b/module_common/src/main/java/com/gh/gamecenter/common/constant/EntranceConsts.java @@ -246,4 +246,7 @@ public class EntranceConsts { public static final String KET_TYPE = "KET_TYPE"; public static final String KET_SUMMARY = "KET_SUMMARY"; public static final String KEY_ACTIVITY_ID = "activity_id"; + public static final String KEY_FORMAT = "format"; + public static final String KEY_VERSION_CODE = "version_code"; + public static final String KEY_PLATFORM_REQUESTS_ID = "platform_requests_id"; }