Commit cac9468f by Yu-Tung

上傳影片,影片分割後上傳&廠課破圖&加上傳完成或失敗的dialog&解決

parent 279c854b
AudiovisualRecord
\ No newline at end of file
......@@ -64,22 +64,6 @@ public class LoginActivity extends BaseActivity implements LoginContract.View, V
switch (v.getId()) {
case R.id.btn_login:
btnLogin.setEnabled(false);
// showProgressDialog("登入中");
// new Thread(){
// public void run(){
// try{
// sleep(5000);
// presenter.onLogin("", "");
// dismissProgressDialog();
// }
// catch(Exception e){
// e.printStackTrace();
// }
// finally{
// dismissProgressDialog();
// }
// }
// }.start();
presenter.onLogin("", "");
break;
......@@ -106,4 +90,9 @@ public class LoginActivity extends BaseActivity implements LoginContract.View, V
intent.putExtras(bag);
startActivity(intent);
}
@Override
public void setButtonEnable(Boolean boo) {
btnLogin.setEnabled(boo);
}
}
......@@ -6,6 +6,7 @@ import com.example.audiovisualrecord.base.BaseView;
public interface LoginContract {
interface View extends BaseView {
void onCompleteLogin(String token);
void setButtonEnable(Boolean boo);
}
interface Presenter<V extends View> extends BaseAttacher<V> {
......
......@@ -27,7 +27,6 @@ public class LoginPresenter<V extends LoginContract.View> implements LoginContra
public LoginPresenter(V view) {
this.view = view;
api = HttpMethods.getInstance().getApi();
// loginPreferences = new LoginPreferences(context);
compositeDisposable = new CompositeDisposable();
}
......@@ -41,11 +40,8 @@ public class LoginPresenter<V extends LoginContract.View> implements LoginContra
.subscribeWith(new DisposableObserver<LoginResponse>() {
@Override
public void onNext(LoginResponse loginResponse) {
Log.e("next", loginResponse.getmMsg());
if ("True".equals(loginResponse.getmResult())) {
// loginPreferences.setToken(loginResponse.getmToken());
view.onCompleteLogin(loginResponse.getmMsg());
} else {
view.showDialogCaveatMessage("登入失敗");
......@@ -60,12 +56,11 @@ public class LoginPresenter<V extends LoginContract.View> implements LoginContra
view.showDialogCaveatMessage("請檢查網路狀態");
}
view.showDialogCaveatMessage("登入失敗");
view.setButtonEnable(true);
}
@Override
public void onComplete() {
Log.e("com", "asdasd");
}
})
);
......
......@@ -25,13 +25,16 @@ import com.example.audiovisualrecord.MagicFileChooser;
import com.example.audiovisualrecord.R;
import com.example.audiovisualrecord.base.BaseActivity;
import com.example.audiovisualrecord.ui.chooseitem.ChooseDeviceItemData;
import com.example.audiovisualrecord.utils.api.apidata.CORequest.COResponse;
import com.example.audiovisualrecord.utils.api.apidata.searchco.COResponse;
import com.example.audiovisualrecord.utils.api.apidata.searchtype.TYPEResponse;
import com.example.audiovisualrecord.utils.api.searcheqkd.EQKDResponse;
import com.example.audiovisualrecord.utils.api.searchmntfct.MNTFCTResponse;
import com.example.audiovisualrecord.utils.api.searchpmfct.PMFCTResponse;
import com.example.audiovisualrecord.utils.api.searchshift.SHIFTResponse;
import com.example.audiovisualrecord.utils.api.searchpz.PZResponse;
import com.example.audiovisualrecord.utils.api.searchdp.DPResponse;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
......@@ -73,7 +76,8 @@ public class MainActivity extends BaseActivity implements MainContract.View, Vie
String token, imageFilePath;
int countFile = 0;
TextView tvCompany, tvFactory, tvClass, tvUnit, tvShootType;
private TextView tvCompany, tvFactory, tvClass, tvUnit, tvShootType;
private TextView textCompany, textFactory, textClass, textUnit, textShootType;
private MainPresenter mPresenter;
private MainData mMainData;
private ChooseDeviceItemData mChooseDeviceItemData;
......@@ -117,6 +121,12 @@ public class MainActivity extends BaseActivity implements MainContract.View, Vie
tvUnit.setOnClickListener(this);
tvClass.setOnClickListener(this);
tvShootType.setOnClickListener(this);
textCompany = findViewById(R.id.text_company);
textUnit = findViewById(R.id.text_unit);
textShootType = findViewById(R.id.text_shoottype);
textFactory = findViewById(R.id.text_factory);
textClass = findViewById(R.id.text_class);
}
private void pickImageFromGallery() {
......@@ -236,17 +246,13 @@ public class MainActivity extends BaseActivity implements MainContract.View, Vie
if (data.getClipData() != null) {
for (int i = 0; i < data.getClipData().getItemCount(); i++) {
uriList.add(getPath(data.getClipData().getItemAt(i).getUri()));
Log.e("gggg", "" + uriList.get(i));
// Log.e("gggg", "" + uriList.get(i));
}
} else if (Build.VERSION.SDK_INT >= 16 && data.getClipData() == null) {
uriList.add(getPath(data.getData()));
Log.e("eee", getPath(data.getData()));
}
//照片的uri
mPresenter.onGetSid(uriList,getResourceString(R.string.on_upload_image));
// onUploadFile(uriList, getResourceString(R.string.on_upload_image));
// onUploadFile1();
}
if (requestCode == PICK_VIDEO_FROM_GALLERY_REQUEST_CODE && resultCode == RESULT_OK) {
......@@ -259,12 +265,8 @@ public class MainActivity extends BaseActivity implements MainContract.View, Vie
for (int i = 0; i < count; i++) {
uriList.add(getPath(data.getClipData().getItemAt(i).getUri()));
filename.add(FileUtil.fileName(getPath(data.getClipData().getItemAt(i).getUri())));
Log.e("gggg", "" + uriList.get(i));
Log.e("dddd", "" + filename.get(i));
// mPresenter.segVideo(uriList.get(i), filename.get(i));
// onUploadFile(uriList, getResourceString(R.string.on_upload_vedio));
// Log.e("gggg", "" + uriList.get(i));
// Log.e("dddd", "" + filename.get(i));
}
Log.e("aaa", count + "");
......@@ -274,21 +276,8 @@ public class MainActivity extends BaseActivity implements MainContract.View, Vie
String path = FileUtil.getFileAbsolutePath(this, data.getData());
String name = FileUtil.fileName(path);
uriList.add(path);
// onUploadFile(uriList, getResourceString(R.string.on_upload_vedio));
ArrayList segVideoList = new ArrayList();
segVideoList = mPresenter.segVideo(path, name);
for (int i=0;i<segVideoList.size();i++)
Log.e("aaa",segVideoList.get(i).toString());
mPresenter.onGetSid(segVideoList,getResourceString(R.string.on_upload_vedio));
Log.e("path", path);
mPresenter.segVideo(path, getResourceString(R.string.on_upload_vedio));
// TODO here====================
// onUploadFile(compressList, getResourceString(R.string.on_upload_vedio));
// onUploadFile(uriList, getResourceString(R.string.on_upload_vedio));
//影片的uri
}
......@@ -296,10 +285,9 @@ public class MainActivity extends BaseActivity implements MainContract.View, Vie
}
if (requestCode == PICK_FILE_REQUEST_CODE && resultCode == RESULT_OK) {
Uri selectedFile = data.getData();
Log.e("ggggg", "" + selectedFile);
String filePath = MagicFileChooser.getAbsolutePathFromUri(this, selectedFile);
Log.e("filePath", filePath + "");
// Log.e("filePath", filePath + "");
// Log.e("ggggg", "" + selectedFile);
checkFileTypeAndOpen(filePath, selectedFile);
}
}
......@@ -425,31 +413,31 @@ public class MainActivity extends BaseActivity implements MainContract.View, Vie
}
@Override
public void setPZData(List<MNTFCTResponse> adapterData) {
public void setPZData(List<PZResponse> adapterData) {
dialogString.clear();
mMainData.setmMNTFCTDataList(adapterData);
for (MNTFCTResponse mMNTFCTResponse : adapterData) {
dialogString.add(mMNTFCTResponse.getmPZNM());
mMainData.setmPZDataList(adapterData);
for (PZResponse mPZResponse : adapterData) {
dialogString.add(mPZResponse.getmPZNM());
}
showItemDialog(dialogString, onFavtoryAreaDialogItemClick);
}
@Override
public void setDPNMData(List<PMFCTResponse> adapterData) {
public void setDPNMData(List<DPResponse> adapterData) {
dialogString.clear();
mMainData.setmPMFCTDataList(adapterData);
for (PMFCTResponse mPMFCTResponse : adapterData) {
dialogString.add(mPMFCTResponse.getmDPNM());
mMainData.setmDPDataList(adapterData);
for (DPResponse mDPResponse : adapterData) {
dialogString.add(mDPResponse.getmDPNM());
}
showItemDialog(dialogString, onFactoryClassDialogItemClick);
}
@Override
public void setEQKDData(List<EQKDResponse> adapterData) {
public void setEQKDData(List<SHIFTResponse> adapterData) {
dialogString.clear();
mMainData.setmEQKDDataList(adapterData);
for (EQKDResponse mEQKDResponse : adapterData) {
dialogString.add(mEQKDResponse.getmShift());
mMainData.setmSHIFTDataList(adapterData);
for (SHIFTResponse mSHIFTResponse : adapterData) {
dialogString.add(mSHIFTResponse.getmShift());
}
showItemDialog(dialogString, onClassUnitDialogItemClick);
}
......@@ -464,10 +452,17 @@ public class MainActivity extends BaseActivity implements MainContract.View, Vie
showItemDialog(dialogString, onShootTypeCategoryDialogItemClick);
}
//如果能改成用retrofit加rxjava最好,已經嘗試過三天的,可能有缺什麼,不過緊急所以先求功能
@Override
protected void onPause() {
super.onPause();
dismissProgressDialog();
}
//如果能改成用retrofit加rxjava最好,已經嘗試過,可能有缺什麼,不過緊急所以先求功能
@Override
public void onUploadFile(final ArrayList<String> uriList, String type, final String sid) {
uploadPath = mPresenter.onJudgmentPath(pathCompany, pathFactoryArea,pathFactoryClass,pathClass,pathShootType);
dismissProgressDialog();
showProgressDialog(type);
new Thread(new Runnable() {
@Override
......@@ -498,19 +493,41 @@ public class MainActivity extends BaseActivity implements MainContract.View, Vie
.method("POST", body)
.build();
Log.e("test_url", request.url().toString());
try {
Response response = client.newCall(request).execute();
Log.e("response", response.body().string());
final String responsemessage = response.message();
final String responsebody = response.body().string();
JSONObject json = null;
try {
json = new JSONObject(responsebody);
} catch (JSONException e) {
e.printStackTrace();
}
Log.e("response", responsebody);
// dismissProgressDialog();
if (json.get("success").equals("true"))
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
dismissProgressDialog();
showDialogMessage("上傳完成");
}
});
// Log.e("isSuccess",json.get("IsSuccess").toString());
mPresenter.onLogoutSid(sidData);
} catch (IOException e) {
e.printStackTrace();
mPresenter.onLogoutSid(sidData); //登出sid
} catch (final IOException | JSONException e) {
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
dismissProgressDialog();
// showDialogCaveatMessage("上傳失敗");
e.printStackTrace();
showDialogMessage("上傳失敗");
Log.e("error", "" + e.getMessage());
}
});
}
}
}).start();
}
......@@ -518,7 +535,7 @@ public class MainActivity extends BaseActivity implements MainContract.View, Vie
private DialogInterface.OnClickListener onCompanyDialogItemClick = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
tvCompany.setText(mMainData.getmCODataList().get(which).getcONM());
textCompany.setText(mMainData.getmCODataList().get(which).getcONM());
pathCompany = mMainData.getmCODataList().get(which).getcONM();
mChooseDeviceItemData.setCompany(mMainData.getmCODataList().get(which).getcONM());
mChooseDeviceItemData.setCompanyId(mMainData.getmCODataList().get(which).getcO());
......@@ -529,21 +546,21 @@ public class MainActivity extends BaseActivity implements MainContract.View, Vie
private DialogInterface.OnClickListener onFavtoryAreaDialogItemClick = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
tvFactory.setText(mMainData.getmMNTFCTDataList().get(which).getmPZNM());
pathFactoryArea = mMainData.getmMNTFCTDataList().get(which).getmPZNM();
mChooseDeviceItemData.setFactoryAreaName(mMainData.getmMNTFCTDataList().get(which).getmPZNM());
mChooseDeviceItemData.setFactoryAreaId(mMainData.getmMNTFCTDataList().get(which).getmPZ());
textFactory.setText(mMainData.getmPZDataList().get(which).getmPZNM());
pathFactoryArea = mMainData.getmPZDataList().get(which).getmPZNM();
mChooseDeviceItemData.setFactoryAreaName(mMainData.getmPZDataList().get(which).getmPZNM());
mChooseDeviceItemData.setFactoryAreaId(mMainData.getmPZDataList().get(which).getmPZ());
}
};
private DialogInterface.OnClickListener onFactoryClassDialogItemClick = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
tvUnit.setText(mMainData.getmPMFCTDataList().get(which).getmDPNM());
pathFactoryClass = mMainData.getmPMFCTDataList().get(which).getmDPNM();
mChooseDeviceItemData.setFactoryClassCode(mMainData.getmPMFCTDataList().get(which).getmDP());
mChooseDeviceItemData.setFactoryClass(mMainData.getmPMFCTDataList().get(which).getmDPNM());
mChooseDeviceItemData.setProductionPlantId(mMainData.getmPMFCTDataList().get(which).getmPMFCT());
textUnit.setText(mMainData.getmDPDataList().get(which).getmDPNM());
pathFactoryClass = mMainData.getmDPDataList().get(which).getmDPNM();
mChooseDeviceItemData.setFactoryClassCode(mMainData.getmDPDataList().get(which).getmDP());
mChooseDeviceItemData.setFactoryClass(mMainData.getmDPDataList().get(which).getmDPNM());
mChooseDeviceItemData.setProductionPlantId(mMainData.getmDPDataList().get(which).getmPMFCT());
}
};
......@@ -551,16 +568,16 @@ public class MainActivity extends BaseActivity implements MainContract.View, Vie
private DialogInterface.OnClickListener onClassUnitDialogItemClick = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
tvClass.setText(mMainData.getmEQKDDataList().get(which).getmShift());
pathClass = mMainData.getmEQKDDataList().get(which).getmShift();
mChooseDeviceItemData.setDeviceCategory(mMainData.getmEQKDDataList().get(which).getmShift());
textClass.setText(mMainData.getmSHIFTDataList().get(which).getmShift());
pathClass = mMainData.getmSHIFTDataList().get(which).getmShift();
mChooseDeviceItemData.setDeviceCategory(mMainData.getmSHIFTDataList().get(which).getmShift());
}
};
private DialogInterface.OnClickListener onShootTypeCategoryDialogItemClick = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
tvShootType.setText(mMainData.getmTYPEDataList().get(which).getmType());
textShootType.setText(mMainData.getmTYPEDataList().get(which).getmType());
pathShootType = mMainData.getmTYPEDataList().get(which).getmType();
mChooseDeviceItemData.setShootType(mMainData.getmTYPEDataList().get(which).getmType());
}
......
......@@ -2,12 +2,12 @@ package com.example.audiovisualrecord.ui.main;
import com.example.audiovisualrecord.base.BaseView;
import com.example.audiovisualrecord.utils.api.apidata.CORequest.COResponse;
import com.example.audiovisualrecord.utils.api.apidata.searchco.COResponse;
import com.example.audiovisualrecord.utils.api.apidata.searchtype.TYPEResponse;
import com.example.audiovisualrecord.utils.api.searcheqkd.EQKDResponse;
import com.example.audiovisualrecord.utils.api.searchmntfct.MNTFCTResponse;
import com.example.audiovisualrecord.utils.api.searchpmfct.PMFCTResponse;
import com.example.audiovisualrecord.utils.api.searchshift.SHIFTResponse;
import com.example.audiovisualrecord.utils.api.searchpz.PZResponse;
import com.example.audiovisualrecord.utils.api.searchdp.DPResponse;
import java.util.ArrayList;
import java.util.List;
......@@ -15,20 +15,19 @@ import java.util.List;
public interface MainContract {
interface View extends BaseView {
void setCOData(List<COResponse> adapterData);
void setPZData(List<MNTFCTResponse> adapterData);
void setDPNMData(List<PMFCTResponse> adapterData);
void setEQKDData(List<EQKDResponse> adapterData);
void setPZData(List<PZResponse> adapterData);
void setDPNMData(List<DPResponse> adapterData);
void setEQKDData(List<SHIFTResponse> adapterData);
void setTYPEData(List<TYPEResponse> adapterData);
void onUploadFile(ArrayList<String> uriList, String type,String sid);
}
interface Presenter<V extends MainContract.View> {
// void onGetDisposableToken(String DeviceId);
void onGetComData();
void onGetPZData();
void onGetDPData(String CO, String PZ);
void onGetSHIFTData(String CO, String PMFCT);
ArrayList<String> segVideo(String path,String name);
void segVideo(String path,String name);
void onGetTYPEData(String CO,String PMFCT);
void onGetSid(ArrayList<String> uriList, String type);
void onLogoutSid(String sid);
......
package com.example.audiovisualrecord.ui.main;
import com.example.audiovisualrecord.utils.api.apidata.CORequest.COResponse;
import com.example.audiovisualrecord.utils.api.apidata.searchco.COResponse;
import com.example.audiovisualrecord.utils.api.apidata.searchtype.TYPEResponse;
import com.example.audiovisualrecord.utils.api.searcheqkd.EQKDResponse;
import com.example.audiovisualrecord.utils.api.searchmntfct.MNTFCTResponse;
import com.example.audiovisualrecord.utils.api.searchpmfct.PMFCTResponse;
import com.example.audiovisualrecord.utils.api.searchshift.SHIFTResponse;
import com.example.audiovisualrecord.utils.api.searchpz.PZResponse;
import com.example.audiovisualrecord.utils.api.searchdp.DPResponse;
import java.util.List;
public class MainData {
// private String mMNTCO="";//保養公司代碼
// private String mMNTFCT="";//保養廠代碼
// private String mCO="";//公司代碼
// private String mPMFCT="";//生產廠代碼
// private String mPMFCTNM="";//生產廠代碼
// private String mEQKD="";//設備類別代碼
// private String mEQKDNM="";//設備類別名稱
// private String mEQNO="";//設備編號
// private String mEQNM="";//設備名稱
// private String mNTCO="";//保養公司代碼
private List<COResponse> mCODataList;
private List<MNTFCTResponse> mMNTFCTDataList;
private List<PMFCTResponse> mPMFCTDataList;
private List<EQKDResponse> mEQKDDataList;
private List<TYPEResponse> mTYPEDataList;
private List<COResponse> mCODataList; //公司代碼
private List<PZResponse> mPZDataList; //廠區代碼
private List<DPResponse> mDPDataList; //廠課代碼
private List<SHIFTResponse> mSHIFTDataList; //班別代碼
private List<TYPEResponse> mTYPEDataList; //錄影類型
private String MSidData;
......@@ -32,32 +21,32 @@ public class MainData {
return mCODataList;
}
public List<MNTFCTResponse> getmMNTFCTDataList() {
return mMNTFCTDataList;
public List<PZResponse> getmPZDataList() {
return mPZDataList;
}
public void setmMNTFCTDataList(List<MNTFCTResponse> mMNTFCTDataList) {
this.mMNTFCTDataList = mMNTFCTDataList;
public void setmPZDataList(List<PZResponse> mPZDataList) {
this.mPZDataList = mPZDataList;
}
public void setmCODataList(List<COResponse> mCODataList) {
this.mCODataList = mCODataList;
}
public List<PMFCTResponse> getmPMFCTDataList() {
return mPMFCTDataList;
public List<DPResponse> getmDPDataList() {
return mDPDataList;
}
public void setmPMFCTDataList(List<PMFCTResponse> mPMFCTDataList) {
this.mPMFCTDataList = mPMFCTDataList;
public void setmDPDataList(List<DPResponse> mDPDataList) {
this.mDPDataList = mDPDataList;
}
public List<EQKDResponse> getmEQKDDataList() {
return mEQKDDataList;
public List<SHIFTResponse> getmSHIFTDataList() {
return mSHIFTDataList;
}
public void setmEQKDDataList(List<EQKDResponse> mEQKDDataList) {
this.mEQKDDataList = mEQKDDataList;
public void setmSHIFTDataList(List<SHIFTResponse> mSHIFTDataList) {
this.mSHIFTDataList = mSHIFTDataList;
}
public List<TYPEResponse> getmTYPEDataList() {
......@@ -76,83 +65,4 @@ public class MainData {
this.MSidData = MSidData;
}
// public String getmCO() {
// return mMNTCO;
// }
//
// public void setmCO(String mMNTCO) {
// this.mMNTCO = mMNTCO;
// }
//
// public String getmPZ() {
// return mMNTFCT;
// }
//
// public void setmPZ(String mMNTFCT) {
// this.mMNTFCT = mMNTFCT;
// }
//
// public String getmCO() {
// return mCO;
// }
//
// public void setmCO(String mCO) {
// this.mCO = mCO;
// }
//
// public String getmPMFCT() {
// return mPMFCT;
// }
//
// public void setmPMFCT(String mPMFCT) {
// this.mPMFCT = mPMFCT;
// }
//
// public String getmDPNM() {
// return mPMFCTNM;
// }
//
// public void setmDPNM(String mPMFCTNM) {
// this.mPMFCTNM = mPMFCTNM;
// }
//
// public String getmEQKD() {
// return mEQKD;
// }
//
// public void setmEQKD(String mEQKD) {
// this.mEQKD = mEQKD;
// }
//
// public String getmEQKDNM() {
// return mEQKDNM;
// }
//
// public void setmEQKDNM(String mEQKDNM) {
// this.mEQKDNM = mEQKDNM;
// }
//
// public String getmEQNO() {
// return mEQNO;
// }
//
// public void setmEQNO(String mEQNO) {
// this.mEQNO = mEQNO;
// }
//
// public String getmEQNM() {
// return mEQNM;
// }
//
// public void setmEQNM(String mEQNM) {
// this.mEQNM = mEQNM;
// }
//
// public String getmPZ() {
// return mNTCO;
// }
//
// public void setmPZ(String mNTCO) {
// this.mNTCO = mNTCO;
// }
}
package com.example.audiovisualrecord.ui.main;
import android.os.Environment;
import android.text.LoginFilter;
import android.util.Log;
import com.arthenica.mobileffmpeg.Config;
......@@ -11,23 +10,22 @@ import com.example.audiovisualrecord.R;
import com.example.audiovisualrecord.utils.api.ApiService;
import com.example.audiovisualrecord.utils.api.HttpMethods;
import com.example.audiovisualrecord.utils.api.apidata.CORequest.CORequest;
import com.example.audiovisualrecord.utils.api.apidata.CORequest.COResultList;
import com.example.audiovisualrecord.utils.api.apidata.searchco.CORequest;
import com.example.audiovisualrecord.utils.api.apidata.searchco.COResultList;
import com.example.audiovisualrecord.utils.api.apidata.logoutsid.LogoutSidResponse;
import com.example.audiovisualrecord.utils.api.apidata.searchsid.SIDDataList;
import com.example.audiovisualrecord.utils.api.apidata.searchtype.TYPERequest;
import com.example.audiovisualrecord.utils.api.apidata.searchtype.TYPEResultList;
import com.example.audiovisualrecord.utils.api.searcheqkd.EQKDRequest;
import com.example.audiovisualrecord.utils.api.searcheqkd.EQKDResultList;
import com.example.audiovisualrecord.utils.api.searchmntfct.MNTFCTRequest;
import com.example.audiovisualrecord.utils.api.searchmntfct.MNTFCTResultList;
import com.example.audiovisualrecord.utils.api.searchpmfct.PMFCTRequest;
import com.example.audiovisualrecord.utils.api.searchpmfct.PMFCTResultList;
import com.example.audiovisualrecord.utils.api.searchshift.SHIFTRequest;
import com.example.audiovisualrecord.utils.api.searchshift.SHIFTResultList;
import com.example.audiovisualrecord.utils.api.searchpz.PZRequest;
import com.example.audiovisualrecord.utils.api.searchpz.PZResultList;
import com.example.audiovisualrecord.utils.api.searchdp.DPRequest;
import com.example.audiovisualrecord.utils.api.searchdp.DPResultList;
import com.example.audiovisualrecord.utils.rxjava.SchedulerProviderImp;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.observers.DisposableObserver;
......@@ -45,11 +43,6 @@ public class MainPresenter<V extends MainContract.View> implements MainContract.
private String KEY_SEARCH_TYPE = "145ce81d-7bae-4848-a38a-e0e738385681";
private String USER_ID = "N000158385";
// private String pathCompany = "";
// private String pathFactoryArea = "";
// private String pathFactoryClass = "";
// private String pathClass = "";
// private String pathShootType = "";
private V view;
private String LOGIN_AUTHORIZED_ID = "acd9be92-46bf-4185-8721-5b60c67f0742";
private ApiService api;
......@@ -94,15 +87,15 @@ public class MainPresenter<V extends MainContract.View> implements MainContract.
@Override
public void onGetPZData() {
String url = view.getResourceString(R.string.api_on_getMNTFCT);
MNTFCTRequest mMNTFCTRequest = new MNTFCTRequest(KEY_SEARCH_PZ, USER_ID);
compositeDisposable.add(api.getPZ(url, mMNTFCTRequest)
PZRequest mPZRequest = new PZRequest(KEY_SEARCH_PZ, USER_ID);
compositeDisposable.add(api.getPZ(url, mPZRequest)
.subscribeOn(schedulerProviderImp.io())
.observeOn(schedulerProviderImp.ui())
.subscribeWith(new DisposableObserver<MNTFCTResultList>() {
.subscribeWith(new DisposableObserver<PZResultList>() {
@Override
public void onNext(MNTFCTResultList mMNTFCTResultList) {
view.setPZData(mMNTFCTResultList.getmNTFCTResponse());
public void onNext(PZResultList mPZResultList) {
view.setPZData(mPZResultList.getmNTFCTResponse());
}
@Override
......@@ -121,19 +114,19 @@ public class MainPresenter<V extends MainContract.View> implements MainContract.
@Override
public void onGetDPData(String CO, String PZ) {
final PMFCTRequest mPMFCTRequest = new PMFCTRequest(KEY_SEARCH_DP, USER_ID, CO, PZ);
final DPRequest mDPRequest = new DPRequest(KEY_SEARCH_DP, USER_ID, CO, PZ);
String url = view.getResourceString(R.string.api_on_getDP);
compositeDisposable.add(api.getDP(url, mPMFCTRequest)
compositeDisposable.add(api.getDP(url, mDPRequest)
.subscribeOn(schedulerProviderImp.io())
.observeOn(schedulerProviderImp.ui())
.subscribeWith(new DisposableObserver<PMFCTResultList>() {
.subscribeWith(new DisposableObserver<DPResultList>() {
@Override
public void onNext(PMFCTResultList mPMFCTResultList) {
if (mPMFCTResultList.getmPMFCTResponseList().size() < 1) {
public void onNext(DPResultList mDPResultList) {
if (mDPResultList.getmDPResponseList().size() < 1) {
view.showDialogCaveatMessage(view.getResourceString(R.string.get_pmfct_error_no_data));
} else {
view.setDPNMData(mPMFCTResultList.getmPMFCTResponseList());
view.setDPNMData(mDPResultList.getmDPResponseList());
}
}
......@@ -154,19 +147,19 @@ public class MainPresenter<V extends MainContract.View> implements MainContract.
@Override
public void onGetSHIFTData(String CO, String PMFCT) {
EQKDRequest mEQKDRequest = new EQKDRequest(KEY_SEARCH_SHIFT, USER_ID, CO, PMFCT);
SHIFTRequest mSHIFTRequest = new SHIFTRequest(KEY_SEARCH_SHIFT, USER_ID, CO, PMFCT);
String url = view.getResourceString(R.string.api_on_getSHIFT);
compositeDisposable.add(api.getEQKD(url, mEQKDRequest)
compositeDisposable.add(api.getSHIFT(url, mSHIFTRequest)
.subscribeOn(schedulerProviderImp.io())
.observeOn(schedulerProviderImp.ui())
.subscribeWith(new DisposableObserver<EQKDResultList>() {
.subscribeWith(new DisposableObserver<SHIFTResultList>() {
@Override
public void onNext(EQKDResultList mEQKDResultList) {
if (mEQKDResultList.getmEQKDResponseList().size() < 1) {
public void onNext(SHIFTResultList mSHIFTResultList) {
if (mSHIFTResultList.getmSHIFTResponseList().size() < 1) {
view.showDialogCaveatMessage(view.getResourceString(R.string.get_shift_error_no_data));
} else {
view.setEQKDData(mEQKDResultList.getmEQKDResponseList());
view.setEQKDData(mSHIFTResultList.getmSHIFTResponseList());
}
}
......@@ -216,7 +209,6 @@ public class MainPresenter<V extends MainContract.View> implements MainContract.
@Override
public void onGetSid(final ArrayList<String> uriList, final String type) {
// TYPERequest mTypeRequest = new TYPERequest(KEY_SEARCH_TYPE,USER_ID,CO, PMFCT);
String url = view.getResourceString(R.string.api_on_getSID);
compositeDisposable.add(api.getSID(url)
.subscribeOn(schedulerProviderImp.io())
......@@ -224,21 +216,18 @@ public class MainPresenter<V extends MainContract.View> implements MainContract.
.subscribeWith(new DisposableObserver<SIDDataList>() {
@Override
public void onNext(SIDDataList mSIDDataList) {
view.onUploadFile(uriList,type,mSIDDataList.getsIdDataList().getSid());
Log.e("sss", mSIDDataList.getSuccess());
// Log.e("sss", mSIDDataList.getSuccess());
}
@Override
public void onError(Throwable e) {
view.showDialogCaveatMessage("請重試或檢查網路狀態");
Log.e("error", e.getMessage());
}
@Override
public void onComplete() {
}
})
);
......@@ -265,123 +254,24 @@ public class MainPresenter<V extends MainContract.View> implements MainContract.
@Override
public void onComplete() {
}
}));
}
@Override
public ArrayList<String> segVideo(final String path, final String name) {
public void segVideo(final String path, final String name) {
view.showProgressDialog("影片分割中");
view.showProgressDialog("影片分割中");
view.showProgressDialog("影片分割中");
view.showProgressDialog("影片分割中");
view.showProgressDialog("影片分割中");
view.showProgressDialog("影片分割中");
view.showProgressDialog("影片分割中");
view.showProgressDialog("影片分割中");
view.showProgressDialog("影片分割中");
final ArrayList<String> segVideoList = new ArrayList<>();
// Runnable runnable = new Runnable() {
// @Override
// public void run() {
// File video = new File(path);
// int sizeLimit = 50 * 1024 * 1024;
// Log.e("size", video.length() + "");
//// Log.e("path2", );
// int duration = (int) (FFprobe.getMediaInformation(path).getDuration() / 1000); //影片秒數
// int startTime = 0;
// int segTime = 30; //分割秒數
// int loop = 0;
// if (duration % segTime != 0) {
// loop = duration / segTime + 1;
// } else {
// loop = duration / segTime;
// }
// if (video.length() > sizeLimit) {
// for (int i = 0; i < loop; i++) {
//
// int rc = FFmpeg.execute("-ss " + startTime + " -i " + path + " -t " + segTime + " " + Environment.getExternalStorageDirectory().toString() + "/seg_" + i +"_"+ name);
// segVideoList.add(Environment.getExternalStorageDirectory().toString() + "/seg_" + i +"_"+ name);
//
//
// if (rc == RETURN_CODE_SUCCESS) {
// Log.i(Config.TAG, "Command execution completed successfully.");
// } else if (rc == RETURN_CODE_CANCEL) {
// Log.i(Config.TAG, "Command execution cancelled by user.");
// } else {
//
// Log.i(Config.TAG, String.format("Command execution failed with rc=%d and the output below.", rc));
// Config.printLastCommandOutput(Log.INFO);
// }
// startTime += segTime;
// }
// view.dismissProgressDialog();
//
// } else {
// //沒超過
// segVideoList.add(path);
// view.dismissProgressDialog();
// }
// }
//
// };
// Thread thread = new Thread(runnable);
// view.showProgressDialog("影片分割中");
// thread.start();
// try {
// thread.join();
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// Thread a = new Thread(new Runnable(){
// @Override
// public void run() {
// File video = new File(path);
// int sizeLimit = 50 * 1024 * 1024;
// Log.e("size", video.length() + "");
//// Log.e("path2", );
// int duration = (int) (FFprobe.getMediaInformation(path).getDuration() / 1000); //影片秒數
// int startTime = 0;
// int segTime = 30; //分割秒數
// int loop = 0;
// if (duration % segTime != 0) {
// loop = duration / segTime + 1;
// } else {
// loop = duration / segTime;
// }
// if (video.length() > sizeLimit) {
// for (int i = 0; i < loop; i++) {
//
// int rc = FFmpeg.execute("-ss " + startTime + " -i " + path + " -t " + segTime + " " + Environment.getExternalStorageDirectory().toString() + "/seg_" + i +"_"+ name);
// segVideoList.add(Environment.getExternalStorageDirectory().toString() + "/seg_" + i +"_"+ name);
//
//
// if (rc == RETURN_CODE_SUCCESS) {
// Log.i(Config.TAG, "Command execution completed successfully.");
// } else if (rc == RETURN_CODE_CANCEL) {
// Log.i(Config.TAG, "Command execution cancelled by user.");
// } else {
//
// Log.i(Config.TAG, String.format("Command execution failed with rc=%d and the output below.", rc));
// Config.printLastCommandOutput(Log.INFO);
// }
// startTime += segTime;
// }
// view.dismissProgressDialog();
//
// } else {
// //沒超過
// segVideoList.add(path);
// view.dismissProgressDialog();
// }
// }
// }, "Thread-a");
// a.run();
// a.start();
//
// try {
// a.join();
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
new Thread(new Runnable() {
@Override
......@@ -389,7 +279,6 @@ public class MainPresenter<V extends MainContract.View> implements MainContract.
File video = new File(path);
int sizeLimit = 50 * 1024 * 1024;
Log.e("size", video.length() + "");
// Log.e("path2", );
int duration = (int) (FFprobe.getMediaInformation(path).getDuration() / 1000); //影片秒數
int startTime = 0;
int segTime = 30; //分割秒數
......@@ -402,8 +291,9 @@ public class MainPresenter<V extends MainContract.View> implements MainContract.
if (video.length() > sizeLimit) {
for (int i = 0; i < loop; i++) {
int rc = FFmpeg.execute("-ss " + startTime + " -i " + path + " -t " + segTime + " " + Environment.getExternalStorageDirectory().toString() + "/seg_" + i +"_"+ name);
segVideoList.add(Environment.getExternalStorageDirectory().toString() + "/seg_" + i +"_"+ name);
int rc = FFmpeg.execute("-ss " + startTime + " -i " + path + " -t " + segTime + " " + Environment.getExternalStorageDirectory().toString() + "/seg_" + i +"_"+ video.getName().replace(".mp4", "") +".mp4");
segVideoList.add(Environment.getExternalStorageDirectory().toString() + "/seg_" + i +"_"+ video.getName());
if (rc == RETURN_CODE_SUCCESS) {
Log.i(Config.TAG, "Command execution completed successfully.");
......@@ -416,20 +306,16 @@ public class MainPresenter<V extends MainContract.View> implements MainContract.
}
startTime += segTime;
}
view.dismissProgressDialog();
onGetSid(segVideoList, "video");
} else {
//沒超過
segVideoList.add(path);
view.dismissProgressDialog();
onGetSid(segVideoList, "video");
}
}
}).start();
Log.e("asd", segVideoList.size()+"");
return segVideoList;
}
@Override
......
package com.example.audiovisualrecord.utils.api;
import com.example.audiovisualrecord.utils.api.apidata.CORequest.CORequest;
import com.example.audiovisualrecord.utils.api.apidata.CORequest.COResultList;
import com.example.audiovisualrecord.utils.api.apidata.searchco.CORequest;
import com.example.audiovisualrecord.utils.api.apidata.searchco.COResultList;
import com.example.audiovisualrecord.utils.api.apidata.login.LoginRequest;
import com.example.audiovisualrecord.utils.api.apidata.login.LoginResponse;
import com.example.audiovisualrecord.utils.api.apidata.logoutsid.LogoutSidResponse;
import com.example.audiovisualrecord.utils.api.apidata.searchsid.SIDDataList;
import com.example.audiovisualrecord.utils.api.apidata.searchtype.TYPERequest;
import com.example.audiovisualrecord.utils.api.apidata.searchtype.TYPEResultList;
import com.example.audiovisualrecord.utils.api.searcheqkd.EQKDRequest;
import com.example.audiovisualrecord.utils.api.searcheqkd.EQKDResultList;
import com.example.audiovisualrecord.utils.api.searchmntfct.MNTFCTRequest;
import com.example.audiovisualrecord.utils.api.searchmntfct.MNTFCTResultList;
import com.example.audiovisualrecord.utils.api.searchpmfct.PMFCTRequest;
import com.example.audiovisualrecord.utils.api.searchpmfct.PMFCTResultList;
import com.example.audiovisualrecord.utils.api.searchshift.SHIFTRequest;
import com.example.audiovisualrecord.utils.api.searchshift.SHIFTResultList;
import com.example.audiovisualrecord.utils.api.searchpz.PZRequest;
import com.example.audiovisualrecord.utils.api.searchpz.PZResultList;
import com.example.audiovisualrecord.utils.api.searchdp.DPRequest;
import com.example.audiovisualrecord.utils.api.searchdp.DPResultList;
import io.reactivex.Observable;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;
import retrofit2.http.Url;
public interface ApiService {
@POST
Observable<COResultList> getCO(@Url String url, @Body CORequest mCORequest);
@POST
Observable<MNTFCTResultList> getPZ(@Url String url, @Body MNTFCTRequest mMNTFCTRequest);
Observable<PZResultList> getPZ(@Url String url, @Body PZRequest mPZRequest);
@POST
Observable<PMFCTResultList> getDP(@Url String url, @Body PMFCTRequest mPMFCTRequest);
Observable<DPResultList> getDP(@Url String url, @Body DPRequest mDPRequest);
@POST
Observable<EQKDResultList> getEQKD(@Url String url, @Body EQKDRequest mEQKDRequest);
Observable<SHIFTResultList> getSHIFT(@Url String url, @Body SHIFTRequest mSHIFTRequest);
@POST
Observable<TYPEResultList>getTYPE(@Url String url, @Body TYPERequest mTypeRequest);
@POST
......
package com.example.audiovisualrecord.utils.api.apidata.CORequest;
package com.example.audiovisualrecord.utils.api.apidata.searchco;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
......
package com.example.audiovisualrecord.utils.api.apidata.CORequest;
package com.example.audiovisualrecord.utils.api.apidata.searchco;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
......
package com.example.audiovisualrecord.utils.api.apidata.CORequest;
package com.example.audiovisualrecord.utils.api.apidata.searchco;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
......
package com.example.audiovisualrecord.utils.api.apidata.searchtype;
import com.example.audiovisualrecord.utils.api.searcheqkd.EQKDResponse;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
......
package com.example.audiovisualrecord.utils.api.searchpmfct;
package com.example.audiovisualrecord.utils.api.searchdp;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class PMFCTRequest {
public class DPRequest {
@SerializedName("AuthorizedId")
@Expose
private String authorizedId;
......@@ -16,7 +16,7 @@ public class PMFCTRequest {
@SerializedName("PZ")
@Expose
private String mPZ;
public PMFCTRequest(String authorizedId, String idNo, String mCO, String mPZ) {
public DPRequest(String authorizedId, String idNo, String mCO, String mPZ) {
this.authorizedId=authorizedId;
this.idNo=idNo;
this.mCO = mCO;
......
package com.example.audiovisualrecord.utils.api.searchpmfct;
package com.example.audiovisualrecord.utils.api.searchdp;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class PMFCTResponse {
public class DPResponse {
@SerializedName("CO")
@Expose
private String mCO;
......
package com.example.audiovisualrecord.utils.api.searcheqkd;
package com.example.audiovisualrecord.utils.api.searchdp;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import java.util.List;
public class EQKDResultList {
public class DPResultList {
@SerializedName("ResultList")
@Expose
private List<EQKDResponse> mEQKDResponseList;
private List<DPResponse> mDPResponseList;
public List<EQKDResponse> getmEQKDResponseList() {
return mEQKDResponseList;
public List<DPResponse> getmDPResponseList() {
return mDPResponseList;
}
public void setmEQKDResponseList(List<EQKDResponse> mEQKDResponseList) {
this.mEQKDResponseList = mEQKDResponseList;
public void setmDPResponseList(List<DPResponse> mDPResponseList) {
this.mDPResponseList = mDPResponseList;
}
}
package com.example.audiovisualrecord.utils.api.searchmntfct;
package com.example.audiovisualrecord.utils.api.searchpz;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class MNTFCTRequest {
public class PZRequest {
@SerializedName("AuthorizedId")
@Expose
private String authorizedId;
@SerializedName("IdNo")
@Expose
private String idNo;
public MNTFCTRequest(String authorizedId, String idNo) {
public PZRequest(String authorizedId, String idNo) {
this.authorizedId=authorizedId;
this.idNo=idNo;
}
......
package com.example.audiovisualrecord.utils.api.searchmntfct;
package com.example.audiovisualrecord.utils.api.searchpz;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class MNTFCTResponse {
public class PZResponse {
@SerializedName("PZ")
@Expose
private String mPZ;
......
package com.example.audiovisualrecord.utils.api.searchmntfct;
package com.example.audiovisualrecord.utils.api.searchpz;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import java.util.List;
public class MNTFCTResultList {
public class PZResultList {
@SerializedName("ResultList")
@Expose
private List<MNTFCTResponse> mNTFCTResponse;
private List<PZResponse> mNTFCTResponse;
public List<MNTFCTResponse> getmNTFCTResponse() {
public List<PZResponse> getmNTFCTResponse() {
return mNTFCTResponse;
}
public void setmNTFCTResponse(List<MNTFCTResponse> mNTFCTResponse) {
public void setmNTFCTResponse(List<PZResponse> mNTFCTResponse) {
this.mNTFCTResponse = mNTFCTResponse;
}
}
package com.example.audiovisualrecord.utils.api.searcheqkd;
package com.example.audiovisualrecord.utils.api.searchshift;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class EQKDRequest {
public class SHIFTRequest {
@SerializedName("AuthorizedId")
@Expose
private String authorizedId;
......@@ -16,7 +16,7 @@ public class EQKDRequest {
@SerializedName("PMFCT")
@Expose
private String mPMFCT;
public EQKDRequest(String authorizedId, String idNo, String mCO, String mPMFCT) {
public SHIFTRequest(String authorizedId, String idNo, String mCO, String mPMFCT) {
this.authorizedId=authorizedId;
this.idNo=idNo;
this.mCO=mCO;
......
package com.example.audiovisualrecord.utils.api.searcheqkd;
package com.example.audiovisualrecord.utils.api.searchshift;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class EQKDResponse {
public class SHIFTResponse {
@SerializedName("Shift")
@Expose
private String mShift;
......
package com.example.audiovisualrecord.utils.api.searchpmfct;
package com.example.audiovisualrecord.utils.api.searchshift;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import java.util.List;
public class PMFCTResultList {
public class SHIFTResultList {
@SerializedName("ResultList")
@Expose
private List<PMFCTResponse> mPMFCTResponseList;
private List<SHIFTResponse> mSHIFTResponseList;
public List<PMFCTResponse> getmPMFCTResponseList() {
return mPMFCTResponseList;
public List<SHIFTResponse> getmSHIFTResponseList() {
return mSHIFTResponseList;
}
public void setmPMFCTResponseList(List<PMFCTResponse> mPMFCTResponseList) {
this.mPMFCTResponseList = mPMFCTResponseList;
public void setmSHIFTResponseList(List<SHIFTResponse> mSHIFTResponseList) {
this.mSHIFTResponseList = mSHIFTResponseList;
}
}
......@@ -6,6 +6,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background"
android:id="@+id/mConstrainLayout"
>
<androidx.constraintlayout.widget.Guideline
......@@ -100,115 +101,116 @@
app:layout_constraintGuide_percent="0.95" />
<!-- 選擇區域 -->
<Button
<TextView
android:id="@+id/tv_company"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@drawable/p2_conpany"
app:layout_constraintHeight_percent="0.07"
app:layout_constraintWidth_percent="0.84"
app:layout_constraintTop_toBottomOf="@+id/guide_line_horizontal_12"
app:layout_constraintStart_toEndOf="@id/guide_line_vertical_10"
/>
app:layout_constraintTop_toBottomOf="@+id/guide_line_horizontal_12"
app:layout_constraintWidth_percent="0.84" />
<TextView
android:id="@+id/text_company"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintWidth_percent="0.45"
app:layout_constraintHeight_percent="0.05"
android:gravity="center"
android:textColor="@color/black"
app:layout_constraintTop_toTopOf="@+id/tv_company"
app:layout_constraintBottom_toBottomOf="@id/tv_company"
app:layout_constraintHeight_percent="0.05"
app:layout_constraintStart_toEndOf="@id/guide_line_vertical_40"
/>
app:layout_constraintTop_toTopOf="@id/tv_company"
app:layout_constraintWidth_percent="0.45" />
<Button
<TextView
android:id="@+id/tv_factory"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@drawable/p2_factory"
app:layout_constraintHeight_percent="0.07"
app:layout_constraintWidth_percent="0.84"
app:layout_constraintTop_toBottomOf="@+id/guide_line_horizontal_20"
app:layout_constraintStart_toEndOf="@id/guide_line_vertical_10"
/>
app:layout_constraintTop_toBottomOf="@+id/guide_line_horizontal_20"
app:layout_constraintWidth_percent="0.84" />
<TextView
android:id="@+id/text_factory"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintWidth_percent="0.45"
app:layout_constraintHeight_percent="0.05"
android:gravity="center"
android:textColor="@color/black"
app:layout_constraintTop_toTopOf="@+id/tv_factory"
app:layout_constraintBottom_toBottomOf="@id/tv_factory"
app:layout_constraintHeight_percent="0.05"
app:layout_constraintStart_toEndOf="@id/guide_line_vertical_40"
/>
app:layout_constraintTop_toTopOf="@+id/tv_factory"
app:layout_constraintWidth_percent="0.45" />
<Button
<TextView
android:id="@+id/tv_unit"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@drawable/p2_unit"
app:layout_constraintHeight_percent="0.07"
app:layout_constraintWidth_percent="0.84"
app:layout_constraintTop_toBottomOf="@+id/guide_line_horizontal_28"
app:layout_constraintStart_toEndOf="@id/guide_line_vertical_10"
/>
app:layout_constraintTop_toBottomOf="@+id/guide_line_horizontal_28"
app:layout_constraintWidth_percent="0.84" />
<TextView
android:id="@+id/text_unit"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintWidth_percent="0.35"
app:layout_constraintHeight_percent="0.05"
android:gravity="center"
android:textColor="@color/black"
app:layout_constraintTop_toTopOf="@+id/tv_unit"
app:layout_constraintBottom_toBottomOf="@id/tv_unit"
app:layout_constraintStart_toEndOf="@id/guide_line_vertical_45"
/>
app:layout_constraintHeight_percent="0.05"
app:layout_constraintStart_toEndOf="@id/guide_line_vertical_40"
app:layout_constraintTop_toTopOf="@+id/tv_unit"
app:layout_constraintWidth_percent="0.46" />
<Button
<TextView
android:id="@+id/tv_class"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@drawable/p2_class"
android:gravity="center_horizontal"
app:layout_constraintHeight_percent="0.07"
app:layout_constraintWidth_percent="0.84"
app:layout_constraintTop_toBottomOf="@+id/guide_line_horizontal_36"
app:layout_constraintStart_toEndOf="@id/guide_line_vertical_10"
/>
app:layout_constraintTop_toBottomOf="@+id/guide_line_horizontal_36"
app:layout_constraintWidth_percent="0.84" />
<TextView
android:id="@+id/text_class"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintWidth_percent="0.45"
app:layout_constraintHeight_percent="0.05"
android:gravity="center"
android:textColor="@color/black"
app:layout_constraintTop_toTopOf="@+id/tv_class"
app:layout_constraintBottom_toBottomOf="@id/tv_class"
app:layout_constraintHeight_percent="0.05"
app:layout_constraintStart_toEndOf="@id/guide_line_vertical_40"
/>
app:layout_constraintTop_toTopOf="@+id/tv_class"
app:layout_constraintWidth_percent="0.45" />
<Button
<TextView
android:id="@+id/tv_shoottype"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@drawable/p2_shoottype"
app:layout_constraintHeight_percent="0.07"
app:layout_constraintWidth_percent="0.84"
app:layout_constraintTop_toBottomOf="@+id/guide_line_horizontal_44"
app:layout_constraintStart_toEndOf="@id/guide_line_vertical_10"
/>
app:layout_constraintTop_toBottomOf="@+id/guide_line_horizontal_44"
app:layout_constraintWidth_percent="0.84" />
<TextView
android:id="@+id/text_shoottype"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintWidth_percent="0.45"
app:layout_constraintHeight_percent="0.05"
android:gravity="center"
android:textColor="@color/black"
app:layout_constraintTop_toTopOf="@+id/tv_shoottype"
app:layout_constraintBottom_toBottomOf="@id/tv_shoottype"
app:layout_constraintHeight_percent="0.05"
app:layout_constraintStart_toEndOf="@id/guide_line_vertical_40"
/>
app:layout_constraintTop_toTopOf="@+id/tv_shoottype"
app:layout_constraintWidth_percent="0.45" />
<!-- 建立現場資料 -->
<View
......
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 to comment