diff --git a/app/src/debug/java/com/gh/gamecenter/Injection.java b/app/src/debug/java/com/gh/gamecenter/Injection.java index 03e9563de1..5d334087dd 100644 --- a/app/src/debug/java/com/gh/gamecenter/Injection.java +++ b/app/src/debug/java/com/gh/gamecenter/Injection.java @@ -37,7 +37,7 @@ public class Injection { OkHttpClient.Builder builder = new OkHttpClient.Builder(); HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); - builder.addNetworkInterceptor(interceptor); +// builder.addNetworkInterceptor(interceptor); builder.addNetworkInterceptor(new StethoInterceptor()); return builder; } diff --git a/app/src/main/java/com/gh/common/util/CompressImageUtils.kt b/app/src/main/java/com/gh/common/util/CompressImageUtils.kt index dfb2eea574..be4c125c3b 100644 --- a/app/src/main/java/com/gh/common/util/CompressImageUtils.kt +++ b/app/src/main/java/com/gh/common/util/CompressImageUtils.kt @@ -3,6 +3,8 @@ package com.gh.common.util import android.graphics.Bitmap import android.graphics.BitmapFactory import android.graphics.Matrix +import com.gh.common.constant.Config +import com.gh.gamecenter.entity.SettingsEntity import com.halo.assistant.HaloApp import java.io.File import java.io.FileOutputStream @@ -15,8 +17,10 @@ import java.io.FileOutputStream */ object CompressImageUtils { - private const val compressLimit = 1280 + private const val compressLimitSize: Long = 50 * 1024 private const val defaultQuality = 90 + private const val defaultRatio = 2 + private const val defaultCompressBorder = 1280 /** * 压缩图片并保存到目标文件 @@ -26,7 +30,7 @@ object CompressImageUtils { @Throws(Exception::class) fun compressImageAndSaveToFile(imageFile: File, compressGif: Boolean): File { // 小于300K直接返回原图 - if (imageFile.length() < 50 * 1024) { + if (imageFile.length() < getImageSetting().processLimitSize) { return imageFile } @@ -50,7 +54,7 @@ object CompressImageUtils { fileOutputStream = FileOutputStream(cacheDir) // write the compressed bitmap at the destination specified by destinationPath. - decodeSampledBitmapFromFile(imageFile).compress(formatType, defaultQuality, fileOutputStream) + decodeSampledBitmapFromFile(imageFile).compress(formatType, getImageSetting().quality, fileOutputStream) return cacheDir } catch (e: Exception) { e.printStackTrace() @@ -95,9 +99,10 @@ object CompressImageUtils { val longSide = Math.max(height, width) //最长边 val shortSide = Math.min(height, width) //最短边 val scale = longSide.toFloat() / shortSide // 长短边比例 + val compressLimit = getImageSetting().size if (longSide > compressLimit && shortSide > compressLimit) { - if (scale > 2) { + if (scale > getImageSetting().ratio) { inSampleSize = if (shortSide / compressLimit == 0) 1 else shortSide / compressLimit compressType = 0 } else { @@ -106,7 +111,7 @@ object CompressImageUtils { } } else if (longSide > compressLimit && shortSide < compressLimit) { - if (scale <= 2) { + if (scale <= getImageSetting().ratio) { inSampleSize = if (longSide / compressLimit == 0) 1 else longSide / compressLimit compressType = 1 } @@ -129,4 +134,18 @@ object CompressImageUtils { } return scaledBitmap } + + fun getImageSetting(): SettingsEntity.Image { + var settings = Config.getSettings() + if (settings == null && settings?.image != null) { + return settings.image + } + settings = SettingsEntity() + val image = settings.Image() + image.processLimitSize = compressLimitSize + image.size = defaultCompressBorder + image.ratio = defaultRatio + image.quality = defaultQuality + return image + } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/common/util/UploadImageUtils.kt b/app/src/main/java/com/gh/common/util/UploadImageUtils.kt index 719c2158b0..bd773ae6b0 100644 --- a/app/src/main/java/com/gh/common/util/UploadImageUtils.kt +++ b/app/src/main/java/com/gh/common/util/UploadImageUtils.kt @@ -12,28 +12,21 @@ import io.reactivex.Single import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable import io.reactivex.schedulers.Schedulers -import okhttp3.MediaType import okhttp3.MultipartBody -import okhttp3.RequestBody import okhttp3.ResponseBody import org.json.JSONObject import java.io.File -import java.util.* -import kotlin.collections.ArrayList -import kotlin.collections.HashMap object UploadImageUtils { enum class UploadType { - community, + question, + answer, suggestion } - val boundary = UUID.randomUUID().toString().replace("-".toRegex(), "").substring(0, 16) - // 社区图片上传 后续统一其他 fun compressAndUploadImage(type: UploadType, imgPath: String, compressGif: Boolean, listener: OnUploadImageListener): Disposable { - UploadType.community.name return Single.just(imgPath) .subscribeOn(Schedulers.computation()) .flatMap { @@ -73,9 +66,18 @@ object UploadImageUtils { Observable.create(ObservableOnSubscribe> { val compressList = compressImageList(imgs, compressGif) + var listTotal = 0L // 总大小 + var listProgress = 0L // 已上传的大小 for (img in compressList) { - val requestFile = RequestBody.create(MediaType.parse("multipart/form-data;boundary=$boundary"), img) - val part = MultipartBody.Part.createFormData("Filedata", img.name, requestFile) + listTotal += img.length() + } + for (img in compressList) { + val requestBody = FileRequestBody(img, object : RetrofitCallback() { + override fun onProgress(total: Long, progress: Long) { + listener.onProgress(listTotal, listProgress + progress) + } + }) + val part = MultipartBody.Part.createFormData("Filedata", img.name, requestBody) RetrofitManager.getInstance(HaloApp.getInstance().application) .uploadApi.uploadImage(part, type.name) .subscribe(object : BiResponse() { @@ -97,6 +99,7 @@ object UploadImageUtils { it.onError(exception) } }) + listProgress += img.length() } it.onComplete() }) @@ -146,5 +149,6 @@ object UploadImageUtils { interface OnUploadImageListListener { fun onSuccess(imageUrl: Map) // key:sourceImage value:compressImage fun onError() // 全部上传失败时回调 + fun onProgress(total: Long, progress: Long) } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/CropImageActivity.java b/app/src/main/java/com/gh/gamecenter/CropImageActivity.java index 83f3f94d67..7ca89aaa40 100644 --- a/app/src/main/java/com/gh/gamecenter/CropImageActivity.java +++ b/app/src/main/java/com/gh/gamecenter/CropImageActivity.java @@ -10,20 +10,14 @@ import android.os.Handler; import android.os.Message; import android.preference.PreferenceManager; import android.support.annotation.NonNull; -import android.support.v4.content.ContextCompat; import android.text.TextUtils; -import android.util.TypedValue; -import android.view.View; -import android.view.ViewGroup.LayoutParams; +import android.view.MenuItem; import android.widget.ImageView; -import android.widget.RelativeLayout; -import android.widget.TextView; import com.gh.base.BaseActivity; import com.gh.common.constant.Config; import com.gh.common.util.BitmapUtils; import com.gh.common.util.DialogUtils; -import com.gh.common.util.DisplayUtils; import com.gh.common.util.EntranceUtils; import com.gh.common.view.CropImageCustom; import com.gh.gamecenter.manager.UserManager; @@ -90,130 +84,117 @@ public class CropImageActivity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setNavigationTitle(getString(R.string.title_crop_image)); + setToolbarMenu(R.menu.menu_positive); sp = PreferenceManager.getDefaultSharedPreferences(this); - mUserManager = UserManager.getInstance(); - RelativeLayout reuse_actionbar = (RelativeLayout) findViewById(R.id.reuse_actionbar); + } - TextView confirm = new TextView(this); - confirm.setText("确定"); - confirm.setTextColor(ContextCompat.getColor(this, R.color.title)); - confirm.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); - int padding = DisplayUtils.dip2px(getApplicationContext(), 10); - confirm.setPadding(padding, padding, padding, padding); - confirm.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - final Dialog dialog = DialogUtils.showWaitDialog(CropImageActivity.this, "上传中..."); - final String path = getCacheDir() + File.separator + System.currentTimeMillis() + ".jpg"; - Observable.create(new ObservableOnSubscribe() { - @Override - public void subscribe(ObservableEmitter emitter) { - emitter.onNext(mCropimageCustom.savePicture(path)); - emitter.onComplete(); - } - }).flatMap(new Function>() { - @Override - public Observable apply(Boolean status) { - if (status == null || !status) { - dialog.dismiss(); - handler.sendEmptyMessage(1); - return null; - } - return Observable.just(mUserManager.getToken()); - } - }).flatMap(new Function>() { - @Override - public Observable apply(String token) { - if (token != null) { - return Observable.just(FileUtils.uploadFile(Config.API_HOST + "images?type=icon", path, token)); - } + @Override + public boolean onMenuItemClick(MenuItem item) { + if (item.getItemId() == R.id.layout_menu_positive) { + final Dialog dialog = DialogUtils.showWaitDialog(CropImageActivity.this, "上传中..."); + final String path = getCacheDir() + File.separator + System.currentTimeMillis() + ".jpg"; + Observable.create(new ObservableOnSubscribe() { + @Override + public void subscribe(ObservableEmitter emitter) { + emitter.onNext(mCropimageCustom.savePicture(path)); + emitter.onComplete(); + } + }).flatMap(new Function>() { + @Override + public Observable apply(Boolean status) { + if (status == null || !status) { dialog.dismiss(); handler.sendEmptyMessage(1); return null; } - }).flatMap(new Function>() { - @Override - public Observable apply(JSONObject result) { - if (result != null) { - try { - if (result.getInt("statusCode") == 401) { - return Observable.just(FileUtils.uploadFile(Config.API_HOST + "images?type=icon", path,mUserManager.getToken())); - } - } catch (JSONException e) { - e.printStackTrace(); + return Observable.just(mUserManager.getToken()); + } + }).flatMap(new Function>() { + @Override + public Observable apply(String token) { + if (token != null) { + return Observable.just(FileUtils.uploadFile(Config.API_HOST + "images?type=icon", path, token)); + } + dialog.dismiss(); + handler.sendEmptyMessage(1); + return null; + } + }).flatMap(new Function>() { + @Override + public Observable apply(JSONObject result) { + if (result != null) { + try { + if (result.getInt("statusCode") == 401) { + return Observable.just(FileUtils.uploadFile(Config.API_HOST + "images?type=icon", path,mUserManager.getToken())); } - return Observable.just(result); + } catch (JSONException e) { + e.printStackTrace(); } - dialog.dismiss(); - handler.sendEmptyMessage(1); - return null; + return Observable.just(result); } - }) - .subscribeOn(Schedulers.io()) - .observeOn(Schedulers.io()) - .subscribe(new Consumer() { - @Override - public void accept(JSONObject result) { - if (result != null) { - try { - int statusCode = result.getInt("statusCode"); - if (statusCode == HttpURLConnection.HTTP_OK) { - handler.sendEmptyMessage(0); + dialog.dismiss(); + handler.sendEmptyMessage(1); + return null; + } + }) + .subscribeOn(Schedulers.io()) + .observeOn(Schedulers.io()) + .subscribe(new Consumer() { + @Override + public void accept(JSONObject result) { + if (result != null) { + try { + int statusCode = result.getInt("statusCode"); + if (statusCode == HttpURLConnection.HTTP_OK) { + handler.sendEmptyMessage(0); - String iconCount = sp.getString("updateIconCount", null); + String iconCount = sp.getString("updateIconCount", null); - long l = System.currentTimeMillis(); - SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"); - String time = format.format(new Date(l)); + long l = System.currentTimeMillis(); + SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"); + String time = format.format(new Date(l)); - JSONObject jsonObject = new JSONObject(); - jsonObject.put("time", time); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("time", time); - if (TextUtils.isEmpty(iconCount)) { - jsonObject.put("count", 1); + if (TextUtils.isEmpty(iconCount)) { + jsonObject.put("count", 1); + } else { + JSONObject json = new JSONObject(iconCount); + String lastTime = json.getString("time"); + if (lastTime.equals(time)) { + jsonObject.put("count", json.getInt("count") + 1); } else { - JSONObject json = new JSONObject(iconCount); - String lastTime = json.getString("time"); - if (lastTime.equals(time)) { - jsonObject.put("count", json.getInt("count") + 1); - } else { - jsonObject.put("count", 1); - } + jsonObject.put("count", 1); } - - sp.edit().putString("updateIconCount", jsonObject.toString()).apply(); - - Intent data = new Intent(); - data.putExtra(EntranceUtils.KEY_URL, result.getString("url")); - setResult(RESULT_OK, data); - finish(); - - } else if (statusCode == HttpURLConnection.HTTP_FORBIDDEN - && "too frequent".equals(result.getString("detail"))) { - handler.sendEmptyMessage(2); } - } catch (JSONException e) { - e.printStackTrace(); + + sp.edit().putString("updateIconCount", jsonObject.toString()).apply(); + + Intent data = new Intent(); + data.putExtra(EntranceUtils.KEY_URL, result.getString("url")); + setResult(RESULT_OK, data); + finish(); + + } else if (statusCode == HttpURLConnection.HTTP_FORBIDDEN + && "too frequent".equals(result.getString("detail"))) { + handler.sendEmptyMessage(2); } - } else { - handler.sendEmptyMessage(1); + } catch (JSONException e) { + e.printStackTrace(); } - dialog.dismiss(); + } else { + handler.sendEmptyMessage(1); } - }); - } - }); - RelativeLayout.LayoutParams rparams = new RelativeLayout.LayoutParams( - LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); - rparams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); - rparams.addRule(RelativeLayout.CENTER_VERTICAL); - confirm.setLayoutParams(rparams); - reuse_actionbar.addView(confirm); + dialog.dismiss(); + } + }); + } + return super.onMenuItemClick(item); } @Override diff --git a/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java b/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java index 3c25b2fd2b..f218ce05e3 100644 --- a/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java @@ -35,6 +35,7 @@ import com.gh.common.util.CheckLoginUtils; import com.gh.common.util.DialogUtils; import com.gh.common.util.DisplayUtils; import com.gh.common.util.EntranceUtils; +import com.gh.common.util.NetworkUtils; import com.gh.common.util.PackageUtils; import com.gh.common.util.PatternUtils; import com.gh.common.util.UploadImageUtils; @@ -68,6 +69,7 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.util.HashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import butterknife.BindView; @@ -122,11 +124,14 @@ public class SuggestionActivity extends BaseActivity implements SuggestTypeAdapt private Dialog selectGameDialog; private WaitingDialogFragment postDialog; + private SharedPreferences sp; + private String[] arrType; private int curType = -1; - private SharedPreferences sp; + private boolean mAgreePostPic; + @NonNull public static Intent getIntent(Context context, int suggestType) { @@ -480,6 +485,16 @@ public class SuggestionActivity extends BaseActivity implements SuggestTypeAdapt private void postPic(final String email) { UploadImageUtils.INSTANCE.compressAndUploadImageList(UploadImageUtils.UploadType.suggestion , mAdapter.getFileList(), true, new UploadImageUtils.OnUploadImageListListener() { + @Override + public void onProgress(long total, long progress) { + float percent = 100 * (progress / (float) total); + if (percent >= 100) percent = 99.9F; + String format = String.format(Locale.CHINA, "%.1f", percent); + if (postDialog != null) { + postDialog.uploadWaitingHint("图片上传中" + format + "%"); + } + } + @Override public void onSuccess(@NotNull Map imageUrl) { Utils.log("意见反馈:图片上传完成"); @@ -659,6 +674,14 @@ public class SuggestionActivity extends BaseActivity implements SuggestTypeAdapt @Override public void onListClick(View view, int position, T data) { + if (!mAgreePostPic && !NetworkUtils.isWifiConnected(this)) { + mAgreePostPic = true; + DialogUtils.showAlertDialog(this, + "警告", + "当前使用移动网络,上传图片会消耗手机流量", + "我知道了", "", null, null); + return; + } List picList = (List) data; if (position == mAdapter.getItemCount() - 1 && picList.size() < 5) { Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); diff --git a/app/src/main/java/com/gh/gamecenter/entity/SettingsEntity.java b/app/src/main/java/com/gh/gamecenter/entity/SettingsEntity.java index 763db7dbcb..8b95c5f2ca 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/SettingsEntity.java +++ b/app/src/main/java/com/gh/gamecenter/entity/SettingsEntity.java @@ -18,6 +18,8 @@ public class SettingsEntity { private CommunityEntity community; + private Image image; + public List getDownload() { return download; } @@ -50,6 +52,14 @@ public class SettingsEntity { this.community = community; } + public Image getImage() { + return image; + } + + public void setImage(Image image) { + this.image = image; + } + public class Download { private String game; @@ -195,4 +205,112 @@ public class SettingsEntity { } } + public class Image { + @SerializedName("upload_limit_size") + private long uploadLimitSize; + + @SerializedName("process_limit_size") + private long processLimitSize; + + private int size; + + private int quality; + + private int ratio; + + private Oss oss; + + public long getUploadLimitSize() { + return uploadLimitSize; + } + + public void setUploadLimitSize(long uploadLimitSize) { + this.uploadLimitSize = uploadLimitSize; + } + + public long getProcessLimitSize() { + return processLimitSize; + } + + public void setProcessLimitSize(long processLimitSize) { + this.processLimitSize = processLimitSize; + } + + public int getSize() { + return size; + } + + public void setSize(int size) { + this.size = size; + } + + public int getQuality() { + return quality; + } + + public void setQuality(int quality) { + this.quality = quality; + } + + public int getRatio() { + return ratio; + } + + public void setRatio(int ratio) { + this.ratio = ratio; + } + + public Oss getOss() { + return oss; + } + + public void setOss(Oss oss) { + this.oss = oss; + } + } + + private class Oss { + private String jpeg; + + private String gif; + + @SerializedName("gif_thumb") + private String gitThumb; + + @SerializedName("gif_watermark") + private String gifWaterMark; + + public String getJpeg() { + return jpeg; + } + + public void setJpeg(String jpeg) { + this.jpeg = jpeg; + } + + public String getGif() { + return gif; + } + + public void setGif(String gif) { + this.gif = gif; + } + + public String getGitThumb() { + return gitThumb; + } + + public void setGitThumb(String gitThumb) { + this.gitThumb = gitThumb; + } + + public String getGifWaterMark() { + return gifWaterMark; + } + + public void setGifWaterMark(String gifWaterMark) { + this.gifWaterMark = gifWaterMark; + } + } + } diff --git a/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditFragment.java b/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditFragment.java index cea79d7c56..47fc5b7dbd 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditFragment.java +++ b/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditFragment.java @@ -25,6 +25,7 @@ import com.gh.common.util.ClickUtils; import com.gh.common.util.DialogUtils; import com.gh.common.util.EntranceUtils; import com.gh.common.util.LoginUtils; +import com.gh.common.util.NetworkUtils; import com.gh.common.util.UploadImageUtils; import com.gh.common.view.RichEditor; import com.gh.gamecenter.R; @@ -81,6 +82,8 @@ public class AnswerEditFragment extends NormalFragment { private static final int MIN_ANSWER_TEXT_LENGTH = 6; private static final int MAX_ANSWER_TEXT_LENGTH = 10000; + private boolean mAgreePostPic; + private Map mMapImg = new HashMap<>(); private WaitingDialogFragment postDialog; @@ -219,7 +222,7 @@ public class AnswerEditFragment extends NormalFragment { } }); - mUploadImageDisposable = UploadImageUtils.INSTANCE.compressAndUploadImage(UploadImageUtils.UploadType.community + mUploadImageDisposable = UploadImageUtils.INSTANCE.compressAndUploadImage(UploadImageUtils.UploadType.answer , picturePath, false, new UploadImageUtils.OnUploadImageListener() { @Override @@ -520,6 +523,16 @@ public class AnswerEditFragment extends NormalFragment { @OnClick({R.id.answer_edit_img_icon}) public void onClick(View view) { if (view.getId() == R.id.answer_edit_img_icon) { + + if (!mAgreePostPic && !NetworkUtils.isWifiConnected(getContext())) { + mAgreePostPic = true; + DialogUtils.showAlertDialog(getContext(), + "警告", + "当前使用移动网络,上传图片会消耗手机流量", + "我知道了", "", null, null); + return; + } + if (mMapImg.size() >= 50) { toast(R.string.answer_edit_max_img_hint); return; diff --git a/app/src/main/java/com/gh/gamecenter/qa/questions/edit/QuestionEditViewModel.kt b/app/src/main/java/com/gh/gamecenter/qa/questions/edit/QuestionEditViewModel.kt index 224251e67d..408e1ee383 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/questions/edit/QuestionEditViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/questions/edit/QuestionEditViewModel.kt @@ -184,7 +184,7 @@ class QuestionEditViewModel(application: Application) : AndroidViewModel(applica } processDialog.postValue(WaitingDialogFragment.WaitingDialogData("上传中...", true)) - uploadImageSubscription = UploadImageUtils.compressAndUploadImage(UploadImageUtils.UploadType.community + uploadImageSubscription = UploadImageUtils.compressAndUploadImage(UploadImageUtils.UploadType.question , picPath, true, object : UploadImageUtils.OnUploadImageListener { override fun onProgress(total: Long, progress: Long) { var percent = 100 * (progress / total.toFloat()) diff --git a/app/src/main/java/com/gh/gamecenter/qa/questions/edit/pic/QuestionsEditPicAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/questions/edit/pic/QuestionsEditPicAdapter.kt index cb894e5eed..849fb45b23 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/questions/edit/pic/QuestionsEditPicAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/questions/edit/pic/QuestionsEditPicAdapter.kt @@ -53,9 +53,8 @@ class QuestionsEditPicAdapter(context: Context, viewModel: QuestionEditViewModel mAgreePostPic = true DialogUtils.showAlertDialog(mContext, "警告", - "当前使用移动网络,上传图片会消耗流量,确定上传吗?", - "继续上传", "取消", - { addPic(mContext as Activity) }, null) + "当前使用移动网络,上传图片会消耗手机流量", + "我知道了", "", null, null) } } } diff --git a/app/src/main/java/com/gh/gamecenter/retrofit/FileRequestBody.java b/app/src/main/java/com/gh/gamecenter/retrofit/FileRequestBody.java index 0cf2021c8a..e3651c5375 100644 --- a/app/src/main/java/com/gh/gamecenter/retrofit/FileRequestBody.java +++ b/app/src/main/java/com/gh/gamecenter/retrofit/FileRequestBody.java @@ -3,11 +3,10 @@ package com.gh.gamecenter.retrofit; import android.os.Handler; import android.os.Looper; -import com.gh.common.util.UploadImageUtils; - import java.io.File; import java.io.FileInputStream; import java.io.IOException; +import java.util.UUID; import okhttp3.MediaType; import okhttp3.RequestBody; @@ -17,10 +16,10 @@ public class FileRequestBody extends RequestBody { private RetrofitCallback callback; - private int DEFAULT_BUFFER_SIZE = 1024 * 8; - private File mFile; + private int DEFAULT_BUFFER_SIZE = 1024 * 8; + public FileRequestBody(File file, RetrofitCallback callback) { super(); @@ -35,7 +34,7 @@ public class FileRequestBody extends RequestBody { @Override public MediaType contentType() { - return MediaType.parse("multipart/form-data;boundary=" + UploadImageUtils.INSTANCE.getBoundary()); + return MediaType.parse("multipart/form-data;boundary=" + getBoundary()); } // 注意 addNetworkInterceptor ->HttpLoggingInterceptor 会调用两遍 @@ -62,6 +61,10 @@ public class FileRequestBody extends RequestBody { } } + private String getBoundary() { + return UUID.randomUUID().toString().replaceAll("-", "").substring(0, 16); + } + private class ProgressUpdater implements Runnable { private long mUploaded; private long mTotal; diff --git a/app/src/main/java/com/halo/assistant/fragment/user/SelectPortraitFragment.java b/app/src/main/java/com/halo/assistant/fragment/user/SelectPortraitFragment.java index 20bc5b7503..cf1aeecffe 100644 --- a/app/src/main/java/com/halo/assistant/fragment/user/SelectPortraitFragment.java +++ b/app/src/main/java/com/halo/assistant/fragment/user/SelectPortraitFragment.java @@ -16,14 +16,15 @@ import android.view.View; import com.gh.common.util.DialogUtils; import com.gh.common.util.EntranceUtils; +import com.gh.common.util.NetworkUtils; import com.gh.common.util.RandomUtils; import com.gh.common.util.UserIconUtils; import com.gh.gamecenter.CropImageActivity; import com.gh.gamecenter.R; import com.gh.gamecenter.entity.UserInfoEntity; +import com.gh.gamecenter.normal.NormalFragment; import com.gh.gamecenter.user.ApiResponse; import com.gh.gamecenter.user.UserViewModel; -import com.gh.gamecenter.normal.NormalFragment; import com.lightgame.utils.Utils; import org.json.JSONException; @@ -51,6 +52,8 @@ public class SelectPortraitFragment extends NormalFragment { private SharedPreferences mSharedPreferences; + private boolean mAgreePostPic; + @Override protected int getLayoutId() { return R.layout.fragment_select_portrait; @@ -149,7 +152,14 @@ public class SelectPortraitFragment extends NormalFragment { postUserIocn(8); break; case R.id.skip_media_store: - + if (!mAgreePostPic && !NetworkUtils.isWifiConnected(getContext())) { + mAgreePostPic = true; + DialogUtils.showAlertDialog(getContext(), + "警告", + "当前使用移动网络,上传图片会消耗手机流量", + "我知道了", "", null, null); + break; + } String iconCount = mSharedPreferences.getString("updateIconCount", null); if (!TextUtils.isEmpty(iconCount)) { long l = System.currentTimeMillis(); diff --git a/app/src/main/res/layout/activity_cropimage.xml b/app/src/main/res/layout/activity_cropimage.xml index 9882fa99a7..72b296203e 100644 --- a/app/src/main/res/layout/activity_cropimage.xml +++ b/app/src/main/res/layout/activity_cropimage.xml @@ -5,7 +5,7 @@ android:background = "@android:color/black" android:orientation = "vertical" > - + + + + + + diff --git a/app/src/main/res/menu/menu_positive.xml b/app/src/main/res/menu/menu_positive.xml new file mode 100644 index 0000000000..65eb9ae281 --- /dev/null +++ b/app/src/main/res/menu/menu_positive.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file