Commit 0f54a19c by mReturn

收发货&大视频处理&视频录制

parent be9eb294
Showing with 1628 additions and 274 deletions
......@@ -23,7 +23,7 @@ android {
}
}
ndk {
abiFilters 'x86', 'armeabi-v7a', 'arm64-v8a','armeabi'
abiFilters 'x86', 'armeabi-v7a','armeabi'
}
}
......
......@@ -296,9 +296,9 @@ public static final int *;
-keep public class cn.jzvd.demo.CustomMedia.JZMediaIjk {*; }
-keep public class cn.jzvd.demo.CustomMedia.JZMediaSystemAssertFolder {*; }
-keep class tv.danmaku.ijk.media.player.** {*; }
-dontwarn tv.danmaku.ijk.media.player.*
-keep interface tv.danmaku.ijk.media.player.** { *; }
#ijkplayer
-keep class tv.danmaku.ijk.media.** {*;}
......
......@@ -486,15 +486,11 @@ public class MainActivity extends BaseActivity<MainPresenter, ActivityMainBindin
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (!Jzvd.backPress()) {
// 不退出程序,进入后台
moveTaskToBack(true);
return true;
}
public void onBackPressed() {
if (!Jzvd.backPress()) {
// 不退出程序,进入后台
moveTaskToBack(true);
}
return super.onKeyDown(keyCode, event);
}
@Subscribe(threadMode = ThreadMode.MAIN)
......
......@@ -24,6 +24,7 @@ import io.reactivex.disposables.Disposable;
import okhttp3.MediaType;
import okhttp3.RequestBody;
/**
* Created by luofan
* on 2018/7/17.
......@@ -57,6 +58,9 @@ public class LocationService extends Service {
jsonObject.put("siteId", mSiteId);
jsonObject.put("longitude", location.getLongitude());
jsonObject.put("latitude", location.getLatitude());
jsonObject.put("provinceName", location.getProvince());
jsonObject.put("cityName", location.getCity());
jsonObject.put("districtName", location.getDistrict());
} catch (JSONException e) {
e.printStackTrace();
}
......
......@@ -72,6 +72,10 @@ dependencies {
api project(':pickerview')
// api 'cn.jzvd:jiaozivideoplayer:7.2.4'
api 'cn.jzvd:jiaozivideoplayer:7.1.0'
// api 'cn.jzvd:jiaozivideoplayer:7.3.0'
// api 'com.google.android.exoplayer:exoplayer:2.9.6'
api 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'
api 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.4'
api 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.35'
api 'com.badoo.mobile:android-weak-handler:1.1'
api 'com.youth.banner:banner:1.4.10'
......
......@@ -76,7 +76,7 @@ public class Api {
.setDateFormat("yyyy-MM-dd'T'HH:mm:ss")
.create();
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(m -> LogUtils.i("request", m));
httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.HEADERS);
TokenInterceptord tokenInterceptord = new TokenInterceptord();
OkHttpClient.Builder build = new OkHttpClient.Builder()
.addInterceptor(httpLoggingInterceptor)
......
package com.dayu.base.api;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import io.reactivex.Observable;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
/**
* Created by luofan
......@@ -19,6 +23,7 @@ public class BaseApiFactory {
public static Observable<List<String>> uploadPhoto(MultipartBody.Part part) {
return Api.getService(APIService.class).uploadPhoto(part).compose(Api.applySchedulers());
}
public static Observable<String> uploadVideo(MultipartBody.Part part) {
return Api.getService(APIService.class).uploadVideo(part).compose(Api.applySchedulers());
}
......@@ -28,4 +33,23 @@ public class BaseApiFactory {
}
public static MultipartBody.Part[] packPhoto(List<String> imageUrl) {
ArrayList<File> files = new ArrayList<>();
if (imageUrl != null && imageUrl.size() > 0) {
for (int i = 0; i < imageUrl.size(); i++) {
files.add(new File(imageUrl.get(i)));
}
}
MultipartBody.Part[] part = new MultipartBody.Part[files.size()];
for (int i = 0; i < files.size(); i++) {
RequestBody requestFile =
RequestBody.create(MediaType.parse("multipart/form-data"), files.get(i));
MultipartBody.Part body =
MultipartBody.Part.createFormData("fileUpload", files.get(i).getName(), requestFile);
part[i] = body;
}
return part;
}
}
......@@ -36,6 +36,12 @@ public class PhotoViewAdapter extends RecyclerView.Adapter<PhotoViewAdapter.Hold
private ArrayList<String> list;
private OnItemClickListener<PhotoViewAdapter.Holder, Integer> listener;
private boolean canDelete = true; //是否可以删除
public void setCanDelete(boolean canDelete) {
this.canDelete = canDelete;
}
public PhotoViewAdapter(ArrayList<String> list, Activity context) {
mIvSize = (UtilsScreen.getScreenWidth(context) - UtilsScreen.dip2px(context, 20)) / 5;
this.context = context;
......@@ -63,8 +69,8 @@ public class PhotoViewAdapter extends RecyclerView.Adapter<PhotoViewAdapter.Hold
holder.delete.setVisibility(View.GONE);
holder.picture.setOnClickListener(v -> showPicDialog());
} else {
holder.delete.setVisibility(canDelete?View.VISIBLE:View.GONE);
GlideImageLoader.load(context, list.get(position), holder.picture);
holder.delete.setVisibility(View.VISIBLE);
holder.delete.setOnClickListener(v -> removeItem(position));
holder.picture.setOnClickListener(v -> {
ArrayList temp = new ArrayList();
......@@ -124,7 +130,7 @@ public class PhotoViewAdapter extends RecyclerView.Adapter<PhotoViewAdapter.Hold
.hideBottomControls(true)// 是否显示uCrop工具栏,默认不显示 true or false
.compressSavePath(getPath())//压缩图片保存地址
.previewEggs(true)// 预览图片时 是否增强左右滑动图片体验(图片滑动一半即可看到上一张是否选中) true or false
// .minimumCompressSize(100)// 小于100kb的图片不压缩
.minimumCompressSize(2*1024)// 小于**kb的图片不压缩
.synOrAsy(true);//同步true或异步false 压缩 默认同步、
// .enableCrop(true)//是否裁剪
// .freeStyleCropEnabled(true)
......
......@@ -35,32 +35,32 @@ public class Constants {
/**
* dev环境配置.
*/
public static final int LOG_LEVEL = LogUtils.LEVEL_ALL;
public static final String ENVIROMENT = "debug";
public static final String BASE_URL = "http://47.94.101.239:3112";
public final static String UP_PHOTO = "/file/uploadMore?targetPath=test/sp/mobile/android/business/checkApply";
public final static String UP_VIDEO = "/file/uploadVideoOne?targetPath=dev/video";
public final static String WEB_SOP = "http://47.94.101.239:9004/#/sop";
public final static String CHECK_MULTI_WEB_SOP = "http://47.94.101.239:9004/#/manyServiceResult";
public final static String MULTI_WEB_SOP = "http://47.94.101.239:9004/#/manySop";
public final static String WEB_SOP_DETAIL = "http://47.94.101.239:9004/#/sopdetail";
public final static String WEB_ZHI_SHI = "http://47.94.101.239:9004/#/detail";
public static final boolean IS_DEBUG = true;
// public static final int LOG_LEVEL = LogUtils.LEVEL_ALL;
// public static final String ENVIROMENT = "debug";
// public static final String BASE_URL = "http://47.94.101.239:3112";
// public final static String UP_PHOTO = "/file/uploadMore?targetPath=test/sp/mobile/android/business/checkApply";
// public final static String UP_VIDEO = "/file/uploadVideoOne?targetPath=dev/video";
// public final static String WEB_SOP = "http://47.94.101.239:9004/#/sop";
// public final static String CHECK_MULTI_WEB_SOP = "http://47.94.101.239:9004/#/manyServiceResult";
// public final static String MULTI_WEB_SOP = "http://47.94.101.239:9004/#/manySop";
// public final static String WEB_SOP_DETAIL = "http://47.94.101.239:9004/#/sopdetail";
// public final static String WEB_ZHI_SHI = "http://47.94.101.239:9004/#/detail";
// public static final boolean IS_DEBUG = true;
/**
* uat测试环境配置.
*/
// public static final String ENVIROMENT = "uat";
// public static final int LOG_LEVEL = LogUtils.LEVEL_ALL;
// public static final String BASE_URL = "http://47.95.223.6:3112";
// public final static String UP_PHOTO = "/file/uploadMore?targetPath=test/sp/mobile/android/business/checkApply";
// public final static String UP_VIDEO = "/file/uploadVideoOne?targetPath=test/video";
// public final static String WEB_SOP = "http://47.95.223.6:9004/#/sop";
// public final static String WEB_SOP_DETAIL = "http://47.95.223.6:9004/#/sopdetail";
// public final static String WEB_ZHI_SHI = "http://47.95.223.6:9004/#/detail";
// public final static String CHECK_MULTI_WEB_SOP = "http://47.95.223.6:9004/#/manyServiceResult";
// public final static String MULTI_WEB_SOP = "http://47.95.223.6:9004/#/manySop";
// public static final boolean IS_DEBUG = true;
public static final String ENVIROMENT = "uat";
public static final int LOG_LEVEL = LogUtils.LEVEL_ALL;
public static final String BASE_URL = "http://47.95.223.6:3112";
public final static String UP_PHOTO = "/file/uploadMore?targetPath=test/sp/mobile/android/business/checkApply";
public final static String UP_VIDEO = "/file/uploadVideoOne?targetPath=test/video";
public final static String WEB_SOP = "http://47.95.223.6:9004/#/sop";
public final static String WEB_SOP_DETAIL = "http://47.95.223.6:9004/#/sopdetail";
public final static String WEB_ZHI_SHI = "http://47.95.223.6:9004/#/detail";
public final static String CHECK_MULTI_WEB_SOP = "http://47.95.223.6:9004/#/manyServiceResult";
public final static String MULTI_WEB_SOP = "http://47.95.223.6:9004/#/manySop";
public static final boolean IS_DEBUG = true;
/**
* 正式环境.
......@@ -169,6 +169,7 @@ public class Constants {
public final static String IDS = "ids";
public final static String OPERATE_DETAIL = "operate_detail";
public final static String CAN_EDIT = "can_edit";
//订单详情
public final static String ORDER_DETAIL = "order_detail";
//数据返回失败标识
......@@ -237,6 +238,7 @@ public class Constants {
public static final String IS_FORCE = "is_force";
public static final String ONLY_VIDEO = "only_video";
public static final String NO_WATERMARK = "nowatermark";
public static final int CAMERA_CODE = 100;
public static final int CAMERA_IMG = 101;
public static final int CAMERA_VIDEO = 102;
......
......@@ -23,6 +23,7 @@ import com.umeng.socialize.media.UMImage;
import com.umeng.socialize.media.UMMin;
import com.umeng.socialize.media.UMWeb;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
......@@ -301,4 +302,24 @@ public class CommonUtils {
.setCallback(callBack).share();
}
/**
* 获取年月日 格式日期
*/
public static String getYearData(String dataStr) {
if (TextUtils.isEmpty(dataStr)){
return UIUtils.getString(R.string.unknown);
}else{
SimpleDateFormat df = null;
Date sDate = null;
try {
df = new SimpleDateFormat("yyyy-MM-dd");
sDate = df.parse(dataStr);
return df.format(sDate);
} catch (ParseException e) {
e.printStackTrace();
return UIUtils.getString(R.string.unknown);
}
}
}
}
package com.dayu.widgets;
import android.graphics.SurfaceTexture;
import android.media.AudioManager;
import android.os.Handler;
import android.os.HandlerThread;
import android.view.Surface;
import java.io.IOException;
import cn.jzvd.JZMediaInterface;
import cn.jzvd.Jzvd;
import tv.danmaku.ijk.media.player.IMediaPlayer;
import tv.danmaku.ijk.media.player.IjkMediaPlayer;
import tv.danmaku.ijk.media.player.IjkTimedText;
/**
* Created by Nathen on 2017/11/18.
* ijk兼容SO库:https://github.com/NamHofstadter/IjkPlayerSos
* ijk默认不支持https协议,需要的请自行下载so库
*/
public class JZMediaIjk extends JZMediaInterface implements IMediaPlayer.OnPreparedListener, IMediaPlayer.OnVideoSizeChangedListener, IMediaPlayer.OnCompletionListener, IMediaPlayer.OnErrorListener, IMediaPlayer.OnInfoListener, IMediaPlayer.OnBufferingUpdateListener, IMediaPlayer.OnSeekCompleteListener, IMediaPlayer.OnTimedTextListener {
IjkMediaPlayer ijkMediaPlayer;
public JZMediaIjk(Jzvd jzvd) {
super(jzvd);
}
@Override
public void start() {
if (ijkMediaPlayer != null) ijkMediaPlayer.start();
}
@Override
public void prepare() {
release();
mMediaHandlerThread = new HandlerThread("JZVD");
mMediaHandlerThread.start();
mMediaHandler = new Handler(mMediaHandlerThread.getLooper());//主线程还是非主线程,就在这里
handler = new Handler();
mMediaHandler.post(() -> {
ijkMediaPlayer = new IjkMediaPlayer();
ijkMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
////1为硬解 0为软解
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec", 0);
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec-auto-rotate", 1);
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec-handle-resolution-change", 1);
//使用opensles把文件从java层拷贝到native层
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "opensles", 0);
//视频格式
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "overlay-format", IjkMediaPlayer.SDL_FCC_RV32);
//跳帧处理(-1~120)。CPU处理慢时,进行跳帧处理,保证音视频同步
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "framedrop", 1);
//0为一进入就播放,1为进入时不播放
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "start-on-prepared", 0);
////域名检测
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "http-detect-range-support", 0);
//设置是否开启环路过滤: 0开启,画面质量高,解码开销大,48关闭,画面质量差点,解码开销小
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_CODEC, "skip_loop_filter", 48);
//最大缓冲大小,单位kb
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "max-buffer-size", 1024 * 1024);
//某些视频在SeekTo的时候,会跳回到拖动前的位置,这是因为视频的关键帧的问题,通俗一点就是FFMPEG不兼容,视频压缩过于厉害,seek只支持关键帧,出现这个情况就是原始的视频文件中i 帧比较少
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "enable-accurate-seek", 1);
//是否重连
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "reconnect", 1);
//http重定向https
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "dns_cache_clear", 1);
//设置seekTo能够快速seek到指定位置并播放
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "fflags", "fastseek");
//播放前的探测Size,默认是1M, 改小一点会出画面更快
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "probesize", 1024 * 10);
ijkMediaPlayer.setOnPreparedListener(JZMediaIjk.this);
ijkMediaPlayer.setOnVideoSizeChangedListener(JZMediaIjk.this);
ijkMediaPlayer.setOnCompletionListener(JZMediaIjk.this);
ijkMediaPlayer.setOnErrorListener(JZMediaIjk.this);
ijkMediaPlayer.setOnInfoListener(JZMediaIjk.this);
ijkMediaPlayer.setOnBufferingUpdateListener(JZMediaIjk.this);
ijkMediaPlayer.setOnSeekCompleteListener(JZMediaIjk.this);
ijkMediaPlayer.setOnTimedTextListener(JZMediaIjk.this);
try {
ijkMediaPlayer.setDataSource(jzvd.jzDataSource.getCurrentUrl().toString());
ijkMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
ijkMediaPlayer.setScreenOnWhilePlaying(true);
ijkMediaPlayer.prepareAsync();
ijkMediaPlayer.setSurface(new Surface(jzvd.textureView.getSurfaceTexture()));
} catch (IOException e) {
e.printStackTrace();
}
});
}
@Override
public void pause() {
ijkMediaPlayer.pause();
}
@Override
public boolean isPlaying() {
return ijkMediaPlayer.isPlaying();
}
@Override
public void seekTo(long time) {
ijkMediaPlayer.seekTo(time);
}
@Override
public void release() {
if (mMediaHandler != null && mMediaHandlerThread != null && ijkMediaPlayer != null) {//不知道有没有妖孽
HandlerThread tmpHandlerThread = mMediaHandlerThread;
IjkMediaPlayer tmpMediaPlayer = ijkMediaPlayer;
JZMediaInterface.SAVED_SURFACE = null;
mMediaHandler.post(() -> {
tmpMediaPlayer.setSurface(null);
tmpMediaPlayer.release();
tmpHandlerThread.quit();
});
ijkMediaPlayer = null;
}
}
@Override
public long getCurrentPosition() {
return ijkMediaPlayer.getCurrentPosition();
}
@Override
public long getDuration() {
if (ijkMediaPlayer == null) return 0;
return ijkMediaPlayer.getDuration();
}
@Override
public void setVolume(float leftVolume, float rightVolume) {
ijkMediaPlayer.setVolume(leftVolume, rightVolume);
}
@Override
public void setSpeed(float speed) {
ijkMediaPlayer.setSpeed(speed);
}
@Override
public void onPrepared(IMediaPlayer iMediaPlayer) {
handler.post(() -> jzvd.onPrepared());
}
@Override
public void onVideoSizeChanged(IMediaPlayer iMediaPlayer, int i, int i1, int i2, int i3) {
handler.post(() -> jzvd.onVideoSizeChanged(iMediaPlayer.getVideoWidth(), iMediaPlayer.getVideoHeight()));
}
@Override
public boolean onError(IMediaPlayer iMediaPlayer, final int what, final int extra) {
handler.post(() -> jzvd.onError(what, extra));
return true;
}
@Override
public boolean onInfo(IMediaPlayer iMediaPlayer, final int what, final int extra) {
handler.post(() -> {
if (what == IMediaPlayer.MEDIA_INFO_VIDEO_ROTATION_CHANGED) {
// 这里返回了视频的旋转角度,根据角度旋转视频到正确角度
jzvd.textureView.setRotation(extra);
} else {
jzvd.onInfo(what, extra);
}
});
return false;
}
@Override
public void onBufferingUpdate(IMediaPlayer iMediaPlayer, final int percent) {
handler.post(() -> jzvd.setBufferProgress(percent));
}
@Override
public void onSeekComplete(IMediaPlayer iMediaPlayer) {
handler.post(() -> jzvd.onSeekComplete());
}
@Override
public void onTimedText(IMediaPlayer iMediaPlayer, IjkTimedText ijkTimedText) {
}
@Override
public void setSurface(Surface surface) {
ijkMediaPlayer.setSurface(surface);
}
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
if (SAVED_SURFACE == null) {
SAVED_SURFACE = surface;
prepare();
} else {
jzvd.textureView.setSurfaceTexture(SAVED_SURFACE);
}
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
return false;
}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surface) {
}
@Override
public void onCompletion(IMediaPlayer iMediaPlayer) {
handler.post(() -> jzvd.onAutoCompletion());
}
}
......@@ -2,8 +2,10 @@ package com.dayu.widgets;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import com.dayu.baselibrary.R;
import com.dayu.utils.ToastUtils;
import cn.jzvd.JzvdStd;
......@@ -92,6 +94,19 @@ public class MyJzvdStd extends JzvdStd {
}
}
public void setProgressTimes(long progressTimes) {
ToastUtils.showShortToast("set ptime: "+progressTimes);
mTouchingProgressBar = false;
dismissProgressDialog();
dismissVolumeDialog();
dismissBrightnessDialog();
mediaInterface.seekTo(progressTimes);
long duration = getDuration();
int progress = (int) (progressTimes * 100 / (duration == 0 ? 1 : duration));
progressBar.setProgress(progress);
startProgressTimer();
}
public void setPlayCallBack(PlayCallBack callBack) {
this.callBack = callBack;
......
......@@ -149,6 +149,8 @@
<string name="notice">提示</string>
<string name="no_permission">没有此权限将无法使用本app,请在设置中打开权限!</string>
<string name="login_state_no">登录状态已失效,请重新登录!</string>
<string name="delete_this_video">确定要删除该视频吗?</string>
<string name="confirm_str">确认</string>
<string name="login_again">重新登录</string>
<string name="submit_again">重新提交</string>
<string name="go_certification">去认证</string>
......@@ -1008,7 +1010,7 @@ C) 在甲方使用大鱼平å°æœåŠ¡è¿‡ç¨‹ä¸­äº§ç”Ÿçš„业务数æ®ï¼Œå®¢æˆ·æ•°æ
<string name="course_detail">课程详情</string>
<string name="course_puber">发布方:</string>
<string name="moment_take_photo">轻触拍照, 按住摄像</string>
<string name="moment_take_video">按住摄像</string>
<string name="moment_take_video">点击开始录制</string>
<string name="moment_permission_4">应用需要录音权限来拍摄视频</string>
<string name="request_permission_failure">获取权限失败</string>
......
......@@ -5,10 +5,10 @@ buildscript {
ext.build_tools_version = "27.0.3"
ext.min_sdk_version = 16
ext.target_sdk_version = 26
ext.version_code = 247
ext.verson_name = "2.4.7"
ext.version_code = 250
ext.verson_name = "2.5.0"
ext.gradle_version = '3.1.4'
ext.isReleaseMinify = true
ext.isReleaseMinify = false
ext.isDebugMinify = false
ext.arouter_api_version = '1.3.1'
ext.arouter_compiler_version = '1.1.4'
......
......@@ -541,9 +541,9 @@ public class CameraInterface implements Camera.PreviewCallback {
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
int th = 1000;
if (ScreenUtils.screenWidth > 700)
th = ScreenUtils.screenWidth;
int th = 800;
// if (ScreenUtils.screenWidth > 700)
// th = ScreenUtils.screenWidth;
Camera.Size videoSize;
if (mParams.getSupportedVideoSizes() == null) {
videoSize = CameraParamUtil.getInstance().getPreviewSize(mParams.getSupportedPreviewSizes(), th,
......@@ -595,11 +595,12 @@ public class CameraInterface implements Camera.PreviewCallback {
}
if (DeviceUtil.isHuaWeiRongyao()) {
mediaRecorder.setVideoEncodingBitRate(4 * 100000);
} else {
mediaRecorder.setVideoEncodingBitRate(mediaQuality);
}
// if (DeviceUtil.isHuaWeiRongyao()) {
// mediaRecorder.setVideoEncodingBitRate(4 * 100000);
// } else {
// mediaRecorder.setVideoEncodingBitRate(mediaQuality);
// }
mediaRecorder.setVideoEncodingBitRate(mediaQuality);
mediaRecorder.setPreviewDisplay(surface);
videoFileName = "video_" + System.currentTimeMillis() + ".mp4";
......
......@@ -107,10 +107,14 @@ public class CaptureButton extends View {
center_Y = (button_size + outside_add_size * 2) / 2;
rectF = new RectF(
center_X - (button_radius + outside_add_size - strokeWidth / 2),
center_Y - (button_radius + outside_add_size - strokeWidth / 2),
center_X + (button_radius + outside_add_size - strokeWidth / 2),
center_Y + (button_radius + outside_add_size - strokeWidth / 2));
// center_X - (button_radius + outside_add_size - strokeWidth / 2),
// center_Y - (button_radius + outside_add_size - strokeWidth / 2),
// center_X + (button_radius + outside_add_size - strokeWidth / 2),
// center_Y + (button_radius + outside_add_size - strokeWidth / 2));
center_X - (button_radius - strokeWidth / 2),
center_Y - (button_radius - strokeWidth / 2),
center_X + (button_radius - strokeWidth / 2),
center_Y + (button_radius - strokeWidth / 2));
timer = new RecordCountDownTimer(duration, duration / 360); //录制定时器
}
......@@ -146,15 +150,22 @@ public class CaptureButton extends View {
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
LogUtil.i("state = " + state);
if (event.getPointerCount() > 1 || state != STATE_IDLE)
break;
event_Y = event.getY(); //记录Y值
state = STATE_PRESS; //修改当前状态为点击按下
//判断按钮状态是否为可录制状态
if ((button_state == BUTTON_STATE_ONLY_RECORDER || button_state == BUTTON_STATE_BOTH))
postDelayed(longPressRunnable, 500); //同时延长500启动长按后处理的逻辑Runnable
if (button_state == BUTTON_STATE_ONLY_RECORDER && state == STATE_RECORDERING) {
timer.cancel(); //停止计时器
recordEnd(); //录制结束
} else {
LogUtil.i("state = " + state);
if (event.getPointerCount() > 1 || state != STATE_IDLE)
break;
event_Y = event.getY(); //记录Y值
state = STATE_PRESS; //修改当前状态为点击按下
//判断按钮状态是否为可录制状态
if (button_state == BUTTON_STATE_ONLY_RECORDER) {
postDelayed(longPressRunnable, 0); //同时延长500启动长按后处理的逻辑Runnable
} else if ((button_state == BUTTON_STATE_ONLY_RECORDER || button_state == BUTTON_STATE_BOTH))
postDelayed(longPressRunnable, 500); //同时延长500启动长按后处理的逻辑Runnable
}
break;
case MotionEvent.ACTION_MOVE:
if (captureLisenter != null
......@@ -165,8 +176,10 @@ public class CaptureButton extends View {
}
break;
case MotionEvent.ACTION_UP:
//根据当前按钮的状态进行相应的处理
handlerUnpressByState();
if (button_state != BUTTON_STATE_ONLY_RECORDER) {
//根据当前按钮的状态进行相应的处理
handlerUnpressByState();
}
break;
}
return true;
......@@ -324,7 +337,8 @@ public class CaptureButton extends View {
//启动按钮动画,外圆变大,内圆缩小
startRecordAnimation(
button_outside_radius,
button_outside_radius + outside_add_size,
button_outside_radius ,
// button_outside_radius + outside_add_size,
button_inside_radius,
button_inside_radius - inside_reduce_size
);
......
......@@ -14,6 +14,7 @@ import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.cjt2325.cameralibrary.listener.CaptureListener;
import com.cjt2325.cameralibrary.listener.ClickListener;
......@@ -57,12 +58,14 @@ public class CaptureLayout extends FrameLayout {
private ImageView iv_custom_left; //左边自定义按钮
private ImageView iv_custom_right; //右边自定义按钮
private TextView txt_tip; //提示文本
private TextView txt_tip2; //提示文本
private int layout_width;
private int layout_height;
private int button_size;
private int iconLeft = 0;
private int iconRight = 0;
private Context mContext;
private boolean isFirst = true;
......@@ -72,6 +75,7 @@ public class CaptureLayout extends FrameLayout {
public CaptureLayout(Context context, AttributeSet attrs) {
this(context, attrs, 0);
mContext = context;
}
public CaptureLayout(Context context, AttributeSet attrs, int defStyleAttr) {
......@@ -165,7 +169,8 @@ public class CaptureLayout extends FrameLayout {
if (captureLisenter != null) {
captureLisenter.recordStart();
}
startAlphaAnimation();
iv_custom_left.setVisibility(GONE);
// startAlphaAnimation();
}
@Override
......@@ -279,6 +284,14 @@ public class CaptureLayout extends FrameLayout {
txt_tip.setGravity(Gravity.CENTER);
txt_tip.setLayoutParams(txt_param);
txt_tip2 = new TextView(getContext());
LayoutParams txt_param2 = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
txt_param2.gravity = Gravity.CENTER;
txt_param2.setMargins(0, 0, 0, 0);
txt_tip2.setTextColor(0xFFFFFFFF);
txt_tip2.setGravity(Gravity.CENTER);
txt_tip2.setLayoutParams(txt_param2);
this.addView(btn_capture);
this.addView(btn_cancel);
this.addView(btn_confirm);
......@@ -286,6 +299,7 @@ public class CaptureLayout extends FrameLayout {
this.addView(iv_custom_left);
this.addView(iv_custom_right);
this.addView(txt_tip);
this.addView(txt_tip2);
}
......@@ -307,19 +321,20 @@ public class CaptureLayout extends FrameLayout {
public void startAlphaAnimation() {
if (isFirst) {
ObjectAnimator animator_txt_tip = ObjectAnimator.ofFloat(txt_tip, "alpha", 1f, 0f);
animator_txt_tip.setDuration(500);
animator_txt_tip.start();
isFirst = false;
}
// if (isFirst) {
// ObjectAnimator animator_txt_tip = ObjectAnimator.ofFloat(txt_tip, "alpha", 1f, 0f);
// animator_txt_tip.setDuration(500);
// animator_txt_tip.start();
// isFirst = false;
// }
}
public void setTextWithAnimation(String tip) {
txt_tip.setText(tip);
ObjectAnimator animator_txt_tip = ObjectAnimator.ofFloat(txt_tip, "alpha", 0f, 1f, 1f, 0f);
animator_txt_tip.setDuration(2500);
animator_txt_tip.start();
Toast.makeText(mContext,tip,Toast.LENGTH_SHORT).show();
// txt_tip2.setText(tip);
// ObjectAnimator animator_txt_tip = ObjectAnimator.ofFloat(txt_tip2, "alpha", 0f, 1f, 1f, 0f);
// animator_txt_tip.setDuration(2500);
// animator_txt_tip.start();
}
public void setDuration(int duration) {
......
......@@ -194,6 +194,8 @@ public class JCameraView extends FrameLayout implements CameraInterface.CameraOp
mSwitchCamera.setVisibility(INVISIBLE);
mFlashLamp.setVisibility(INVISIBLE);
machine.record(mVideoView.getHolder().getSurface(), screenProp);
mCaptureLayout.setTip("点击结束录制");
mCaptureLayout.showTip();
}
@Override
......@@ -207,11 +209,14 @@ public class JCameraView extends FrameLayout implements CameraInterface.CameraOp
machine.stopRecord(true, time);
}
}, 1500 - time);
mCaptureLayout.setTip("点击开始录制");
}
@Override
public void recordEnd(long time) {
machine.stopRecord(false, time);
mCaptureLayout.setTip("录制完成");
}
@Override
......@@ -232,6 +237,7 @@ public class JCameraView extends FrameLayout implements CameraInterface.CameraOp
@Override
public void cancel() {
machine.cancle(mVideoView.getHolder(), screenProp);
mCaptureLayout.setTip("点击开始录制");
}
@Override
......@@ -517,7 +523,7 @@ public class JCameraView extends FrameLayout implements CameraInterface.CameraOp
});
mMediaPlayer.setLooping(true);
mMediaPlayer.prepare();
} catch (IOException e) {
} catch (Exception e) {
e.printStackTrace();
}
}
......
......@@ -5,12 +5,11 @@ import android.view.View;
import com.dayu.base.ui.adapter.CoreAdapter;
import com.dayu.learncenter.R;
import com.dayu.learncenter.api.bean.CommonLearnBean;
import com.dayu.learncenter.api.data.StudyCourseData;
import com.dayu.learncenter.databinding.ItemCommonLearnBinding;
import com.dayu.learncenter.presenter.common_learn.CommonLearnPresenter;
import com.dayu.utils.CommonUtils;
import com.dayu.utils.GlideImageLoader;
import com.dayu.utils.LogUtils;
import com.dayu.widgets.JZMediaIjk;
import com.dayu.widgets.MyJzvdStd;
import cn.jzvd.JzvdStd;
......@@ -34,21 +33,22 @@ public class LearnAdapter extends CoreAdapter<CommonLearnBean, ItemCommonLearnBi
holder.tvTitle.setText(item.getName());
holder.tvLooks.setText(item.getLearners() + "");
holder.tvLike.setText(item.getPoints() + "");
if (type == 2){
holder.tvDate.setText("发布时间 " + CommonUtils.getYearData(item.getCreateTime()));
if (type == 2) {
holder.tvProgress.setVisibility(View.VISIBLE);
holder.tvProgress.setText(mContext.getString(R.string.learn_progress)+item.getProgressPercentage()+"%");
holder.tvProgress.setText(mContext.getString(R.string.learn_progress) + item.getProgressPercentage() + "%");
}
holder.tvDisable.setVisibility(type == 3 && item.getStatus() != 1?View.VISIBLE:View.GONE);
holder.ivLike.setImageResource(item.getPointStatus() == 1 ? R.drawable.icon_like_red : R.drawable.icon_like_gray);
holder.tvDisable.setVisibility(type == 3 && item.getStatus() != 1 ? View.VISIBLE : View.GONE);
holder.jzVideo.setUp(item.getUrl(), "",JzvdStd.SCREEN_NORMAL);
holder.jzVideo.setUp(item.getUrl(), "", JzvdStd.SCREEN_NORMAL, JZMediaIjk.class);
CommonUtils.setVideoThumb(mContext, holder.jzVideo, item.getUrl());
holder.jzVideo.setPlayCallBack(new MyJzvdStd.PlayCallBack() {
@Override
public void onstart() {
if (item.getPlayStatus() == 2 && item.getProgressTimes()>0){
if (item.getPlayStatus() == 2 && item.getProgressTimes() > 0) {
holder.jzVideo.seekToInAdvance = item.getProgressTimes();
}
LogUtils.e("videoState start " + item.getId());
holder.rlCover.setVisibility(View.GONE);
if (item.getPlayStatus() != 2 && item.getPlayStatus() != 3)
mPresenter.studyCourse(item.getId(), 0, 0, 1);
......@@ -56,21 +56,18 @@ public class LearnAdapter extends CoreAdapter<CommonLearnBean, ItemCommonLearnBi
@Override
public void onPrepare() {
LogUtils.e("videoState prepa3 " + item.getId());
holder.rlCover.setVisibility(View.VISIBLE);
}
@Override
public void onPause() {
LogUtils.e("videoState pause: " + item.getId() + " " + holder.jzVideo.curProgress
+ " " + holder.jzVideo.curPosition + " " + holder.jzVideo.getDuration());
item.setProgressTimes(holder.jzVideo.curPosition);
if (item.getPlayStatus() != 3)
mPresenter.studyCourse(item.getId(), holder.jzVideo.curProgress, holder.jzVideo.curPosition, 2);
}
@Override
public void onComplete() {
LogUtils.e("videoState complete");
if (item.getPlayStatus() != 3)
mPresenter.studyCourse(item.getId(), 100, holder.jzVideo.getDuration(), 3);
}
......
......@@ -67,7 +67,7 @@ public interface LearnService {
* @return
*/
@GET(Constants.API_7900 + "/courses/all")
Observable<BaseResponse<BasePageBean<CommonLearnBean>>> getAllCourse(@Query("enginnerId") int enginnerId,
Observable<BaseResponse<BasePageBean<CommonLearnBean>>> getAllCourse(@Query("engineerId") int enginnerId,
@Query("key") String key,
@Query("page") int page,
@Query("pageSize") int pageSize);
......@@ -79,7 +79,7 @@ public interface LearnService {
* @return
*/
@GET(Constants.API_7900 + "/courses/learn")
Observable<BaseResponse<BasePageBean<CommonLearnBean>>> getLearnedCourse(@Query("enginnerId") int enginnerId,
Observable<BaseResponse<BasePageBean<CommonLearnBean>>> getLearnedCourse(@Query("engineerId") int enginnerId,
@Query("key") String key,
@Query("page") int page,
@Query("pageSize") int pageSize);
......
......@@ -45,6 +45,25 @@ public class CommonLearnBean {
private int status;
private int type;
private String url;
private int pointStatus;
private int firstUrl;
public int getPointStatus() {
return pointStatus;
}
public void setPointStatus(int pointStatus) {
this.pointStatus = pointStatus;
}
public int getFirstUrl() {
return firstUrl;
}
public void setFirstUrl(int firstUrl) {
this.firstUrl = firstUrl;
}
public String getBrief() {
return brief;
......
......@@ -52,11 +52,14 @@ public class PubCoursePresenter extends PubCourseContract.Presenter {
}
public void pubVideo(String videoPath, PubCourseData data) {
LogUtil.e("pugVideo 00");
// ToastUtils.showShortToast("length: "+CommonUtils.getVideoLength(videoPath));
mPubData = data;
if (!TextUtils.isEmpty(data.url))
if (!TextUtils.isEmpty(data.url)){
videoUrl = data.url;
}
if (TextUtils.isEmpty(videoUrl)) {
LogUtil.e("pugVideo 01 "+videoPath);
uploadVideo(videoPath,false);
} else {
pubCourse();
......@@ -69,7 +72,13 @@ public class PubCoursePresenter extends PubCourseContract.Presenter {
videoUrl = videoPath;
if (TextUtils.isEmpty(videoUrl)) {
mPubData.courseTimes = CommonUtils.getVideoLength(videoPath);
uploadVideo(videoPath,true);
try {
uploadVideo(videoPath,true);
} catch (Exception e) {
e.printStackTrace();
LogUtil.e("pugVideo error "+e.toString());
}
} else {
modifyCourse();
}
......@@ -78,9 +87,13 @@ public class PubCoursePresenter extends PubCourseContract.Presenter {
private void uploadVideo(String videoPath,boolean isModify) {
mView.showDialog();
File file = new File(videoPath);
LogUtil.e("pugVideo 02 "+file.length()+" "+file.getName());
RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
LogUtil.e("pugVideo 020 "+requestFile);
MultipartBody.Part body = MultipartBody.Part.createFormData("fileUpload", file.getName(), requestFile);
LogUtil.e("pugVideo 021 "+body);
BaseApiFactory.uploadVideo(body).subscribe(baseObserver(data -> {
LogUtil.e("pugVideo 022 ");
if (!TextUtils.isEmpty(data)) {
videoUrl = data;
if (isModify){
......@@ -95,6 +108,7 @@ public class PubCoursePresenter extends PubCourseContract.Presenter {
}
private void pubCourse() {
LogUtil.e("pugVideo 03");
mView.showDialog();
mPubData.url = videoUrl;
Api.getService(LearnService.class).pubCourse(mPubData).compose(Api.applySchedulers())
......
package com.dayu.learncenter.ui.activity;
import android.annotation.SuppressLint;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.text.TextUtils;
import android.view.View;
......@@ -21,14 +19,15 @@ import com.dayu.learncenter.api.LearnService;
import com.dayu.learncenter.api.bean.CourseDeatilBean;
import com.dayu.learncenter.databinding.ActivityCourseDetailBinding;
import com.dayu.utils.CommonUtils;
import com.dayu.utils.GlideImageLoader;
import com.dayu.utils.ProgressUtil;
import com.dayu.widgets.JZMediaIjk;
import com.dayu.widgets.KeyboardStateObserver;
import java.util.ArrayList;
import java.util.List;
import cn.jzvd.Jzvd;
import cn.jzvd.JzvdStd;
/**
* 课程详情
......@@ -60,10 +59,23 @@ public class CourseDetailActivity extends BaseActivity<SImplePresenter, Activity
mBind.titleBack.setOnClickListener(v -> dumpBack());
mBind.ivLike.setOnClickListener(v -> pointVideo());
courseId = getBundle().getInt(Constants.ID, 0);
showDialog();
initData();
getCommentData();
initCommentAdapter();
initCommentListener();
initRefreshView();
}
//下拉刷新
private void initRefreshView() {
mBind.refreshLayout.setEnableLoadMore(false);
mBind.refreshLayout.setOnRefreshListener(refreshLayout -> {
page = 1;
initData();
});
mBind.refreshLayout.setOnLoadMoreListener(refreshLayout -> {
initData();
});
}
//点赞
......@@ -90,6 +102,9 @@ public class CourseDetailActivity extends BaseActivity<SImplePresenter, Activity
private void initData() {
Api.getService(LearnService.class).getCourseDetail(courseId, mUserId).compose(Api.applySchedulers())
.subscribe(mPresenter.baseObserver(data -> setDetailData(data)));
getCommentData();
}
private void setDetailData(CourseDeatilBean data) {
......@@ -99,8 +114,9 @@ public class CourseDetailActivity extends BaseActivity<SImplePresenter, Activity
mBind.tvTheme.setText(data.getName());
mBind.tvDesc.setText(data.getBrief());
mBind.tvPuber.setText(data.getCreated());
mBind.jzVideo.setUp(data.getUrl(), "");
mBind.jzVideo.setUp(data.getUrl(), "",JzvdStd.SCREEN_NORMAL,JZMediaIjk.class);
CommonUtils.setVideoThumb(mActivity, mBind.jzVideo, data.getUrl());
steVideoListener();
mBind.tvLooks.setText(data.getLearners() + "");
mBind.tvLike.setText(pointNum + "");
if (data.getCoursePointsVO() != null && data.getCoursePointsVO().getPointStatus() == 1) {
......@@ -120,6 +136,10 @@ public class CourseDetailActivity extends BaseActivity<SImplePresenter, Activity
}
}
//播放监听
private void steVideoListener() {
}
private void initCommentAdapter() {
mCommentAdapter = new CommentAdapter(false);
mCommentAdapter.setData(commentList);
......@@ -141,7 +161,7 @@ public class CourseDetailActivity extends BaseActivity<SImplePresenter, Activity
@Override
public void onKeyboardHide() {
weakHandler.postDelayed(() -> {
mBind.btnComment.setVisibility(View.VISIBLE);
// mBind.btnComment.setVisibility(View.VISIBLE);
}, 100);
}
});
......@@ -223,6 +243,12 @@ public class CourseDetailActivity extends BaseActivity<SImplePresenter, Activity
}
@Override
public void onPause() {
super.onPause();
JzvdStd.goOnPlayOnPause();
}
@Override
public void onBackPressed() {
if (!Jzvd.backPress()) {
super.onBackPressed();
......
......@@ -12,15 +12,15 @@ import com.dayu.common.Constants;
import com.dayu.learncenter.R;
import com.dayu.learncenter.api.bean.CourseDeatilBean;
import com.dayu.learncenter.api.data.EditCourseData;
import com.dayu.learncenter.api.data.PubCourseData;
import com.dayu.learncenter.databinding.ActivityPubCourseBinding;
import com.dayu.learncenter.presenter.pubcourse.PubCourseContract;
import com.dayu.learncenter.presenter.pubcourse.PubCoursePresenter;
import com.dayu.utils.CommonUtils;
import com.dayu.utils.GlideImageLoader;
import com.dayu.utils.MPermissionUtils;
import com.dayu.utils.MediaChooseUtils;
import com.dayu.utils.ToastUtils;
import com.dayu.widgets.CustomDialog;
import com.dayu.widgets.JZMediaIjk;
import com.dayu.widgets.TextDialog;
import com.luck.picture.lib.PictureSelector;
import com.luck.picture.lib.config.PictureConfig;
......@@ -32,6 +32,7 @@ import java.util.List;
import java.util.concurrent.TimeUnit;
import cn.jzvd.Jzvd;
import cn.jzvd.JzvdStd;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
......@@ -62,6 +63,7 @@ public class EditCourseActivity extends BaseActivity<PubCoursePresenter, Activit
setListener();
courseId = getBundle().getInt(Constants.ID, 0);
mBind.tvTitle.setText(R.string.course_detail);
mBind.btnDelete.setVisibility(View.VISIBLE);
mBind.btnCancle.setText("");
setInitState();
mPresenter.getCourseDetail(courseId);
......@@ -70,7 +72,8 @@ public class EditCourseActivity extends BaseActivity<PubCoursePresenter, Activit
private void setListener() {
mBind.titleBack.setOnClickListener(view -> dumpBack());
mBind.btnCancle.setOnClickListener(view -> onCancleClick());
mBind.btnCancle.setOnClickListener(view -> changeVideoStatus(false));
mBind.btnDelete.setOnClickListener(view -> showDeleteDialog());
mBind.btnConfirm.setOnClickListener(view -> onConfimClick());
mBind.rlVideo.setOnClickListener(v -> {
if (canEdit && TextUtils.isEmpty(videoPath)) {
......@@ -84,6 +87,22 @@ public class EditCourseActivity extends BaseActivity<PubCoursePresenter, Activit
mBind.jzVideo.setOnClickListener(v -> showToast("click"));
}
//删除视频提示框
private void showDeleteDialog() {
CustomDialog mDialog = new CustomDialog(mActivity,R.style.CustomDialog,
getString(com.dayu.baselibrary.R.string.delete_this_video)
, (dialog, confirm) -> {
if (confirm) {
changeVideoStatus(true);
}
dialog.dismiss();
});
mDialog.setPositiveButton(getString(R.string.confirm_str))
.setNegativeButton(getString(R.string.cancle))
.setOneButton(false);
mDialog.show();
}
//设置控件的基本状态
private void setInitState() {
......@@ -97,15 +116,19 @@ public class EditCourseActivity extends BaseActivity<PubCoursePresenter, Activit
}
}
private void onCancleClick() {
private void changeVideoStatus(boolean isDelete) {
if (canSubmit() && courseDetail != null ){
Jzvd.goOnPlayOnPause();
EditCourseData editData = new EditCourseData(mUserId,theme,desc,mUserInfo.getAccountName(),courseDetail.getCourseTimes());
editData.id = courseId;
if (courseDetail.getStatus() == 1){
editData.status = 2;
if (isDelete){
editData.status = 3;
}else {
editData.status = 1;
if (courseDetail.getStatus() == 1){
editData.status = 2;
}else {
editData.status = 1;
}
}
mPresenter.editVideo(videoPath, editData);
}
......@@ -163,14 +186,13 @@ public class EditCourseActivity extends BaseActivity<PubCoursePresenter, Activit
//录制视频
private void recordVideo() {
String[] mPerArr = new String[]{Manifest.permission.RECORD_AUDIO, Manifest.permission.WRITE_EXTERNAL_STORAGE
, Manifest.permission.CAMERA};
String[] mPerArr = new String[]{Manifest.permission.RECORD_AUDIO};
MPermissionUtils.requestPermissionsResult(mActivity, 1, mPerArr, new MPermissionUtils.OnPermissionListener() {
@SuppressLint("CheckResult")
@Override
public void onPermissionGranted() {
Observable.timer(500, TimeUnit.MILLISECONDS)
Observable.timer(1000, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(aLong -> {
Intent intent = new Intent(EditCourseActivity.this, CameraActivity.class);
......@@ -238,12 +260,18 @@ public class EditCourseActivity extends BaseActivity<PubCoursePresenter, Activit
} else {
mBind.ivDelete.setVisibility(View.VISIBLE);
mBind.jzVideo.setVisibility(View.VISIBLE);
mBind.jzVideo.setUp(videoPath, "");
mBind.jzVideo.setUp(videoPath, "",JzvdStd.SCREEN_NORMAL,JZMediaIjk.class);
CommonUtils.setVideoThumb(mActivity,mBind.jzVideo,videoPath);
}
}
@Override
public void onPause() {
super.onPause();
JzvdStd.goOnPlayOnPause();
}
@Override
public void onBackPressed() {
if (!Jzvd.backPress()) {
super.onBackPressed();
......
......@@ -35,6 +35,7 @@ import java.util.List;
import java.util.concurrent.TimeUnit;
import cn.jzvd.Jzvd;
import cn.jzvd.JzvdStd;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
......@@ -46,6 +47,7 @@ public class PubCourseActivity extends BaseActivity<PubCoursePresenter, Activity
private String theme;
private String desc;
private String videoPath;
private int audioPermission = 11;
@Override
......@@ -62,6 +64,16 @@ public class PubCourseActivity extends BaseActivity<PubCoursePresenter, Activity
public void initView() {
initUser();
setListener();
String[] mPerArr = new String[]{Manifest.permission.RECORD_AUDIO};
MPermissionUtils.requestPermissionsResult(mActivity, 10, mPerArr, new MPermissionUtils.OnPermissionListener() {
@SuppressLint("CheckResult")
@Override
public void onPermissionGranted() {
}
@Override
public void onPermissionDenied() {
}
});
}
......@@ -100,14 +112,13 @@ public class PubCourseActivity extends BaseActivity<PubCoursePresenter, Activity
//录制视频
private void recordVideo() {
String[] mPerArr = new String[]{Manifest.permission.RECORD_AUDIO, Manifest.permission.WRITE_EXTERNAL_STORAGE
, Manifest.permission.CAMERA};
String[] mPerArr = new String[]{Manifest.permission.RECORD_AUDIO};
MPermissionUtils.requestPermissionsResult(mActivity, 1, mPerArr, new MPermissionUtils.OnPermissionListener() {
@SuppressLint("CheckResult")
@Override
public void onPermissionGranted() {
Observable.timer(500, TimeUnit.MILLISECONDS)
Observable.timer(1000, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(aLong -> {
Intent intent = new Intent(PubCourseActivity.this, CameraActivity.class);
......@@ -190,6 +201,12 @@ public class PubCourseActivity extends BaseActivity<PubCoursePresenter, Activity
}
@Override
public void onPause() {
super.onPause();
JzvdStd.goOnPlayOnPause();
}
@Override
public void onBackPressed() {
if (!Jzvd.backPress()) {
super.onBackPressed();
......
......@@ -131,7 +131,7 @@ public class CommonLearnFragment extends BaseFragment<CommonLearnPresenter, Frag
if (jzvd != null && Jzvd.CURRENT_JZVD != null &&
jzvd.jzDataSource.containsTheUrl(Jzvd.CURRENT_JZVD.jzDataSource.getCurrentUrl())) {
if (Jzvd.CURRENT_JZVD != null && Jzvd.CURRENT_JZVD.screen != Jzvd.SCREEN_FULLSCREEN) {
Jzvd.goOnPlayOnPause();
Jzvd.releaseAllVideos();
}
}
}
......
......@@ -91,7 +91,7 @@
android:layout_height="180dp"
android:layout_marginTop="15dp">
<cn.jzvd.JzvdStd
<com.dayu.widgets.MyJzvdStd
android:id="@+id/jz_video"
android:layout_width="match_parent"
android:layout_height="match_parent" />
......@@ -128,18 +128,20 @@
android:paddingLeft="5dp"
android:text="0" />
<ImageView
<ImageButton
android:id="@+id/iv_like"
android:layout_width="18dp"
android:layout_height="18dp"
android:layout_marginLeft="10dp"
android:layout_width="40dp"
android:layout_height="match_parent"
android:layout_marginLeft="5dp"
android:background="@color/transparent"
android:src="@drawable/icon_like_gray" />
<TextView
android:id="@+id/tv_like"
style="@style/common_text_style"
android:layout_marginRight="10dp"
android:paddingLeft="5dp"
android:layout_height="match_parent"
android:gravity="center"
android:text="0" />
</LinearLayout>
......@@ -200,6 +202,7 @@
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
<Button
android:visibility="gone"
android:id="@+id/btn_comment"
android:layout_width="match_parent"
android:layout_height="40dp"
......
......@@ -162,6 +162,15 @@
android:text="@string/cancle"
/>
<Button
android:visibility="gone"
android:id="@+id/btn_delete"
style="@style/btn_common_gray"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_marginLeft="25dp"
android:text="@string/delete_str"
/>
<Button
android:id="@+id/btn_confirm"
android:layout_marginLeft="25dp"
style="@style/btn_common_blue"
......
......@@ -45,7 +45,7 @@
android:layout_centerHorizontal="true"
android:layout_marginTop="130dp"
android:height="36dp"
android:background="#80ffffff"
android:background="#99ffffff"
android:gravity="center"
android:paddingLeft="15dp"
android:paddingRight="15dp"
......@@ -55,7 +55,7 @@
android:id="@+id/tv_disable"
style="@style/common_text_style"
android:height="36dp"
android:background="#80ffffff"
android:background="#99ffffff"
android:gravity="center"
android:paddingLeft="15dp"
android:paddingRight="15dp"
......
......@@ -12,4 +12,5 @@
<string name="enable_video">上架</string>
<string name="learn_progress">学习进度</string>
<string name="already_disable">已下架</string>
<string name="delete_str">删除</string>
</resources>
......@@ -506,7 +506,11 @@ public class CreateOrderActivity extends BaseActivity<CreateOrderPresenter, Acti
if (selectList != null && selectList.size() > 0) {
mImages.remove("add");
for (int a = 0; a < selectList.size(); a++) {
mImages.add(selectList.get(a).getCompressPath());
if (!TextUtils.isEmpty(selectList.get(a).getCompressPath())){
mImages.add(selectList.get(a).getCompressPath());
}else{
mImages.add(selectList.get(a).getPath());
}
}
if (mImages.size() < 10) {
mImages.add("add");
......
......@@ -13,7 +13,8 @@ import com.dayu.order.api.protocol.OperateInfo;
import com.dayu.order.api.protocol.Order;
import com.dayu.order.api.protocol.OrderDetail;
import com.dayu.order.api.protocol.OrderPart;
import com.dayu.order.api.protocol.OrderPartBean;
import com.dayu.order.api.protocol.bean.OrderPardDeatilBean;
import com.dayu.order.api.protocol.bean.OrderPartBean;
import com.dayu.order.api.protocol.Pay;
import com.dayu.order.api.protocol.ServerInstruction;
import com.dayu.order.api.protocol.ShipperCompany;
......@@ -22,7 +23,11 @@ import com.dayu.order.api.protocol.SopResult;
import com.dayu.order.api.protocol.Spu;
import com.dayu.order.api.protocol.Tab;
import com.dayu.order.api.protocol.TranCompanyBean;
import com.dayu.order.api.protocol.bean.ServiceProviderBean;
import com.dayu.order.api.protocol.bean.ServiceStationBean;
import com.dayu.order.api.protocol.companyManager;
import com.dayu.order.api.protocol.data.ReceivePartData;
import com.dayu.order.api.protocol.data.SendPartData;
import com.dayu.order.common.OrderConstant;
import java.util.List;
......@@ -443,6 +448,7 @@ public interface OrderService {
/**
* 备件物流列表
* @param sendType 1服务商给师傅发货 2师傅给服务商发货
*/
@GET(Constants.API_7200+"/ordersLogistics")
Observable<BaseResponse<BasePageBean<OrderPartBean>>> getOrderPartList(@Query("orderId") int orderId,
......@@ -454,4 +460,34 @@ public interface OrderService {
*/
@GET(Constants.API_7300+"/logisticsTraceInfo/logisticsCode/{code}")
Observable<BaseResponse<TranCompanyBean>> getTransCompany(@Path("code") String code);
/**
* 查询服务商信息
*/
@GET(Constants.API_7100+"/serviceProviderInfo/queryProviderInfo/id/{id}")
Observable<BaseResponse<ServiceProviderBean>> getServiceProvider(@Path("id") int siteId);
/**
* 查询服务站信息
*/
@GET(Constants.API_7100+"/serviceProviderSite/get/{id}")
Observable<BaseResponse<ServiceStationBean>> getServiceStation(@Path("id") int providerId);
/**
* 工单向商家发送备件
*/
@POST(Constants.API_7200+"/ordersLogistics")
Observable<BaseResponse<Boolean>> sendPart(@Body SendPartData data);
/**
* 备件收货
*/
@PUT(Constants.API_7200+"/ordersLogistics")
Observable<BaseResponse<Boolean>> receivePart(@Body ReceivePartData data);
/**
* 备件物流详情
*/
@GET(Constants.API_7200+"/ordersLogistics/{id}")
Observable<BaseResponse<OrderPardDeatilBean>> getPartDetail(@Path("id") int id);
}
......@@ -80,6 +80,15 @@ public class OrderDetail implements Serializable {
private String createdProvider;
private double price;
private double subsidyPrice;
private int createProviderId;
public int getCreateProviderId() {
return createProviderId;
}
public void setCreateProviderId(int createProviderId) {
this.createProviderId = createProviderId;
}
public double getSubsidyPrice() {
return subsidyPrice;
......
package com.dayu.order.api.protocol.bean;
import java.util.List;
public class OrderPardDeatilBean {
/**
* comment : string
* courierCompany : string
* courierNumber : string
* createTime : 2020-04-26T10:52:12.608Z
* id : 0
* orderId : 0
* pics : [{"id":0,"orderLogisticsId":0,"picUrl":"string"}]
* receiveOrg : string
* receiveTime : 2020-04-26T10:52:12.608Z
* receiverAddress : string
* receiverMobile : string
* receiverName : string
* sendId : 0
* sendItems : string
* sendMobile : string
* sendName : string
* sendType : 0
* shipperCode : string
* status : 0
*/
private String comment;
private String courierCompany;
private String courierNumber;
private String createTime;
private int id;
private int orderId;
private String receiveOrg;
private String receiveTime;
private String receiverAddress;
private String receiverMobile;
private String receiverName;
private int sendId;
private String sendItems;
private String sendMobile;
private String sendName;
private int sendType;
private String shipperCode;
private int status;
private List<PicsBean> pics;
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
public String getCourierCompany() {
return courierCompany;
}
public void setCourierCompany(String courierCompany) {
this.courierCompany = courierCompany;
}
public String getCourierNumber() {
return courierNumber;
}
public void setCourierNumber(String courierNumber) {
this.courierNumber = courierNumber;
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getOrderId() {
return orderId;
}
public void setOrderId(int orderId) {
this.orderId = orderId;
}
public String getReceiveOrg() {
return receiveOrg;
}
public void setReceiveOrg(String receiveOrg) {
this.receiveOrg = receiveOrg;
}
public String getReceiveTime() {
return receiveTime;
}
public void setReceiveTime(String receiveTime) {
this.receiveTime = receiveTime;
}
public String getReceiverAddress() {
return receiverAddress;
}
public void setReceiverAddress(String receiverAddress) {
this.receiverAddress = receiverAddress;
}
public String getReceiverMobile() {
return receiverMobile;
}
public void setReceiverMobile(String receiverMobile) {
this.receiverMobile = receiverMobile;
}
public String getReceiverName() {
return receiverName;
}
public void setReceiverName(String receiverName) {
this.receiverName = receiverName;
}
public int getSendId() {
return sendId;
}
public void setSendId(int sendId) {
this.sendId = sendId;
}
public String getSendItems() {
return sendItems;
}
public void setSendItems(String sendItems) {
this.sendItems = sendItems;
}
public String getSendMobile() {
return sendMobile;
}
public void setSendMobile(String sendMobile) {
this.sendMobile = sendMobile;
}
public String getSendName() {
return sendName;
}
public void setSendName(String sendName) {
this.sendName = sendName;
}
public int getSendType() {
return sendType;
}
public void setSendType(int sendType) {
this.sendType = sendType;
}
public String getShipperCode() {
return shipperCode;
}
public void setShipperCode(String shipperCode) {
this.shipperCode = shipperCode;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public List<PicsBean> getPics() {
return pics;
}
public void setPics(List<PicsBean> pics) {
this.pics = pics;
}
public static class PicsBean {
/**
* id : 0
* orderLogisticsId : 0
* picUrl : string
*/
private int id;
private int orderLogisticsId;
private String picUrl;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getOrderLogisticsId() {
return orderLogisticsId;
}
public void setOrderLogisticsId(int orderLogisticsId) {
this.orderLogisticsId = orderLogisticsId;
}
public String getPicUrl() {
return picUrl;
}
public void setPicUrl(String picUrl) {
this.picUrl = picUrl;
}
}
}
package com.dayu.order.api.protocol.data;
import java.util.List;
public class ReceivePartData {
public int id; //备件物流ID ,
public String comment ; //备注
public List<PicItem> pics ; //图片 ,
public int status= 2; //1已发货2已收货
public ReceivePartData() {
}
public ReceivePartData(int id, String comment, List<PicItem> pics) {
this.id = id;
this.comment = comment;
this.pics = pics;
}
public class PicItem{
public String picUrl;
public PicItem(String picUrl) {
this.picUrl = picUrl;
}
}
}
package com.dayu.order.api.protocol.data;
import java.util.List;
public class SendPartData {
public int orderId; //工单ID ,
public String courierCompany; //快递公司
public String courierNumber; //快递公司单号 ,
public List<PicItem> pics ; //图片 ,
public String receiverAddress; //详细地址 ,
public String receiverMobile; //收货人手机号 ,
public String receiverName; //收货人 ,
public int sendId; //发货方ID ,
public String sendItems; //货物清单 ,
public String sendMobile; //发货方手机号 ,
public String sendName; //发货方名称 ,
public int sendType= 2; //1服务商给师傅发货 2师傅给服务商发货 ,
public int status= 1; //1已发货2已收货
public String shipperCode; // 快递公司编码 ,
public String receiveOrg; //收货方组织(服务商或服务站),
public SendPartData() {
}
public SendPartData(int orderId, String courierCompany, String courierNumber,
List<PicItem> pics, String receiverAddress, String receiverMobile,
String receiverName, int sendId, String sendItems, String sendMobile,
String sendName, String shipperCode) {
this.orderId = orderId;
this.courierCompany = courierCompany;
this.courierNumber = courierNumber;
this.pics = pics;
this.receiverAddress = receiverAddress;
this.receiverMobile = receiverMobile;
this.receiverName = receiverName;
this.sendId = sendId;
this.sendItems = sendItems;
this.sendMobile = sendMobile;
this.sendName = sendName;
this.shipperCode = shipperCode;
}
public class PicItem{
public String picUrl;
public PicItem(String picUrl) {
this.picUrl = picUrl;
}
}
}
package com.dayu.order.common;
public class PartReceiverEvent {
}
package com.dayu.order.common;
public class PartSendEvent {
}
......@@ -12,19 +12,15 @@ import com.dayu.order.api.OrderService;
import com.dayu.order.api.protocol.OrderDetail;
import com.dayu.order.api.protocol.OrderPart;
import com.dayu.order.ui.activity.ApplyAndRefuseActivity;
import com.dayu.order.ui.activity.ApplyAndRefuseNewActivity;
import com.dayu.order.ui.activity.LogisticsInfoActivity;
import com.dayu.order.ui.activity.OrderPartReceiveActivity;
import com.dayu.order.ui.activity.OrderPartSendActivity;
import com.dayu.order.ui.activity.ReturnPartActivity;
import com.dayu.order.ui.activity.ReturnPartNewActivity;
import com.dayu.utils.UIUtils;
import com.dayu.utils.UserManager;
import com.megvii.idcardlib.util.Constant;
import com.umeng.analytics.MobclickAgent;
import java.util.ArrayList;
import java.util.List;
import io.reactivex.Observable;
/**
......@@ -36,20 +32,19 @@ public class OrderPartPresenter extends OrderPartContract.Presenter {
public ObservableField<String> title = new ObservableField<>(UIUtils.getString(R.string.apply_one_order_part));
public ObservableField<Boolean> showBottomBtn = new ObservableField<>(false);
private int mOrderId;
private int mSource;
private OrderDetail mDetail;
private String mUserName;
private Integer mCompanyId;
private int mType;
private int mType; //1服务商给师傅发货 2师傅给服务商发货
private int mPage;
@Override
public void onAttached() {
Bundle bundle = mView.getBundle();
OrderDetail detail = (OrderDetail) bundle.getSerializable(Constants.ORDER_DETAIL);
mDetail = (OrderDetail) bundle.getSerializable(Constants.ORDER_DETAIL);
mType = bundle.getInt(Constants.TYPE);
mOrderId = detail.getId();
mSource = detail.getSource();
mCompanyId = detail.getKaCompanyId();
mOrderId = mDetail.getId();
mCompanyId = mDetail.getKaCompanyId();
mUserName = UserManager.getInstance().getUser().getAccountName();
if (mType == 2) {
title.set(UIUtils.getString(R.string.return_one_order_part));
......@@ -63,6 +58,10 @@ public class OrderPartPresenter extends OrderPartContract.Presenter {
queryPartList();
}
@Override
public void loadMore() {
queryPartList();
}
@Override
public ObservableField<Object> getSourceDatas() {
......@@ -71,9 +70,13 @@ public class OrderPartPresenter extends OrderPartContract.Presenter {
@Override
public void queryPartList() {
// Api.getService(OrderService.class).getOrderPartList(mOrderId,mType,mPage,Constants.PAGESIZE)
// .compose(Api.applySchedulers()).subscribe(baseObserver(orderPart -> datas.set(orderPart)
// , responeThrowable -> datas.set(Constants.FAILED)));
Api.getService(OrderService.class).getOrderPartList(mOrderId,mType,mPage,Constants.PAGESIZE)
.compose(Api.applySchedulers()).subscribe(baseObserver(orderPart -> {
datas.set(orderPart);
mPage++;
}
, responeThrowable -> datas.set(Constants.FAILED)));
// OrderApiFactory.queryPart(mOrderId, mType).subscribe(baseObserver(
// orderPart -> datas.set(orderPart)
// , responeThrowable -> datas.set(Constants.FAILED)));
......@@ -82,14 +85,7 @@ public class OrderPartPresenter extends OrderPartContract.Presenter {
@Override
public void applyOrReturnPart() {
Bundle bundle = new Bundle();
bundle.putInt(Constants.ORDER_ID, mOrderId);
bundle.putInt(Constants.ORDER_SOURCE, mSource);
if (mType == 1) {
mView.startActivity(OrderPartReceiveActivity.class, bundle);
} else if (mType == 2) {
mView.startActivity(OrderPartSendActivity.class, bundle);
}
toDetail(true,-1);
// if (mType == 1) {
// Bundle bundle = new Bundle();
// bundle.putInt(Constants.ORDER_ID, mOrderId);
......@@ -101,6 +97,18 @@ public class OrderPartPresenter extends OrderPartContract.Presenter {
// }
}
public void toDetail(boolean canEdit,int partId) {
Bundle bundle = new Bundle();
bundle.putBoolean(Constants.CAN_EDIT,canEdit);
bundle.putInt(Constants.ID,partId);
bundle.putSerializable(Constants.ORDER_DETAIL, mDetail);
if (mType == 1) {
mView.startActivity(OrderPartReceiveActivity.class, bundle);
} else if (mType == 2) {
mView.startActivity(OrderPartSendActivity.class, bundle);
}
}
@Override
public void dumpToRefusePart(int partId) {
Bundle bundle = new Bundle();
......
package com.dayu.order.presenter.orderpart_receive;
import com.dayu.base.ui.presenter.BasePresenter;
import com.dayu.common.BaseView;
import com.dayu.order.api.protocol.bean.OrderPardDeatilBean;
import java.util.List;
public interface PartReceiveContract {
interface View extends BaseView {
/**
* 关闭输入框.
*/
void hideInput();
/**
* 获取添加的图片
*/
List<String> getImgs();
/**
* 页面内容是否可编辑
* @param canEdit
*/
void setCanEdit(boolean canEdit);
/**
* 显示已上传图片
* @param imgs
*/
void setImgs(List<String> imgs);
/**
* 收货详情
*/
void setDetailData(OrderPardDeatilBean data);
}
abstract class Presenter extends BasePresenter<View> {
}
}
package com.dayu.order.presenter.orderpart_receive;
import android.databinding.ObservableField;
import android.os.Bundle;
import android.text.TextUtils;
import com.dayu.base.api.Api;
import com.dayu.base.api.BaseApiFactory;
import com.dayu.common.Constants;
import com.dayu.event.UserInfo;
import com.dayu.order.R;
import com.dayu.order.api.OrderApiFactory;
import com.dayu.order.api.OrderService;
import com.dayu.order.api.protocol.OrderDetail;
import com.dayu.order.api.protocol.ShipperCompany;
import com.dayu.order.api.protocol.bean.OrderPardDeatilBean;
import com.dayu.order.api.protocol.data.ReceivePartData;
import com.dayu.order.api.protocol.data.SendPartData;
import com.dayu.order.common.PartReceiverEvent;
import com.dayu.order.presenter.orderpart_send.PartSendContract;
import com.dayu.utils.ToastUtils;
import com.dayu.utils.UserManager;
import org.greenrobot.eventbus.EventBus;
import java.util.ArrayList;
import java.util.List;
public class PartRecievePresenter extends PartReceiveContract.Presenter {
public ObservableField<String> remark = new ObservableField<>();
private OrderDetail mDetail;
private UserInfo mUser;
private boolean canEdit;
private int partId;
@Override
public void onAttached() {
mUser = UserManager.getInstance().getUser();
Bundle bundle = mView.getBundle();
canEdit = bundle.getBoolean(Constants.CAN_EDIT);
mDetail = (OrderDetail) bundle.getSerializable(Constants.ORDER_DETAIL);
mView.setCanEdit(canEdit);
partId = bundle.getInt(Constants.ID);
getDetailData(partId);
}
//获取发货详情
private void getDetailData(int partId) {
mView.showDialog();
Api.getService(OrderService.class).getPartDetail(partId).compose(Api.applySchedulers())
.subscribe(baseObserver(data -> {
if (data != null) {
mView.setDetailData(data);
remark.set(data.getComment());
if (!canEdit && data.getPics() != null && data.getPics().size() > 0) {
List<String> imgs = new ArrayList<>();
for (OrderPardDeatilBean.PicsBean picsBean : data.getPics()) {
if (!TextUtils.isEmpty(picsBean.getPicUrl()))
imgs.add(picsBean.getPicUrl());
mView.setImgs(imgs);
}
}
}
}));
}
public void confirmReceive() {
if (mView.getImgs() != null && mView.getImgs().size() > 0) {
mView.showDialog();
BaseApiFactory.uploadPhoto(BaseApiFactory.packPhoto(mView.getImgs()), Constants.NO_WATERMARK)
.subscribe(baseObserver(imgs -> {
receivePart(imgs);
}));
} else {
receivePart(null);
}
}
//收货
private void receivePart(List<String> imgs) {
mView.showDialog();
List<ReceivePartData.PicItem> pics = new ArrayList<>();
if (imgs != null && imgs.size() > 0) {
for (String url : imgs) {
ReceivePartData data = new ReceivePartData();
ReceivePartData.PicItem item = data.new PicItem(url);
pics.add(item);
}
}
ReceivePartData receivedData = new ReceivePartData(partId, remark.get(),pics);
Api.getService(OrderService.class).receivePart(receivedData).compose(Api.applySchedulers())
.subscribe(baseObserver(success -> {
if (success) {
ToastUtils.showShortToast("收货成功");
EventBus.getDefault().post(new PartReceiverEvent());
mView.dumpBack();
} else {
ToastUtils.showShortToast("收货失败");
}
}));
}
}
......@@ -4,6 +4,8 @@ package com.dayu.order.presenter.orderpart_send;
import com.bigkoo.pickerview.listener.OnOptionsSelectListener;
import com.dayu.base.ui.presenter.BasePresenter;
import com.dayu.common.BaseView;
import com.dayu.order.api.protocol.bean.ServiceProviderBean;
import com.dayu.order.api.protocol.bean.ServiceStationBean;
import java.util.List;
......@@ -28,9 +30,33 @@ public interface PartSendContract {
void toScan();
/**
* 扫描物流单号
* 获取添加的图片
*/
List<String> getImgs();
/**
* 服务站信息
* @param data
*/
void setStationData(ServiceStationBean data);
/**
* 服务商信息
* @param data
*/
void setProviderData(ServiceProviderBean data);
/**
* 页面内容是否可编辑
* @param canEdit
*/
void setCanEdit(boolean canEdit);
/**
* 显示已上传图片
* @param imgs
*/
void setImgs(List<String> imgs);
}
abstract class Presenter extends BasePresenter<View> {
......
package com.dayu.order.presenter.orderpart_send;
import android.databinding.ObservableField;
import android.os.Bundle;
import android.text.TextUtils;
import com.dayu.base.api.APIService;
import com.dayu.base.api.Api;
import com.dayu.base.api.BaseApiFactory;
import com.dayu.common.Constants;
import com.dayu.event.UserInfo;
import com.dayu.order.R;
import com.dayu.order.api.OrderApiFactory;
import com.dayu.order.api.OrderService;
import com.dayu.order.api.protocol.OrderPart;
import com.dayu.order.api.protocol.OrderDetail;
import com.dayu.order.api.protocol.ShipperCompany;
import com.dayu.order.api.protocol.bean.OrderPardDeatilBean;
import com.dayu.order.api.protocol.data.SendPartData;
import com.dayu.order.common.PartSendEvent;
import com.dayu.utils.ToastUtils;
import com.dayu.utils.UserManager;
import org.greenrobot.eventbus.EventBus;
import java.util.ArrayList;
import java.util.List;
......@@ -18,24 +29,110 @@ public class PartSendPresenter extends PartSendContract.Presenter {
public ObservableField<String> courierCompany = new ObservableField<>();
public ObservableField<String> courierNum = new ObservableField<>();
public ObservableField<String> goodsListStr = new ObservableField<>();
public ObservableField<String> company = new ObservableField<>();
public ObservableField<String> address = new ObservableField<>();
public ObservableField<String> contacter = new ObservableField<>();
public ObservableField<String> contactPhone = new ObservableField<>();
List<ShipperCompany> transCompanyList = new ArrayList<>();
private int mKaId;
private int mOrderId;
private int mType;
private String mKaComent;
private UserInfo mInfo;
private int mPartId;
private OrderPart mPart;
private OrderDetail mDetail;
private String mShipperCode;
private UserInfo mUser;
private boolean canEdit;
@Override
public void onAttached() {
mUser = UserManager.getInstance().getUser();
Bundle bundle = mView.getBundle();
canEdit = bundle.getBoolean(Constants.CAN_EDIT);
mDetail = (OrderDetail) bundle.getSerializable(Constants.ORDER_DETAIL);
mView.setCanEdit(canEdit);
if (!canEdit) {
int partId = bundle.getInt(Constants.ID);
getDetailData(partId);
return;
}
if (mDetail.getSource() == 1) {
mView.showDialog();
getStationInfo();
} else if (mDetail.getSource() == 5 || mDetail.getSource() == 6) {
mView.showDialog();
getProviderInfo();
} else {
company.set("大鱼云服");
address.set("北京市海淀区中关村软件园汉王大厦135室");
contacter.set("大鱼云服");
contactPhone.set("400-0086-898");
}
}
//获取发货详情
private void getDetailData(int partId) {
mView.showDialog();
Api.getService(OrderService.class).getPartDetail(partId).compose(Api.applySchedulers())
.subscribe(baseObserver(data->{
if (data != null){
company.set(data.getReceiveOrg());
address.set(data.getReceiverAddress());
contacter.set(data.getReceiverName());
contactPhone.set(data.getReceiverMobile());
goodsListStr.set(data.getSendItems());
courierNum.set(data.getCourierNumber());
courierCompany.set(data.getCourierCompany());
if (data.getPics() != null && data.getPics().size()>0){
List<String> imgs = new ArrayList<>();
for (OrderPardDeatilBean.PicsBean picsBean : data.getPics()){
if (!TextUtils.isEmpty(picsBean.getPicUrl()))
imgs.add(picsBean.getPicUrl());
}
mView.setImgs(imgs);
}
}
}));
}
//查询服务站信息
private void getStationInfo() {
Api.getService(OrderService.class).getServiceStation(mDetail.getSiteId()).compose(Api.applySchedulers())
.subscribe(baseObserver(data -> {
if (data != null) {
mView.setStationData(data);
}
}));
}
//查询服务商信息
private void getProviderInfo() {
Api.getService(OrderService.class).getServiceProvider(mDetail.getCreateProviderId())
.compose(Api.applySchedulers()).subscribe(baseObserver(data -> {
if (data != null) {
mView.setProviderData(data);
}
}));
}
@Override
public void getCourier() {
if (!canEdit || TextUtils.isEmpty(courierNum.get()))
return;
mView.showDialog();
Api.getService(OrderService.class).getTransCompany(courierNum.get()).compose(Api.applySchedulers())
.subscribe(baseObserver(data -> {
if (data != null) {
courierCompany.set(data.getShipperName());
mShipperCode = data.getShipperCode();
}else {
getTransCompanys();
}
},responeThrowable -> getTransCompanys()));
}
private void getTransCompanys() {
//查询物流公司
mView.hideInput();
if (transCompanyList != null && transCompanyList.size() > 0) {
showCouriesDialog(transCompanyList);
......@@ -60,7 +157,8 @@ public class PartSendPresenter extends PartSendContract.Presenter {
}
public void scan() {
mView.toScan();
if (canEdit)
mView.toScan();
}
public void setCourierNum(String snNum) {
......@@ -79,6 +177,60 @@ public class PartSendPresenter extends PartSendContract.Presenter {
@Override
public void confirmSend() {
ToastUtils.showShortToast("commit");
if (canSubmit()) {
if (mView.getImgs() != null && mView.getImgs().size() > 0) {
mView.showDialog();
BaseApiFactory.uploadPhoto(BaseApiFactory.packPhoto(mView.getImgs()), Constants.NO_WATERMARK)
.subscribe(baseObserver(imgs -> {
sendPart(imgs);
}));
}else {
sendPart(null);
}
}
}
//发货
private void sendPart(List<String> imgs) {
mView.showDialog();
List<SendPartData.PicItem> pics = new ArrayList<>();
if (imgs != null && imgs.size() > 0) {
for (String url : imgs) {
SendPartData data = new SendPartData();
SendPartData.PicItem item = data.new PicItem(url);
pics.add(item);
}
}
SendPartData sendData = new SendPartData(mDetail.getId(), courierCompany.get(), courierNum.get(), pics,
address.get(), contactPhone.get(), contacter.get(), mUser.getSiteId(), goodsListStr.get(),
mUser.getMobile(), mUser.getAccountName(), mShipperCode);
sendData.receiveOrg = company.get();
Api.getService(OrderService.class).sendPart(sendData).compose(Api.applySchedulers())
.subscribe(baseObserver(success -> {
if (success) {
ToastUtils.showShortToast("发送成功");
EventBus.getDefault().post(new PartSendEvent());
mView.dumpBack();
} else {
ToastUtils.showShortToast("发送失败");
}
}));
}
private boolean canSubmit() {
if (TextUtils.isEmpty(goodsListStr.get())) {
ToastUtils.showShortToast(R.string.pls_fill_goods_list);
return false;
}
if (TextUtils.isEmpty(courierNum.get())) {
ToastUtils.showShortToast(R.string.pls_fill_trans_code);
return false;
}
if (TextUtils.isEmpty(mShipperCode)) {
ToastUtils.showShortToast(R.string.pls_fill_trans_company);
return false;
}
return true;
}
}
......@@ -533,7 +533,11 @@ public class MultipleProcessActivity extends BaseActivity<MultipleProcessPresent
mSelectList = PictureSelector.obtainMultipleResult(data);
mPayerImages.remove("add");
for (int a = 0; a < mSelectList.size(); a++) {
mPayerImages.add(mSelectList.get(a).getCompressPath());
if (!TextUtils.isEmpty(mSelectList.get(a).getCompressPath())) {
mPayerImages.add(mSelectList.get(a).getCompressPath());
} else {
mPayerImages.add(mSelectList.get(a).getPath());
}
}
if (mPayerImages.size() < 10) {
mPayerImages.add("add");
......
......@@ -55,6 +55,7 @@ public class OrderDetailsActivity extends BaseActivity<OrderDetailPresenter, Act
@Override
public void initView() {
mBind.titleBack.setOnClickListener(v -> dumpBack());
EventBus.getDefault().register(this);
}
......@@ -91,7 +92,6 @@ public class OrderDetailsActivity extends BaseActivity<OrderDetailPresenter, Act
mFragments.add(mOperateFragment);
mFragments.add(orderDatailsServeFragment);
mFragments.add(mOrderPartFragment);
mBind.titleBack.setOnClickListener(v -> dumpBack());
mBind.btnDetail.setVisibility(View.VISIBLE);
mBind.btnServer.setVisibility(View.VISIBLE);
if (detail.getCreatedSource() == 1) {
......
......@@ -3,15 +3,17 @@ package com.dayu.order.ui.activity;
import android.content.Intent;
import android.support.v7.widget.GridLayoutManager;
import android.text.TextUtils;
import android.view.View;
import com.dayu.base.ui.activity.BaseActivity;
import com.dayu.base.ui.adapter.PhotoViewAdapter;
import com.dayu.base.ui.adapter.SpacesItemDecoration;
import com.dayu.base.ui.presenter.SImplePresenter;
import com.dayu.order.R;
import com.dayu.order.api.protocol.bean.OrderPardDeatilBean;
import com.dayu.order.databinding.ActivityOrderPartReceiveBinding;
import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;
import com.dayu.order.presenter.orderpart_receive.PartReceiveContract;
import com.dayu.order.presenter.orderpart_receive.PartRecievePresenter;
import com.dayu.utils.CommonUtils;
import com.luck.picture.lib.PictureSelector;
import com.luck.picture.lib.config.PictureConfig;
import com.luck.picture.lib.entity.LocalMedia;
......@@ -19,13 +21,14 @@ import com.luck.picture.lib.entity.LocalMedia;
import java.util.ArrayList;
import java.util.List;
public class OrderPartReceiveActivity extends BaseActivity<SImplePresenter,ActivityOrderPartReceiveBinding> {
public class OrderPartReceiveActivity extends BaseActivity<PartRecievePresenter, ActivityOrderPartReceiveBinding>
implements PartReceiveContract.View {
private PhotoViewAdapter mAdapter;
private ArrayList<String> mImages = new ArrayList<>();
@Override
public void setPresenter() {
mBind.setPresenter(mPresenter);
}
@Override
......@@ -35,7 +38,7 @@ public class OrderPartReceiveActivity extends BaseActivity<SImplePresenter,Activ
@Override
public void initView() {
initPhotoView();
mBind.titleBack.setOnClickListener(v -> dumpBack());
}
private void initPhotoView() {
......@@ -58,7 +61,6 @@ public class OrderPartReceiveActivity extends BaseActivity<SImplePresenter,Activ
if (selectList != null && selectList.size() > 0) {
mImages.remove("add");
for (int a = 0; a < selectList.size(); a++) {
// mImages.add(selectList.get(a).getCompressPath());
if (!TextUtils.isEmpty(selectList.get(a).getCompressPath())) {
mImages.add(selectList.get(a).getCompressPath());
} else {
......@@ -74,4 +76,46 @@ public class OrderPartReceiveActivity extends BaseActivity<SImplePresenter,Activ
}
}
}
@Override
public void hideInput() {
CommonUtils.hideSoftInput(this);
}
@Override
public List<String> getImgs() {
List<String> imgs = mImages;
imgs.remove("add");
return imgs;
}
@Override
public void setCanEdit(boolean canEdit) {
if (canEdit){
initPhotoView();
}else{
mBind.edtRemark.setEnabled(false);
mBind.tvCommit.setVisibility(View.GONE);
}
}
@Override
public void setImgs(List<String> imgs) {
mBind.photo.addItemDecoration(new SpacesItemDecoration(10));
mBind.photo.setLayoutManager(new GridLayoutManager(mActivity, 5));
mAdapter = new PhotoViewAdapter((ArrayList<String>) imgs, mActivity);
mAdapter.setCanDelete(false);
mBind.photo.setAdapter(mAdapter);
}
@Override
public void setDetailData(OrderPardDeatilBean data) {
mBind.tvCode.setText(data.getCourierNumber());
mBind.tvCompany.setText(data.getCourierCompany());
mBind.tvDate.setText(data.getCreateTime());
mBind.tvAddress.setText(data.getReceiverAddress());
mBind.tvName.setText(data.getReceiverName());
mBind.tvPhone.setText(data.getReceiverMobile());
mBind.tvList.setText(data.getSendItems());
}
}
......@@ -3,19 +3,21 @@ package com.dayu.order.ui.activity;
import android.content.Intent;
import android.support.v7.widget.GridLayoutManager;
import android.text.TextUtils;
import android.view.View;
import com.bigkoo.pickerview.builder.OptionsPickerBuilder;
import com.bigkoo.pickerview.listener.OnOptionsSelectListener;
import com.bigkoo.pickerview.view.OptionsPickerView;
import com.dayu.base.api.Api;
import com.dayu.base.ui.activity.BaseActivity;
import com.dayu.base.ui.adapter.PhotoViewAdapter;
import com.dayu.base.ui.adapter.SpacesItemDecoration;
import com.dayu.order.R;
import com.dayu.order.api.OrderService;
import com.dayu.order.api.protocol.bean.ServiceProviderBean;
import com.dayu.order.api.protocol.bean.ServiceStationBean;
import com.dayu.order.databinding.ActivityOrderPartSendBinding;
import com.dayu.order.presenter.orderpart_send.PartSendContract;
import com.dayu.order.presenter.orderpart_send.PartSendPresenter;
import com.dayu.utils.ToastUtils;
import com.dayu.utils.UIUtils;
import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;
......@@ -43,7 +45,7 @@ public class OrderPartSendActivity extends BaseActivity<PartSendPresenter, Activ
@Override
public void initView() {
initPhotoView();
mBind.titleBack.setOnClickListener(v->dumpBack());
}
//跳转到扫描页面
......@@ -57,7 +59,47 @@ public class OrderPartSendActivity extends BaseActivity<PartSendPresenter, Activ
@Override
public List<String> getImgs() {
return mImages;
List<String> imgs = mImages;
imgs.remove("add");
return imgs;
}
@Override
public void setStationData(ServiceStationBean data) {
mPresenter.company.set(data.getName());
mPresenter.address.set(data.getProvinceName()+data.getCityName()
+data.getDistrictName()+data.getAddress());
mPresenter.contacter.set(data.getName());
mPresenter.contactPhone.set(data.getTelephone());
}
@Override
public void setProviderData(ServiceProviderBean data) {
mPresenter.company.set(data.getName());
mPresenter.address.set(data.getProvinceName()+data.getCityName()
+data.getDistrictName()+data.getAddress());
mPresenter.contacter.set(data.getCompanyConnecter());
mPresenter.contactPhone.set(data.getCompanyConnecterMobile());
}
@Override
public void setCanEdit(boolean canEdit) {
if (!canEdit){
mBind.tvConfirm.setVisibility(View.GONE);
mBind.edtTransCode.setEnabled(false);
mBind.edtRemark.setEnabled(false);
}else {
initPhotoView();
}
}
@Override
public void setImgs(List<String> imgs) {
mBind.photo.addItemDecoration(new SpacesItemDecoration(10));
mBind.photo.setLayoutManager(new GridLayoutManager(mActivity, 5));
mAdapter = new PhotoViewAdapter((ArrayList<String>) imgs, mActivity);
mAdapter.setCanDelete(false);
mBind.photo.setAdapter(mAdapter);
}
......@@ -88,7 +130,6 @@ public class OrderPartSendActivity extends BaseActivity<PartSendPresenter, Activ
if (selectList != null && selectList.size() > 0) {
mImages.remove("add");
for (int a = 0; a < selectList.size(); a++) {
// mImages.add(selectList.get(a).getCompressPath());
if (!TextUtils.isEmpty(selectList.get(a).getCompressPath())) {
mImages.add(selectList.get(a).getCompressPath());
} else {
......
......@@ -389,7 +389,11 @@ public class ProcessOrderActivity extends BaseActivity<ProcessOrderPresenter, Ac
if (mPhotoState == 0) {
mImages.remove("add");
for (int a = 0; a < mSelectList.size(); a++) {
mImages.add(mSelectList.get(a).getCompressPath());
if (!TextUtils.isEmpty(mSelectList.get(a).getCompressPath())){
mImages.add(mSelectList.get(a).getCompressPath());
}else{
mImages.add(mSelectList.get(a).getPath());
}
}
if (mImages.size() < 10) {
mImages.add("add");
......
......@@ -234,13 +234,6 @@ public class OrderAdapter extends CoreAdapter<Order, FragmentOrderdoingItemBindi
holder.tvSettlementDate.setTextColor(mContext.getResources().getColor(R.color.common_text_color));
}
holder.tvSettlementPrice.setText(CommonUtils.getMoneyStr(mContext,item.getSettlementPrice()));
if (TextUtils.isEmpty(item.getSettlementDate())){
holder.tvSettlementDate.setText(mContext.getString(R.string.unknown));
}else{
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date sDate = df.parse(item.getSettlementDate());
holder.tvSettlementDate.setText(df.format(sDate));
}
time = item.getConfirmDoorTime();
break;
......
package com.dayu.order.ui.adapter;
import com.dayu.base.ui.adapter.CoreAdapter;
import com.dayu.order.R;
import com.dayu.order.api.protocol.bean.OrderPartBean;
import com.dayu.order.databinding.ItemOrderPartListBinding;
import com.dayu.order.presenter.orderpart.OrderPartPresenter;
public class OrderPartListAdapter extends CoreAdapter<String,ItemOrderPartListBinding> {
public class OrderPartListAdapter extends CoreAdapter<OrderPartBean,ItemOrderPartListBinding> {
int type;
OrderPartPresenter presenter;
public void setPresenter(OrderPartPresenter presenter) {
this.presenter = presenter;
}
public OrderPartListAdapter(boolean needFoot, int type) {
super(needFoot);
......@@ -12,8 +20,19 @@ public class OrderPartListAdapter extends CoreAdapter<String,ItemOrderPartListBi
}
@Override
protected void onBind(ItemOrderPartListBinding holder, String item, int position) {
protected void onBind(ItemOrderPartListBinding holder, OrderPartBean item, int position) {
super.onBind(holder, item, position);
holder.tvCode.setText(item);
holder.tvCode.setText(item.getCourierNumber());
holder.tvCompany.setText(item.getCourierCompany());
holder.tvDate.setText(item.getCreateTime());
holder.btnStatus.setText(item.getStatus() == 1?R.string.to_be_received_goods:R.string.already_received_goods);
if (type == 1 && item.getStatus() == 1){
holder.btnStatus.setBackgroundResource(R.drawable.btn_blue_commom);
holder.btnStatus.setTextColor(mContext.getResources().getColor(R.color.white));
holder.btnStatus.setOnClickListener(view -> presenter.toDetail(true,item.getId()));
}else{
holder.btnStatus.setTextColor(mContext.getResources().getColor(R.color.common_text_color));
holder.btnStatus.setBackgroundResource(R.drawable.btn_black_react);
}
}
}
......@@ -7,12 +7,17 @@ import com.dayu.base.ui.fragment.BaseFragment;
import com.dayu.common.Constants;
import com.dayu.order.R;
import com.dayu.order.api.protocol.OrderDetail;
import com.dayu.order.api.protocol.bean.OrderPartBean;
import com.dayu.order.common.PartReceiverEvent;
import com.dayu.order.common.PartSendEvent;
import com.dayu.order.databinding.FragmentOrderApplicationPartBinding;
import com.dayu.order.databinding.ItemOrderPartListBinding;
import com.dayu.order.ui.adapter.OrderPartListAdapter;
import com.dayu.provider.event.RefreshApplyPart;
import com.dayu.order.presenter.orderpart.OrderPartContract;
import com.dayu.order.presenter.orderpart.OrderPartPresenter;
import com.dayu.order.ui.adapter.OrderPartAdapter;
import com.dayu.widgets.listener.OnItemClickListener;
import com.umeng.analytics.MobclickAgent;
import org.greenrobot.eventbus.EventBus;
......@@ -29,6 +34,8 @@ import java.util.List;
public class ApplicationOrderPartFragment extends BaseFragment<OrderPartPresenter, FragmentOrderApplicationPartBinding>
implements OrderPartContract.View {
int mType;
public static ApplicationOrderPartFragment newInstance(OrderDetail detail, int type) {
Bundle args = new Bundle();
args.putSerializable(Constants.ORDER_DETAIL, detail);
......@@ -40,18 +47,20 @@ public class ApplicationOrderPartFragment extends BaseFragment<OrderPartPresente
@Override
public void initView() {
int mType = getBundle().getInt(Constants.TYPE);
mType = getBundle().getInt(Constants.TYPE);
mBind.applyPart.setVisibility(mType == 2?View.VISIBLE:View.GONE);
EventBus.getDefault().register(this);
// OrderPartAdapter adapter = new OrderPartAdapter(false);
OrderPartListAdapter adapter = new OrderPartListAdapter(false,mType);
mBind.lvPart.setAdapter(adapter);
List<String> testDatas = new ArrayList<>();
for (int i=0;i<10;i++){
testDatas.add("test data "+i);
}
adapter.setData(testDatas);
adapter.setPresenter(mPresenter);
adapter.setOnItemClickListener((item, bind) -> {
if (mType == 1 && item.getStatus() ==1 ){
mPresenter.toDetail(true,item.getId());
}else{
mPresenter.toDetail(false,item.getId());
}
});
}
@Override
......@@ -81,9 +90,9 @@ public class ApplicationOrderPartFragment extends BaseFragment<OrderPartPresente
super.setUserVisibleHint(isVisibleToUser);
String tag;
if (getArguments().getInt(Constants.TYPE) == 1) {
tag = "ApplyPartFragment";
tag = "PartReceiveFragment";
} else {
tag = "ReturnPartFragment";
tag = "PartSendFragment";
}
if (getUserVisibleHint()) {
MobclickAgent.onPageEnd(tag);
......@@ -91,4 +100,21 @@ public class ApplicationOrderPartFragment extends BaseFragment<OrderPartPresente
MobclickAgent.onPageStart(tag);
}
}
@Override
public void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
@Subscribe
public void refreshReceive(PartReceiverEvent event){
if (mType == 1)
mPresenter.refresh();
}
@Subscribe
public void refreshSend(PartSendEvent event){
if (mType == 2)
mPresenter.refresh();
}
}
......@@ -114,7 +114,7 @@ public class OperateDetailFragment extends BaseFragment<SImplePresenter, Fragmen
@Override
public void onKeyboardHide() {
weakHandler.postDelayed(() -> {
mBind.btnComment.setVisibility(View.VISIBLE);
// mBind.btnComment.setVisibility(View.VISIBLE);
}, 100);
}
});
......
......@@ -100,10 +100,14 @@
android:screenOrientation="portrait" />
<activity
android:name=".ui.activity.OrderPartReceiveActivity"
android:screenOrientation="portrait" />
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustPan"
/>
<activity
android:name=".ui.activity.OrderPartSendActivity"
android:screenOrientation="portrait" />
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustPan"
/>
</application>
</manifest>
......@@ -6,33 +6,42 @@
android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/rl_title"
style="@style/title">
<TextView
android:id="@+id/tv_title"
style="@style/text_title"
android:text="@string/order_detail" />
<ImageView
android:id="@+id/title_back"
style="@style/title_image_back" />
<ImageView
style="@style/card_line"
android:layout_alignParentBottom="true" />
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/title_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingLeft="15dp"
android:paddingRight="15dp"
android:src="@drawable/back_btn_normal" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="12dp"
android:layout_marginRight="5dp"
android:layout_marginTop="@dimen/dp_12"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"
android:layout_marginBottom="5dp"
android:gravity="center">
<Button
android:id="@+id/btn_detail"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="28dp"
android:layout_height="35dp"
android:background="@drawable/detail_first_selector"
android:gravity="center"
android:visibility="invisible"
......@@ -41,7 +50,7 @@
android:id="@+id/btn_operate"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="28dp"
android:layout_height="35dp"
android:background="@drawable/detail_center_selector"
android:gravity="center"
android:visibility="gone"
......@@ -50,7 +59,7 @@
android:id="@+id/btn_server"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="28dp"
android:layout_height="35dp"
android:background="@drawable/detail_center_selector"
android:gravity="center"
android:visibility="invisible"
......@@ -59,7 +68,7 @@
<Button
android:id="@+id/btn_part"
android:layout_width="0dp"
android:layout_height="28dp"
android:layout_height="35dp"
android:layout_weight="1"
android:visibility="gone"
android:background="@drawable/detail_end_selector"
......
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
<data>
<variable
name="presenter"
type="com.dayu.order.presenter.orderpart_receive.PartRecievePresenter" />
</data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/cl_white"
android:orientation="vertical"
android:padding="1dp">
android:background="@color/cl_white">
<RelativeLayout
android:id="@+id/title_idea"
......@@ -31,18 +37,22 @@
</RelativeLayout>
<ImageView style="@style/card_line" />
<ImageView
android:layout_below="@id/title_idea"
android:id="@+id/divider"
style="@style/card_line" />
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
android:layout_above="@+id/tv_commit"
android:layout_below="@+id/divider">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusableInTouchMode="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="vertical">
......@@ -156,6 +166,7 @@
android:gravity="top"
android:hint="@string/part_recieve_edit_hint"
android:padding="10dp"
android:text="@={presenter.remark}"
android:textColor="@color/cl_home_title_text_color"
android:textColorHint="@color/cl_selector_hui"
android:textSize="@dimen/sp_13.3" />
......@@ -169,14 +180,20 @@
android:layout_marginBottom="15dp" />
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
<TextView
android:id="@+id/tv_commit"
style="@style/btn_bottom_common"
android:layout_width="200dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_gravity="center_horizontal"
android:layout_marginTop="5dp"
android:layout_marginBottom="15dp"
android:text="@string/confirm_receive_goods"
android:onClick="@{()->presenter.confirmReceive()}"
/>
</LinearLayout>
</RelativeLayout>
</layout>
\ No newline at end of file
</layout>
......@@ -9,12 +9,11 @@
</data>
<LinearLayout
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/cl_white"
android:orientation="vertical"
android:padding="1dp">
>
<RelativeLayout
android:id="@+id/title_idea"
......@@ -39,18 +38,22 @@
</RelativeLayout>
<ImageView style="@style/card_line" />
<ImageView
android:layout_below="@id/title_idea"
android:id="@+id/divider"
style="@style/card_line" />
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
android:layout_height="match_parent"
android:layout_above="@+id/tv_confirm"
android:layout_below="@+id/divider">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusableInTouchMode="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="vertical">
......@@ -66,7 +69,6 @@
android:textSize="14sp" />
<LinearLayout style="@style/ll_part_content">
<TextView
......@@ -75,7 +77,8 @@
<TextView
android:id="@+id/tv_company"
style="@style/tv_part_content" />
style="@style/tv_part_content"
android:text="@{presenter.company}" />
</LinearLayout>
<LinearLayout style="@style/ll_part_content">
......@@ -86,7 +89,8 @@
<TextView
android:id="@+id/tv_address"
style="@style/tv_part_content" />
style="@style/tv_part_content"
android:text="@{presenter.address}" />
</LinearLayout>
<LinearLayout style="@style/ll_part_content">
......@@ -97,7 +101,8 @@
<TextView
android:id="@+id/tv_name"
style="@style/tv_part_content" />
style="@style/tv_part_content"
android:text="@{presenter.contacter}" />
</LinearLayout>
<LinearLayout style="@style/ll_part_content">
......@@ -108,7 +113,8 @@
<TextView
android:id="@+id/tv_phone"
style="@style/tv_part_content" />
style="@style/tv_part_content"
android:text="@{presenter.contactPhone}" />
</LinearLayout>
......@@ -126,40 +132,40 @@
<TextView
style="@style/tv_course_left"
android:layout_width="wrap_content"
android:layout_marginTop="5dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="5dp"
android:drawableLeft="@drawable/icon_star_necessary"
android:text="@string/part_goods_list" />
<EditText
android:id="@+id/edt_remark"
android:layout_width="match_parent"
android:layout_height="120dp"
android:layout_gravity="center"
android:layout_marginTop="5dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="5dp"
android:layout_marginRight="10dp"
android:background="@drawable/bg_input_gray_react"
android:gravity="top"
android:hint="@string/part_send_edit_hint"
android:padding="10dp"
android:text="@{presenter.goodsListStr}"
android:text="@={presenter.goodsListStr}"
android:textColor="@color/cl_home_title_text_color"
android:textColorHint="@color/cl_selector_hui"
android:textSize="@dimen/sp_13.3" />
<android.support.v7.widget.RecyclerView
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:id="@+id/photo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="@dimen/dp_10"
/>
android:layout_marginRight="10dp" />
<LinearLayout style="@style/ll_part_bottom"
<LinearLayout
style="@style/ll_part_bottom"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
>
android:layout_marginRight="10dp">
<TextView
style="@style/part_left_text"
......@@ -169,21 +175,22 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="35dp"
android:orientation="horizontal"
android:background="@drawable/bg_input_gray_react"
android:gravity="center_vertical"
>
android:orientation="horizontal">
<EditText
android:id="@+id/edt_trans_code"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@color/transparent"
android:padding="5dp"
android:singleLine="true"
android:text="@{presenter.courierNum}"
/>
android:textColor="@color/common_text_color"
android:text="@={presenter.courierNum}"
android:textSize="@dimen/sp_13.3" />
<ImageView
android:id="@+id/scan"
android:layout_width="wrap_content"
......@@ -195,11 +202,11 @@
</LinearLayout>
<LinearLayout style="@style/ll_part_bottom"
<LinearLayout
style="@style/ll_part_bottom"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginBottom="15dp"
>
android:layout_marginBottom="15dp">
<TextView
style="@style/part_left_text"
......@@ -213,26 +220,29 @@
android:layout_height="35dp"
android:background="@drawable/btn_gray_commom"
android:drawableRight="@drawable/icon_arrow_down_gray32"
android:paddingRight="15dp"
android:gravity="center"
android:hint="@string/setlect_trans_company_hint"
android:text="@{presenter.courierCompany}"
android:onClick="@{()->presenter.getCourier()}"
/>
android:paddingRight="15dp"
android:text="@{presenter.courierCompany}" />
</LinearLayout>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
<TextView
android:id="@+id/tv_confirm"
style="@style/btn_bottom_common"
android:layout_width="200dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="15dp"
android:layout_marginBottom="10dp"
android:layout_marginTop="5dp"
android:onClick="@{()->presenter.confirmSend()}"
android:text="@string/confirm_send_goods"
/>
android:text="@string/confirm_send_goods" />
</LinearLayout>
</RelativeLayout>
</layout>
\ No newline at end of file
......@@ -137,6 +137,7 @@
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
<Button
android:visibility="gone"
android:id="@+id/btn_comment"
android:layout_width="match_parent"
android:layout_height="35dp"
......
......@@ -62,7 +62,7 @@
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:layout_margin="10dp"
android:text="待收货"
android:text="@string/to_be_received_goods"
/>
</RelativeLayout>
</layout>
\ No newline at end of file
......@@ -42,4 +42,9 @@
<string name="pls_fill_send_info">请填写发货信息</string>
<string name="part_recieve_edit_hint">收货如发现异常情况,请详细说明情况。</string>
<string name="part_send_edit_hint">请详细说明货物品牌品名型号和数量</string>
<string name="to_be_received_goods">待收货</string>
<string name="already_received_goods">已收货</string>
<string name="pls_fill_goods_list">请填写货物清单</string>
<string name="pls_fill_trans_code">请填写物流单号</string>
<string name="pls_fill_trans_company">请选择物流公司</string>
</resources>
......@@ -93,8 +93,8 @@ public class ProductInstructionFragment extends BaseFragment<SImplePresenter, Fr
mBind.tvCompany.setText(mDetail.getProviderName());
mBind.tvCompanyPn.setText(mDetail.getPn());
mBind.tvSinglePrice.setText(CommonUtils.getIntMoneyStr(mActivity, mDetail.getPrice()));
mBind.tvMarketPrice.setText(CommonUtils.getIntMoneyStr(mActivity, mDetail.getMarketPrice()));
// mBind.tvMarketPrice.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);
mBind.tvMarketPrice.setText(" "+CommonUtils.getIntMoneyStr(mActivity, mDetail.getMarketPrice())+" ");
mBind.tvMarketPrice.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);
mBind.tvDesc.setText(mDetail.getBrief());
}
......
......@@ -184,7 +184,7 @@ public class SaleInstructionFragment extends BaseFragment<SImplePresenter, Fragm
@Override
public void onKeyboardHide() {
weakHandler.postDelayed(() -> {
mBind.btnComment.setVisibility(View.VISIBLE);
// mBind.btnComment.setVisibility(View.VISIBLE);
}, 100);
}
});
......
......@@ -6,26 +6,35 @@
android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/rl_title"
style="@style/title">
<TextView
android:id="@+id/tv_title"
style="@style/text_title"
android:text="@string/product_detail" />
<ImageView
android:id="@+id/title_back"
style="@style/title_image_back" />
<ImageView
style="@style/card_line"
android:layout_alignParentBottom="true" />
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:paddingRight="8dp"
android:orientation="horizontal">
<ImageView
android:id="@+id/title_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingLeft="15dp"
android:paddingRight="15dp"
android:src="@drawable/back_btn_normal" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"
android:layout_marginBottom="5dp"
android:gravity="center">
<Button
......@@ -48,7 +57,9 @@
</LinearLayout>
</LinearLayout>
<ImageView style="@style/card_line" />
<ImageView
style="@style/card_line"
android:layout_alignParentBottom="true" />
<FrameLayout
android:id="@+id/fl_container"
......
......@@ -155,6 +155,7 @@
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
<Button
android:visibility="gone"
android:id="@+id/btn_comment"
android:layout_width="match_parent"
android:layout_height="40dp"
......
<resources>
<string name="app_name">SaleCenter</string>
<string name="product_detail">商品详情</string>
</resources>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment