Commit db73bda5 by Kim Jinsung

Merge branch 'features/1.2.360_ogawa-y' into 'features/1.2.360'

Features/1.2.360 ogawa y

See merge request !72
parents d0820eb3 979e70fa
...@@ -18,6 +18,7 @@ import jp.agentec.abook.abv.bl.acms.client.json.ApertureMasterDataJSON; ...@@ -18,6 +18,7 @@ import jp.agentec.abook.abv.bl.acms.client.json.ApertureMasterDataJSON;
import jp.agentec.abook.abv.bl.acms.client.json.AppLatestVersionJSON; import jp.agentec.abook.abv.bl.acms.client.json.AppLatestVersionJSON;
import jp.agentec.abook.abv.bl.acms.client.json.AuthLevelJSON; import jp.agentec.abook.abv.bl.acms.client.json.AuthLevelJSON;
import jp.agentec.abook.abv.bl.acms.client.json.CategoriesJSON; import jp.agentec.abook.abv.bl.acms.client.json.CategoriesJSON;
import jp.agentec.abook.abv.bl.acms.client.json.ChatPushDataJSON;
import jp.agentec.abook.abv.bl.acms.client.json.ContentCheckDeliverableJSON; import jp.agentec.abook.abv.bl.acms.client.json.ContentCheckDeliverableJSON;
import jp.agentec.abook.abv.bl.acms.client.json.ContentVersionsJSON; import jp.agentec.abook.abv.bl.acms.client.json.ContentVersionsJSON;
import jp.agentec.abook.abv.bl.acms.client.json.FixPushMessageJSON; import jp.agentec.abook.abv.bl.acms.client.json.FixPushMessageJSON;
...@@ -504,6 +505,14 @@ public class AcmsClient implements AcmsClientResponseListener { ...@@ -504,6 +505,14 @@ public class AcmsClient implements AcmsClientResponseListener {
return json; return json;
} }
// チャットリスト取得
public ChatPushDataJSON getChatPushList(AcmsParameters param) throws NetworkDisconnectedException, AcmsException {
HttpResponse response = send(AcmsApis.ApiGetChatPushData, param);
ChatPushDataJSON json = new ChatPushDataJSON(response.httpResponseBody);
return json;
}
//作業者グループ取得 //作業者グループ取得
public WorkerGroupJSON getWorkingGroupList(AcmsParameters param) throws NetworkDisconnectedException, AcmsException { public WorkerGroupJSON getWorkingGroupList(AcmsParameters param) throws NetworkDisconnectedException, AcmsException {
HttpResponse response = send(AcmsApis.ApiWorkingGroupList, param); HttpResponse response = send(AcmsApis.ApiWorkingGroupList, param);
...@@ -616,19 +625,21 @@ public class AcmsClient implements AcmsClientResponseListener { ...@@ -616,19 +625,21 @@ public class AcmsClient implements AcmsClientResponseListener {
/** /**
* パノラマで使用するシーンを登録 * パノラマで使用するシーンを登録
* @param sid * @param sid
* @param contentId
* @param FormFile シーンで使用する画像 * @param FormFile シーンで使用する画像
* @return * @return
* @throws IOException * @throws IOException
* @throws AcmsException * @throws AcmsException
*/ */
public SceneEntryJSON sceneEntry(String sid, File FormFile) throws IOException, AcmsException, NetworkDisconnectedException { public SceneEntryJSON sceneEntry(String sid, Long contentId, File FormFile) throws IOException, AcmsException, NetworkDisconnectedException {
if (networkAdapter != null && !networkAdapter.isNetworkConnected()) { // NWのチェック if (networkAdapter != null && !networkAdapter.isNetworkConnected()) { // NWのチェック
throw new NetworkDisconnectedException(); throw new NetworkDisconnectedException();
} }
String apiUrl = AcmsApis.getApiUrl(env.acmsAddress, urlPath, AcmsApis.ApiSceneEntry); String apiUrl = AcmsApis.getApiUrl(env.acmsAddress, urlPath, AcmsApis.ApiSceneEntry);
HttpMultipart part1 = new HttpMultipart(ABookKeys.SID, sid); HttpMultipart part1 = new HttpMultipart(ABookKeys.SID, sid);
HttpMultipart part2 = new HttpMultipart(ABookKeys.FORM_FILE, FormFile); HttpMultipart part2 = new HttpMultipart(ABookKeys.CONTENT_ID, StringUtil.toString(contentId));
HttpResponse result = HttpRequestSender.post(apiUrl, new HttpMultipart[]{part1, part2}); HttpMultipart part3 = new HttpMultipart(ABookKeys.FORM_FILE, FormFile);
HttpResponse result = HttpRequestSender.post(apiUrl, new HttpMultipart[]{part1, part2, part3});
SceneEntryJSON json = new SceneEntryJSON(result.httpResponseBody); SceneEntryJSON json = new SceneEntryJSON(result.httpResponseBody);
if (json.httpStatus != 200) { if (json.httpStatus != 200) {
if (json.errorMessage != null) { if (json.errorMessage != null) {
...@@ -778,7 +789,7 @@ public class AcmsClient implements AcmsClientResponseListener { ...@@ -778,7 +789,7 @@ public class AcmsClient implements AcmsClientResponseListener {
Logger.d(TAG, "call api : %s", methodName); Logger.d(TAG, "call api : %s", methodName);
String apiUrl = AcmsApis.getApiUrl(env.acmsAddress, urlPath, methodName); String apiUrl = AcmsApis.getApiUrl(env.acmsAddress, urlPath, methodName);
HttpResponse response = send(apiUrl, methodName, param); HttpResponse response = send(apiUrl, methodName, param);
// 最終アクセス時間更新 // 最終アクセス時間更新
......
package jp.agentec.abook.abv.bl.acms.client.json;
import jp.agentec.abook.abv.bl.acms.client.AcmsClient;
import jp.agentec.abook.abv.bl.common.exception.AcmsException;
import jp.agentec.abook.abv.bl.common.exception.JSONValidationException;
import jp.agentec.abook.abv.bl.common.log.Logger;
import jp.agentec.abook.abv.bl.common.util.JsonUtil;
import jp.agentec.abook.abv.bl.dto.PushMessageDto;
import jp.agentec.adf.util.DateTimeFormat;
import jp.agentec.adf.util.DateTimeUtil;
import org.json.adf.JSONArray;
import org.json.adf.JSONObject;
import java.util.ArrayList;
import java.util.List;
/**
* {@link AcmsClient#contentVersion} の戻り値です。
* @author Taejin Hong
* @version 1.0.0
*/
public class ChatPushDataJSON extends AcmsCommonJSON {
private static final String PushMessage = "pushMessage";
private static final String PushSendLoginId = "pushSendLoginId";
private static final String PushSendDate = "pushSendDate";
private static final String RoomId = "roomId";
private static final String RoomName = "roomName";
private static final String ChatMessage = "chatMessage";
//public JSONObject pushMessage;
public ArrayList<PushMessageDto> pushMessageList;
public ChatPushDataJSON(String jsonString) throws AcmsException {
super(jsonString);
}
@Override
protected void parse(JSONObject json) throws JSONValidationException {
// 絞り検索のデータを取得
if(json.has(PushMessage)) {
JSONArray pushMessagetJsonArray = json.getJSONArray(PushMessage);
if (pushMessagetJsonArray != null) {
pushMessageList = new ArrayList<PushMessageDto>();
for (int k = 0; k < pushMessagetJsonArray.length(); k++) {
if (pushMessagetJsonArray.getJSONObject(k).length() == 0) {
break;
}
PushMessageDto pushMessageDto = new PushMessageDto();
String tempDate = DateTimeUtil.toString(DateTimeUtil.toDate(pushMessagetJsonArray.getJSONObject(k).getString(PushSendDate), DateTimeFormat.yyyyMMddHHmmss_hyphen), DateTimeFormat.yyyyMMddHHmmssSSS_none);
Logger.d("messageId","messageId : " + pushMessagetJsonArray.getJSONObject(k).getString(PushSendDate));
Logger.d("oerationId","oerationId : " + pushMessagetJsonArray.getJSONObject(k).getString(PushSendDate)+1);
Logger.d("date","date : " + tempDate);
pushMessageDto.pushMessageId = Long.valueOf(tempDate);
pushMessageDto.operationId = Long.valueOf(tempDate+1);
pushMessageDto.pushSendLoginId = pushMessagetJsonArray.getJSONObject(k).getString(PushSendLoginId);
pushMessageDto.pushSendDate = DateTimeUtil.toDate(pushMessagetJsonArray.getJSONObject(k).getString(PushSendDate), DateTimeFormat.yyyyMMddHHmmss_hyphen);
pushMessageDto.roomId = pushMessagetJsonArray.getJSONObject(k).getLong(RoomId);
pushMessageDto.roomName = pushMessagetJsonArray.getJSONObject(k).getString(RoomName);
pushMessageDto.pushMessage = pushMessagetJsonArray.getJSONObject(k).getString(ChatMessage);
pushMessageDto.readingFlg = false;
pushMessageList.add(pushMessageDto);
}
}
}
}
}
...@@ -161,6 +161,10 @@ public class AcmsApis { ...@@ -161,6 +161,10 @@ public class AcmsApis {
// 簡易帳票リビジョン一覧取得 // 簡易帳票リビジョン一覧取得
public static final String ApiQuickReportRevision = "quickReportRevision"; public static final String ApiQuickReportRevision = "quickReportRevision";
// チャット
public static final String ChatApiUrlFormat = "%s/%s/chatapi/%s/";
public static final String ApiGetChatPushData = "push";
// download // download
/** /**
* コンテンツのZIPファイルを取得<br> * コンテンツのZIPファイルを取得<br>
...@@ -206,6 +210,8 @@ public class AcmsApis { ...@@ -206,6 +210,8 @@ public class AcmsApis {
methodName.equals(ApiSendPushMessage) || methodName.equals(ApiGetPushMessages) || methodName.equals(ApiSendRoutineTaskData) || methodName.equals(ApiSendPushMessage) || methodName.equals(ApiGetPushMessages) || methodName.equals(ApiSendRoutineTaskData) ||
methodName.equals(ApiOperationGroupMaster) || methodName.equals(ApiGetApertureMasterData) || methodName.equals(ApiQuickReportSearch) || methodName.equals(ApiQuickReportRevision)) { methodName.equals(ApiOperationGroupMaster) || methodName.equals(ApiGetApertureMasterData) || methodName.equals(ApiQuickReportSearch) || methodName.equals(ApiQuickReportRevision)) {
apiValue = Constant.ApiValue.checkapi; apiValue = Constant.ApiValue.checkapi;
} else if (methodName.equals(ApiGetChatPushData)) { // pushActionはchatapiを指定
apiValue = Constant.ApiValue.chatapi;
} }
switch (apiValue) { switch (apiValue) {
...@@ -221,6 +227,10 @@ public class AcmsApis { ...@@ -221,6 +227,10 @@ public class AcmsApis {
//ABookCheck用のapi //ABookCheck用のapi
url = String.format(CheckApiUrlFormat, StringUtil.trimLastSlashOrSpace(host), StringUtil.trimLastSlashOrSpace(urlPath), methodName); url = String.format(CheckApiUrlFormat, StringUtil.trimLastSlashOrSpace(host), StringUtil.trimLastSlashOrSpace(urlPath), methodName);
break; break;
case Constant.ApiValue.chatapi:
// チャットAPI
url = String.format(ChatApiUrlFormat, StringUtil.trimLastSlashOrSpace(host), StringUtil.trimLastSlashOrSpace(urlPath), methodName);
break;
} }
return url; return url;
......
package jp.agentec.abook.abv.bl.acms.type; package jp.agentec.abook.abv.bl.acms.type;
import jp.agentec.abook.abv.bl.logic.ContractLogic;
public interface ServiceOption { public interface ServiceOption {
interface ServiceOptionId { interface ServiceOptionId {
/** /**
...@@ -158,5 +156,17 @@ public interface ServiceOption { ...@@ -158,5 +156,17 @@ public interface ServiceOption {
* 利用しない:N(通常)、利用する:Y * 利用しない:N(通常)、利用する:Y
*/ */
int AddUserPasswordSalt = 181; int AddUserPasswordSalt = 181;
/**
* チャット機能
* 利用しない:N(通常)、利用する:Y
*/
int Chat = 183;
/**
* I/O帳票使用
* 利用しない:N(通常)、利用する:Y
*/
int UsableIOReport = 186;
} }
} }
\ No newline at end of file
...@@ -74,6 +74,7 @@ public class Constant { ...@@ -74,6 +74,7 @@ public class Constant {
int nuapi = 0; int nuapi = 0;
int abvapi = 1; int abvapi = 1;
int checkapi = 2; int checkapi = 2;
int chatapi = 3; // チャット
} }
public interface XWalkOpenType { public interface XWalkOpenType {
......
package jp.agentec.abook.abv.bl.data; package jp.agentec.abook.abv.bl.data;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections; import java.util.Collections;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
...@@ -336,6 +335,14 @@ public class ABVDataCache { ...@@ -336,6 +335,14 @@ public class ABVDataCache {
return isServiceOptionEnable(ServiceOptionId.PanoImage); return isServiceOptionEnable(ServiceOptionId.PanoImage);
} }
public boolean isChat() {
return isServiceOptionEnable(ServiceOptionId.Chat);
}
public boolean isUnableIOReport() {
return isServiceOptionEnable(ServiceOptionId.UsableIOReport);
}
/** /**
* @version 1.2.300 * @version 1.2.300
* サービスオプション(ユーザパスワードソルト付加)返す * サービスオプション(ユーザパスワードソルト付加)返す
......
package jp.agentec.abook.abv.bl.data.dao; package jp.agentec.abook.abv.bl.data.dao;
import java.util.Date;
import java.util.List; import java.util.List;
import jp.agentec.abook.abv.bl.common.db.Cursor; import jp.agentec.abook.abv.bl.common.db.Cursor;
...@@ -46,6 +47,14 @@ public class PushMessageDao extends AbstractDao { ...@@ -46,6 +47,14 @@ public class PushMessageDao extends AbstractDao {
if (column != -1) { if (column != -1) {
dto.readingFlg = toBool(cursor.getInt(column)); dto.readingFlg = toBool(cursor.getInt(column));
} }
column = cursor.getColumnIndex("room_id");
if (column != -1) {
dto.roomId = cursor.getLong(column);
}
column = cursor.getColumnIndex("room_name");
if (column != -1) {
dto.roomName = cursor.getString(column);
}
column = cursor.getColumnIndex("operation_name"); column = cursor.getColumnIndex("operation_name");
if (column != -1) { if (column != -1) {
dto.operationName = cursor.getString(column); dto.operationName = cursor.getString(column);
...@@ -55,8 +64,8 @@ public class PushMessageDao extends AbstractDao { ...@@ -55,8 +64,8 @@ public class PushMessageDao extends AbstractDao {
public void insert(PushMessageDto dto) { public void insert(PushMessageDto dto) {
StringBuffer sql = new StringBuffer(); StringBuffer sql = new StringBuffer();
sql.append(" INSERT OR IGNORE INTO t_push_message "); sql.append(" INSERT OR IGNORE INTO t_push_message ");
sql.append(" (push_message_id, operation_id, push_send_login_id, push_send_date, push_message, reading_flg) "); sql.append(" (push_message_id, operation_id, push_send_login_id, push_send_date, push_message, reading_flg, room_id, room_name) ");
sql.append(" VALUES (?,?,?,?,?,?) "); sql.append(" VALUES (?,?,?,?,?,?,?,?) ");
try { try {
beginTransaction(); beginTransaction();
insert(sql.toString(), dto.getInsertValues()); insert(sql.toString(), dto.getInsertValues());
...@@ -94,9 +103,9 @@ public class PushMessageDao extends AbstractDao { ...@@ -94,9 +103,9 @@ public class PushMessageDao extends AbstractDao {
public List<PushMessageDto> selectAll() { public List<PushMessageDto> selectAll() {
StringBuffer sql = new StringBuffer(); StringBuffer sql = new StringBuffer();
sql.append(" SELECT tpm.push_message_id, tpm.operation_id, tpm.push_send_login_id, tpm.push_send_date, tpm.push_message, tpm.reading_flg, top.operation_name "); sql.append(" SELECT tpm.push_message_id, tpm.operation_id, tpm.push_send_login_id, tpm.push_send_date, tpm.push_message, tpm.reading_flg, top.operation_name, tpm.room_id, tpm.room_name ");
sql.append(" FROM t_push_message AS tpm "); sql.append(" FROM t_push_message AS tpm ");
sql.append(" INNER JOIN t_operation AS top "); sql.append(" LEFT OUTER JOIN t_operation AS top ");
sql.append(" ON tpm.operation_id = top.operation_id "); sql.append(" ON tpm.operation_id = top.operation_id ");
sql.append(" ORDER BY tpm.push_message_id DESC "); sql.append(" ORDER BY tpm.push_message_id DESC ");
Logger.v(TAG, "sql=%s", sql); Logger.v(TAG, "sql=%s", sql);
...@@ -106,11 +115,25 @@ public class PushMessageDao extends AbstractDao { ...@@ -106,11 +115,25 @@ public class PushMessageDao extends AbstractDao {
public PushMessageDto select(long pushMessageId) { public PushMessageDto select(long pushMessageId) {
String[] args = new String[] { "" + pushMessageId }; String[] args = new String[] { "" + pushMessageId };
StringBuffer sql = new StringBuffer(); StringBuffer sql = new StringBuffer();
sql.append(" SELECT tpm.push_message_id, tpm.operation_id, tpm.push_send_login_id, tpm.push_send_date, tpm.push_message, tpm.reading_flg, top.operation_name "); sql.append(" SELECT tpm.push_message_id, tpm.operation_id, tpm.push_send_login_id, tpm.push_send_date, tpm.push_message, tpm.reading_flg, top.operation_name, tpm.room_id, tpm.room_name ");
sql.append(" FROM t_push_message AS tpm ");
sql.append(" INNER JOIN t_operation AS top ");
sql.append(" ON tpm.operation_id = top.operation_id ");
sql.append(" WHERE tpm.push_message_id = ? ");
Logger.v(TAG, "sql=%s", sql);
return rawQueryGetDto(sql.toString(), args, PushMessageDto.class);
}
public PushMessageDto selectChat(long pushMessageId, long pushOperstoinId, Date pushSendDate) {
String[] args = new String[] { "" + pushMessageId, "" + pushOperstoinId, "" + pushSendDate };
StringBuffer sql = new StringBuffer();
sql.append(" SELECT tpm.push_message_id, tpm.operation_id, tpm.push_send_login_id, tpm.push_send_date, tpm.push_message, tpm.reading_flg, top.operation_name, tpm.room_id, tpm.room_name ");
sql.append(" FROM t_push_message AS tpm "); sql.append(" FROM t_push_message AS tpm ");
sql.append(" INNER JOIN t_operation AS top "); sql.append(" INNER JOIN t_operation AS top ");
sql.append(" ON tpm.operation_id = top.operation_id "); sql.append(" ON tpm.operation_id = top.operation_id ");
sql.append(" WHERE tpm.push_message_id = ? "); sql.append(" WHERE tpm.push_message_id = ? ");
sql.append(" AND tpm.operation_id = ? ");
sql.append(" AND tpm.push_send_date = ? " );
Logger.v(TAG, "sql=%s", sql); Logger.v(TAG, "sql=%s", sql);
return rawQueryGetDto(sql.toString(), args, PushMessageDto.class); return rawQueryGetDto(sql.toString(), args, PushMessageDto.class);
} }
......
...@@ -26,8 +26,12 @@ public class TPushMessage extends SQLiteTableScript { ...@@ -26,8 +26,12 @@ public class TPushMessage extends SQLiteTableScript {
sql.append(" , push_send_date DATE NOT NULL "); sql.append(" , push_send_date DATE NOT NULL ");
sql.append(" , push_message TEXT "); sql.append(" , push_message TEXT ");
sql.append(" , reading_flg BOOLEAN NOT NULL DEFAULT 0 "); sql.append(" , reading_flg BOOLEAN NOT NULL DEFAULT 0 ");
sql.append(" , room_id BIGINT ");
sql.append(" , room_name VARCHAR(128) ");
sql.append(" , PRIMARY KEY (push_message_id) "); sql.append(" , PRIMARY KEY (push_message_id) ");
sql.append(" , FOREIGN KEY (operation_id) REFERENCES t_operation (operation_id) "); /**
* チャットのプッシュメッセージではoperation_idを使わないため外部キー制約はコメントアウト*/
// sql.append(" , FOREIGN KEY (operation_id) REFERENCES t_operation (operation_id) ");
sql.append(" ) "); sql.append(" ) ");
ddl.add(sql.toString()); ddl.add(sql.toString());
......
...@@ -14,6 +14,9 @@ public class PushMessageDto extends AbstractDto { ...@@ -14,6 +14,9 @@ public class PushMessageDto extends AbstractDto {
public String pushMessage; public String pushMessage;
public String operationName; public String operationName;
public boolean readingFlg; public boolean readingFlg;
// Chat
public Long roomId;
public String roomName;
@Override @Override
public String[] getKeyValues() { public String[] getKeyValues() {
...@@ -22,6 +25,6 @@ public class PushMessageDto extends AbstractDto { ...@@ -22,6 +25,6 @@ public class PushMessageDto extends AbstractDto {
@Override @Override
public Object[] getInsertValues() { public Object[] getInsertValues() {
return new Object[] { pushMessageId, operationId, pushSendLoginId, pushSendDate, pushMessage, readingFlg }; return new Object[] { pushMessageId, operationId, pushSendLoginId, pushSendDate, pushMessage, readingFlg, roomId, roomName };
} }
} }
...@@ -17,6 +17,7 @@ import java.util.Map; ...@@ -17,6 +17,7 @@ import java.util.Map;
import java.util.UUID; import java.util.UUID;
import jp.agentec.abook.abv.bl.acms.client.AcmsClient; import jp.agentec.abook.abv.bl.acms.client.AcmsClient;
import jp.agentec.abook.abv.bl.acms.client.json.ChatPushDataJSON;
import jp.agentec.abook.abv.bl.acms.client.json.OperationDataJSON; import jp.agentec.abook.abv.bl.acms.client.json.OperationDataJSON;
import jp.agentec.abook.abv.bl.acms.client.json.OperationListJSON; import jp.agentec.abook.abv.bl.acms.client.json.OperationListJSON;
import jp.agentec.abook.abv.bl.acms.client.json.SceneEntryJSON; import jp.agentec.abook.abv.bl.acms.client.json.SceneEntryJSON;
...@@ -113,6 +114,16 @@ public class OperationLogic extends AbstractLogic { ...@@ -113,6 +114,16 @@ public class OperationLogic extends AbstractLogic {
OperationListJSON json = AcmsClient.getInstance(cache.getUrlPath(), networkAdapter).getOperationList(param); OperationListJSON json = AcmsClient.getInstance(cache.getUrlPath(), networkAdapter).getOperationList(param);
List<OperationDto> serverOperations = json.operationList; List<OperationDto> serverOperations = json.operationList;
//サーバーからチャットプシュデータを取得
ChatPushDataJSON chatPushJson = AcmsClient.getInstance(cache.getUrlPath(), networkAdapter).getChatPushList(param);
for ( PushMessageDto dto : chatPushJson.pushMessageList) {
PushMessageDto dtoTemp = mPushMessageDao.selectChat(dto.pushMessageId, dto.operationId, dto.pushSendDate);
if (dtoTemp == null) {
mPushMessageDao.insert(dto);
}
}
for (OperationDto serverOperationDto : serverOperations) { for (OperationDto serverOperationDto : serverOperations) {
// 登録フラグ // 登録フラグ
boolean insertFlg = true; boolean insertFlg = true;
...@@ -1380,11 +1391,12 @@ public class OperationLogic extends AbstractLogic { ...@@ -1380,11 +1391,12 @@ public class OperationLogic extends AbstractLogic {
/** /**
* シーンの登録 * シーンの登録
* @param file * @param file
* @param contentId
* @throws IOException * @throws IOException
* @throws AcmsException * @throws AcmsException
*/ */
public Integer sendScene(File file) throws IOException, AcmsException, NetworkDisconnectedException { public Integer sendScene(File file, Long contentId) throws IOException, AcmsException, NetworkDisconnectedException {
SceneEntryJSON json = AcmsClient.getInstance(cache.getUrlPath(), networkAdapter).sceneEntry(cache.getMemberInfo().sid, file); SceneEntryJSON json = AcmsClient.getInstance(cache.getUrlPath(), networkAdapter).sceneEntry(cache.getMemberInfo().sid, contentId, file);
return json.resourceId; return json.resourceId;
} }
......
...@@ -232,10 +232,14 @@ ...@@ -232,10 +232,14 @@
<activity android:name="jp.agentec.abook.abv.ui.home.activity.OperationMeetingListActivityDialog" android:theme="@style/Theme.MyTheme.ModalDialog"/> <activity android:name="jp.agentec.abook.abv.ui.home.activity.OperationMeetingListActivityDialog" android:theme="@style/Theme.MyTheme.ModalDialog"/>
<activity android:name="jp.agentec.abook.abv.ui.viewer.activity.CheckOZDViewActivity" android:configChanges="orientation|screenSize"/> <activity android:name="jp.agentec.abook.abv.ui.viewer.activity.CheckOZDViewActivity" android:configChanges="orientation|screenSize"/>
<activity <activity
android:name="jp.agentec.abook.abv.ui.viewer.activity.OnlineHTMLWebViewActivity" android:name="jp.agentec.abook.abv.ui.viewer.activity.OnlineHTMLWebViewActivity"
android:configChanges="keyboardHidden|orientation|screenSize" android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
</activity> </activity>
<activity android:name="jp.agentec.abook.abv.ui.home.activity.ChatWebviewActivity" android:configChanges="orientation|screenSize"/>
</application> </application>
</manifest> </manifest>
\ No newline at end of file

642 Bytes | W: | H:

1.47 KB | W: | H:

ABVJE_Res_Default_Android/res/drawable-xhdpi/home_print_on.png
ABVJE_Res_Default_Android/res/drawable-xhdpi/home_print_on.png
ABVJE_Res_Default_Android/res/drawable-xhdpi/home_print_on.png
ABVJE_Res_Default_Android/res/drawable-xhdpi/home_print_on.png
  • 2-up
  • Swipe
  • Onion skin
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_enabled="true" android:drawable="@drawable/ic_history_back_off" />
<item android:state_enabled="false" android:drawable="@drawable/ic_history_back_disable" />
</selector>
\ No newline at end of file
...@@ -344,7 +344,6 @@ ...@@ -344,7 +344,6 @@
<string name="operation_related_content">関連資料</string> <string name="operation_related_content">関連資料</string>
<string name="new_content">新着</string> <string name="new_content">新着</string>
<string name="save_all">一括保存</string> <string name="save_all">一括保存</string>
<string name="content_update">更新</string>
<string name="remote_support">遠隔支援</string> <string name="remote_support">遠隔支援</string>
<string name="remote_support_list">遠隔支援一覧</string> <string name="remote_support_list">遠隔支援一覧</string>
<string name="new_make">新規作成</string> <string name="new_make">新規作成</string>
...@@ -534,7 +533,7 @@ ...@@ -534,7 +533,7 @@
<string name="title_all_operation">全作業</string> <string name="title_all_operation">全作業</string>
<!-- ABookCheck 1.2.3 --> <!-- ABookCheck 1.2.3 -->
<string name="title_quick_report_output">簡易帳票出力</string> <string name="title_quick_report_output">帳票確認</string>
<!-- 1.0.1 Resource Pattern 1 --> <!-- 1.0.1 Resource Pattern 1 -->
<!-- 1.9.0.0--> <!-- 1.9.0.0-->
...@@ -1460,4 +1459,22 @@ ...@@ -1460,4 +1459,22 @@
<string name="msg_device_location_off">端末の位置情報機能をONにしてください。</string> <string name="msg_device_location_off">端末の位置情報機能をONにしてください。</string>
<string name="msg_theta_wifi_disconnect">THETAカメラとWi-Fi接続が切断されましたので、シーン画像選択画面に戻ります。</string> <string name="msg_theta_wifi_disconnect">THETAカメラとWi-Fi接続が切断されましたので、シーン画像選択画面に戻ります。</string>
<!-- Chat -->
<string name="chat">チャット</string>
<string name="msg_error_chat_disconnected">接続が切れました。</string>
<string name="msg_error_chat_connect">ネットワークに問題がありました。\nネットワークの接続状態を確認してください。</string>
<string name="msg_error_chat_server">サーバと通信できません。\nしばらく時間をおいて再度操作してください。</string>
<string name="msg_error_chat">チャットサーバーと接続に失敗しました。\nしばらく時間をおいて再度操作してください。</string>
<string name="msg_chat_confirm_exit">このチャットルームを出ますか?</string>
<string name="msg_error_chat_room_not_found">既に削除されたチャットルームです。</string>
<string name="msg_error_chat_500">チャットサーバーでシステムエラーが発生しました。</string>
<string name="msg_error_chat_join">チャットサーバーと接続に失敗しました。\n再度操作してください。</string>
<string name="msg_error_chat_text_length">メッセージの長さは0です。1文字以上を入力してください。</string>
<string name="msg_error_chat_input_roomname">ルーム名を入力してください。</string>
<string name="msg_chat_confirm_member">選択したメンバーをリストから削除しますか?</string>
<string name="msg_chat_confirm_delete">このチャットルームを削除しますか?</string>
<string name="msg_error_chat_room_name_too_long">ルーム名は文字列20字以内に入力してください。</string>
<string name="msg_error_chat_name_has_invalid_character">特殊文字 ;/?:@&amp;=+$,-_.!~*\'()#\\\"` はルーム名に含めることができません。</string>
<string name="msg_error_chat_room_sc_forbidden">認証に失敗しました。再度ログインが必要です。</string>
</resources> </resources>
...@@ -531,12 +531,12 @@ ...@@ -531,12 +531,12 @@
<string name="msg_batch_sync_new_content_updating">새로운 정보갱신 중에는 일괄 동기을 하실 수 없습니다.</string> <string name="msg_batch_sync_new_content_updating">새로운 정보갱신 중에는 일괄 동기을 하실 수 없습니다.</string>
<string name="msg_batch_sync_error">「%1$s」정보갱신에 실패하였습니다. 동기처리을 중지합니다.\n</string> <string name="msg_batch_sync_error">「%1$s」정보갱신에 실패하였습니다. 동기처리을 중지합니다.\n</string>
<string name="msg_batch_sync_move_operation_view">일괄 동기 처리 중에는 점검작업 보고화면으로 이동하실 수 없습니다.</string> <string name="msg_batch_sync_move_operation_view">일괄 동기 처리 중에는 점검작업 보고화면으로 이동하실 수 없습니다.</string>
<string name="category_list">분류 일람</string> <string name="category_list">분류 목록</string>
<string name="title_category">분류</string> <string name="title_category">분류</string>
<string name="title_all_operation">전체 작업</string> <string name="title_all_operation">전체 작업</string>
<!-- ABookCheck 1.2.3 --> <!-- ABookCheck 1.2.3 -->
<string name="title_quick_report_output">簡易帳票出力</string> <string name="title_quick_report_output">장표 확인</string>
<!-- 1.0.1 Resource Pattern 1 --> <!-- 1.0.1 Resource Pattern 1 -->
<!-- 1.9.0.0--> <!-- 1.9.0.0-->
...@@ -1428,6 +1428,7 @@ ...@@ -1428,6 +1428,7 @@
<string name="msg_confirm_close_edit_page">편집을 종료하시겠습니까?\n(저장되지 않은 변경 사항은 삭제됩니다.)</string> <string name="msg_confirm_close_edit_page">편집을 종료하시겠습니까?\n(저장되지 않은 변경 사항은 삭제됩니다.)</string>
<string name="msg_error_edit_page_save">파일 저장 중에 예기치 않은 오류가 발생했습니다.\n편집창을 종료합니다.</string> <string name="msg_error_edit_page_save">파일 저장 중에 예기치 않은 오류가 발생했습니다.\n편집창을 종료합니다.</string>
<string name="msg_error_edit_page_open">편집창을 여는데 실패했습니다.</string> <string name="msg_error_edit_page_open">편집창을 여는데 실패했습니다.</string>
<!-- ABookCheck 1.2.300 --> <!-- ABookCheck 1.2.300 -->
<string name="title_scene_image_select">장면 이미지 선택</string> <string name="title_scene_image_select">장면 이미지 선택</string>
<string name="msg_image_select_max_count_over">장면 이미지의 선택 가능한 최대 개수는 %s개입니다.</string> <string name="msg_image_select_max_count_over">장면 이미지의 선택 가능한 최대 개수는 %s개입니다.</string>
...@@ -1464,4 +1465,22 @@ ...@@ -1464,4 +1465,22 @@
<string name="title_theta_exposure_value">EV:%s</string> <string name="title_theta_exposure_value">EV:%s</string>
<string name="msg_device_location_off">단말기의 위치정보 기능을 ON으로 설정해 주세요.</string> <string name="msg_device_location_off">단말기의 위치정보 기능을 ON으로 설정해 주세요.</string>
<string name="msg_theta_wifi_disconnect">THETA 카메라 Wi-Fi 접속이 끊겼습니다. 장면 이미지 선택 화면으로 돌아갑니다.</string> <string name="msg_theta_wifi_disconnect">THETA 카메라 Wi-Fi 접속이 끊겼습니다. 장면 이미지 선택 화면으로 돌아갑니다.</string>
<!-- Chat -->
<string name="chat">채팅</string>
<string name="msg_error_chat_disconnected">서버와 접속이 끊어졌습니다.</string>
<string name="msg_error_chat_connect">네트워크에 문제가 발생했습니다.\n네트워크 연결상태를 확인하여 주십시요.</string>
<string name="msg_error_chat_server">서버와 통신할 수 없습니다.\n잠시 후 다시 시도해보시기 바랍니다.</string>
<string name="msg_error_chat">채팅서버 접속에 실패했습니다.\n잠시 후 다시 시도해보시기 바랍니다.</string>
<string name="msg_chat_confirm_exit">이 채팅방을 나가시겠습니까?</string>
<string name="msg_error_chat_room_not_found">이미 삭제된 채팅룸입니다.</string>
<string name="msg_error_chat_500">채팅 서버에서 시스템 오류가 발생했습니다.</string>
<string name="msg_error_chat_join">채팅서버 접속에 실패했습니다.\n다시 접속을 시도해보시기 바랍니다.</string>
<string name="msg_error_chat_text_length">메시지 길이가 0입니다. 한글자 이상의 문자를 입력하십시오.</string>
<string name="msg_error_chat_input_roomname">방 제목을 입력해 주십시오.</string>
<string name="msg_chat_confirm_member">목록에서 선택된 멤버를 삭제하시겠습니까?</string>
<string name="msg_chat_confirm_delete">이 방을 삭제 하시겠습니까?</string>
<string name="msg_error_chat_room_name_too_long">방 제목은 20자 이내로 입력해 주세요.</string>
<string name="msg_error_chat_name_has_invalid_character">특수문자 ;/?:@&amp;=+$,-_.!~*\'()#\\\"` 는 방 제목에 포함될 수 없습니다.</string>
<string name="msg_error_chat_room_sc_forbidden">사용자 정보를 확인할 수 없습니다. 다시 로그인하시기 바랍니다.</string>
</resources> </resources>
\ No newline at end of file
...@@ -540,7 +540,7 @@ ...@@ -540,7 +540,7 @@
<string name="title_all_operation">All</string> <string name="title_all_operation">All</string>
<!-- ABookCheck 1.2.3 --> <!-- ABookCheck 1.2.3 -->
<string name="title_quick_report_output">簡易帳票出力</string> <string name="title_quick_report_output">Report confirmation</string>
<!-- 1.0.1 Resource Pattern 1 --> <!-- 1.0.1 Resource Pattern 1 -->
<!-- 1.9.0.0--> <!-- 1.9.0.0-->
...@@ -1463,4 +1463,21 @@ ...@@ -1463,4 +1463,21 @@
<string name="msg_device_location_off">Set the location information function of the Device to ON.</string> <string name="msg_device_location_off">Set the location information function of the Device to ON.</string>
<string name="msg_theta_wifi_disconnect">THETA camera Wi-Fi connection has been lost. return to Select scene image screen.</string> <string name="msg_theta_wifi_disconnect">THETA camera Wi-Fi connection has been lost. return to Select scene image screen.</string>
</resources> <!-- Chat -->
\ No newline at end of file <string name="chat">Chat</string>
<string name="msg_error_chat_disconnected">Disconnected from the server.</string>
<string name="msg_error_chat_connect">There was a problem with the network.\n Please check the connection status of the network.</string>
<string name="msg_error_chat_server">App will not be able to communicate with the server. \n After a few moments, please try again.</string>
<string name="msg_error_chat">Failed to connect to chat server.\n After a few moments, please try again.</string>
<string name="msg_chat_confirm_exit">Do you want to leave this room?</string>
<string name="msg_error_chat_room_not_found">This chat room has already been deleted.</string>
<string name="msg_error_chat_500">System error occurred on the chat server.</string>
<string name="msg_error_chat_join">Failed to connect to chat server.\nplease try again.</string>
<string name="msg_error_chat_text_length">Message length is 0. please type 1 or more character.</string>
<string name="msg_error_chat_input_roomname">Please enter a room name.</string>
<string name="msg_chat_confirm_member">Do you want to remove selected members from the list?</string>
<string name="msg_chat_confirm_delete">Do you want to delete this room?</string>
<string name="msg_error_chat_room_name_too_long">Please enter room name less than 20 characters.</string>
<string name="msg_error_chat_name_has_invalid_character">The character ;/?:@&amp;=+$,-_.!~*\'()#\\\"` cannot be included in the roomname.</string>
<string name="msg_error_chat_room_sc_forbidden">Failed to authenticate. Please login again.</string>
</resources>
...@@ -136,6 +136,7 @@ ...@@ -136,6 +136,7 @@
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
android:id="@+id/print_layout"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
......
...@@ -139,6 +139,7 @@ ...@@ -139,6 +139,7 @@
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
android:id="@+id/print_layout"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
......
...@@ -136,6 +136,7 @@ ...@@ -136,6 +136,7 @@
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
android:id="@+id/print_layout"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
......
...@@ -129,6 +129,7 @@ ...@@ -129,6 +129,7 @@
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
android:id="@+id/print_layout"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
......
...@@ -135,8 +135,8 @@ ...@@ -135,8 +135,8 @@
android:layout_weight="1" android:layout_weight="1"
android:background="@drawable/btn_operation_print_white" android:background="@drawable/btn_operation_print_white"
android:contentDescription="@string/print" android:contentDescription="@string/print"
android:scaleX="0.7" android:scaleX="0.6"
android:scaleY="0.7" android:scaleY="0.6"
android:visibility="gone" /> android:visibility="gone" />
<ImageButton <ImageButton
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/LinearLayout1" android:id="@+id/LinearLayout1"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
...@@ -12,22 +13,38 @@ ...@@ -12,22 +13,38 @@
android:background="@color/app_color" android:background="@color/app_color"
android:minHeight="50dp" > android:minHeight="50dp" >
<Button <ImageButton
android:id="@+id/closeBtn" android:id="@+id/backBtn"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentLeft="false" android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" android:layout_alignParentStart="true"
android:layout_alignTop="@+id/linearLayout"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_marginLeft="5dp" android:layout_marginLeft="5dp"
android:layout_marginStart="5dp" android:layout_marginStart="5dp"
android:background="@null"
android:src="@drawable/btn_history_back_for_webview" />
<Button
android:id="@+id/closeBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentLeft="false"
android:layout_alignParentStart="false"
android:layout_centerVertical="true"
android:layout_marginEnd="5dp"
android:layout_marginRight="5dp"
android:background="@drawable/btn_close" android:background="@drawable/btn_close"
android:contentDescription="@string/cont_desc" /> android:contentDescription="@string/cont_desc"
android:layout_alignParentRight="true" />
<LinearLayout <LinearLayout
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerInParent="true"> android:layout_centerInParent="true"
android:id="@+id/linearLayout">
<TextView <TextView
android:id="@+id/title" android:id="@+id/title"
......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
style="@style/Theme_CustomProgressDialog"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background" >
<!--
<RelativeLayout
android:id="@+id/toolbar_layout"
style="@style/OperationSearchToolBar"
android:layout_height="50dp"
android:layout_width="match_parent">
<TextView
android:id="@+id/title"
style="@style/DialogToolBarTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="@string/chat"
android:textColor="@color/edt_text"
android:textSize="18sp" />
<ImageButton
android:id="@+id/chat_close_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|right"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="@drawable/ic_operation_close"/>
</RelativeLayout>
-->
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="vertical" >
<WebView
android:id="@+id/chatWebview2"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
<LinearLayout
android:id="@+id/toolbar2"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@drawable/bottom_toolbar_border"
android:minHeight="50dp"
android:visibility="visible">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:gravity="center">
<ImageButton
android:id="@+id/btn_operation_home"
style="@style/ToolBarIcon"
android:src="@drawable/btn_operation_home" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:gravity="center">
<ImageButton
android:id="@+id/btn_common_content"
style="@style/ToolBarIcon"
android:src="@drawable/btn_common_content" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:gravity="center">
<ImageButton
android:id="@+id/btn_communication_menu"
style="@style/ToolBarIcon"
android:layout_centerVertical="true"
android:src="@drawable/ic_communication_menu" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:gravity="center">
<ImageButton
android:id="@+id/btn_setting"
style="@style/ToolBarIcon"
android:layout_centerVertical="true"
android:src="@drawable/ic_operation_setting"
android:onClick="onClickSetting" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
\ No newline at end of file
...@@ -211,6 +211,55 @@ ...@@ -211,6 +211,55 @@
android:layout_height="1dp" android:layout_height="1dp"
android:background="@android:color/darker_gray"/> android:background="@android:color/darker_gray"/>
<LinearLayout
android:id="@+id/ll_item_chat"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginTop="5dp"
android:layout_weight="3"
android:gravity="center"
android:orientation="horizontal"
android:background="@drawable/list_selector_holo_light"
android:focusable="true"
android:clickable="true"
android:visibility="visible">
<ImageView
android:id="@+id/btn_chat"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginRight="15dp"
android:src="@drawable/ic_communication_chat_list"
android:visibility="visible" />
<TextView
android:id="@+id/chat"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="15dp"
android:layout_toRightOf="@+id/btn_push_message"
android:layout_weight="0.8"
android:paddingLeft="6dip"
android:text="@string/chat"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/text_select" />
<ImageView
android:id="@+id/item4_nextLevel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
android:layout_alignParentRight="true"
android:layout_centerVertical="false"
android:src="@drawable/ic_navigation_next_item"
android:visibility="visible" />
</LinearLayout>
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
\ No newline at end of file
...@@ -22,8 +22,11 @@ import java.math.RoundingMode; ...@@ -22,8 +22,11 @@ import java.math.RoundingMode;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URL; import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Date;
import java.util.TimeZone;
import java.util.Timer; import java.util.Timer;
import java.util.TimerTask; import java.util.TimerTask;
...@@ -357,6 +360,7 @@ public class HttpConnector { ...@@ -357,6 +360,7 @@ public class HttpConnector {
try { try {
//API2.0 //API2.0
if (mIsOldApi) { if (mIsOldApi) {
//画像ファイルの場合、「recordTime」がないのでJSONException発生
entry.getInt("recordTime"); entry.getInt("recordTime");
//動画ファイルは保存しない。 //動画ファイルは保存しない。
continue; continue;
...@@ -1110,6 +1114,8 @@ public class HttpConnector { ...@@ -1110,6 +1114,8 @@ public class HttpConnector {
//API2.0 //API2.0
if (mSessionId != null) { if (mSessionId != null) {
parameters.put("sessionId", mSessionId); parameters.put("sessionId", mSessionId);
//THETA S端末の時間初期化問題で、現在時間は常に設定
options.put("dateTimeZone", currentDateTimeZone());
} }
parameters.put("options", options); parameters.put("options", options);
...@@ -1520,4 +1526,12 @@ public class HttpConnector { ...@@ -1520,4 +1526,12 @@ public class HttpConnector {
return isSuccess; return isSuccess;
} }
/**
* yyyy:MM:dd HH:mm:ssXXXフォマットで現在の日付を返す。
* @return 現在の日付
*/
private String currentDateTimeZone() {
return new SimpleDateFormat("yyyy:MM:dd HH:mm:ssXXX").format(new Date());
}
} }
...@@ -12,16 +12,28 @@ import android.view.SurfaceView; ...@@ -12,16 +12,28 @@ import android.view.SurfaceView;
import java.io.IOException; import java.io.IOException;
import jp.agentec.abook.abv.bl.common.log.Logger;
/** /**
* Motion JPEG view * Motion JPEG view
*/ */
public class MJpegView extends SurfaceView implements SurfaceHolder.Callback { public class MJpegView extends SurfaceView implements SurfaceHolder.Callback {
private static final String TAG = "MJpegView";
private MJpegViewThread mMJpegViewThread = null; private MJpegViewThread mMJpegViewThread = null;
private MJpegInputStream mMJpegInputStream = null; private MJpegInputStream mMJpegInputStream = null;
private boolean existSurface = false; private boolean existSurface = false;
private int mDisplayWidth; private int mDisplayWidth;
private int mDisplayHeight; private int mDisplayHeight;
private MJpegView.LiveCameraListener mListener;
public interface LiveCameraListener {
void liveCameraPlayFail();
}
public void setLiveCameraListenerListener(MJpegView.LiveCameraListener listener) {
this.mListener = listener;
}
/** /**
* Constructor * Constructor
* @param context * @param context
...@@ -107,8 +119,12 @@ public class MJpegView extends SurfaceView implements SurfaceHolder.Callback { ...@@ -107,8 +119,12 @@ public class MJpegView extends SurfaceView implements SurfaceHolder.Callback {
* @param source Source stream * @param source Source stream
*/ */
public void setSource(MJpegInputStream source) { public void setSource(MJpegInputStream source) {
mMJpegInputStream = source; if (source == null) { //mMJpegInputStreamのクローズ作業のため、現在スレッドをストップする。
play(); stopPlay();
} else {
mMJpegInputStream = source;
play();
}
} }
/** /**
...@@ -185,7 +201,6 @@ public class MJpegView extends SurfaceView implements SurfaceHolder.Callback { ...@@ -185,7 +201,6 @@ public class MJpegView extends SurfaceView implements SurfaceHolder.Callback {
Bitmap bitmap; Bitmap bitmap;
Rect bitmapRect; Rect bitmapRect;
Canvas bitmapCanvas = null; Canvas bitmapCanvas = null;
while (keepRunning) { while (keepRunning) {
if (existSurface) { if (existSurface) {
try { try {
...@@ -201,7 +216,9 @@ public class MJpegView extends SurfaceView implements SurfaceHolder.Callback { ...@@ -201,7 +216,9 @@ public class MJpegView extends SurfaceView implements SurfaceHolder.Callback {
} }
} catch (IOException e) { } catch (IOException e) {
e.getStackTrace(); e.getStackTrace();
Logger.e(TAG, "MJpegView IOException = " + e.toString());
keepRunning = false; keepRunning = false;
mListener.liveCameraPlayFail();
} }
} }
} finally { } finally {
...@@ -226,8 +243,10 @@ public class MJpegView extends SurfaceView implements SurfaceHolder.Callback { ...@@ -226,8 +243,10 @@ public class MJpegView extends SurfaceView implements SurfaceHolder.Callback {
if (mMJpegInputStream != null) { if (mMJpegInputStream != null) {
try { try {
mMJpegInputStream.close(); mMJpegInputStream.close();
mMJpegInputStream = null;
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
Logger.e(TAG, "mMJpegInputStream IOException = " + e.toString());
} }
} }
} }
......
...@@ -11,6 +11,8 @@ import android.util.Log; ...@@ -11,6 +11,8 @@ import android.util.Log;
import com.google.firebase.messaging.FirebaseMessagingService; import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage; import com.google.firebase.messaging.RemoteMessage;
import org.json.adf.JSONObject;
import java.util.Map; import java.util.Map;
import jp.agentec.abook.abv.bl.common.exception.ABVException; import jp.agentec.abook.abv.bl.common.exception.ABVException;
...@@ -54,12 +56,49 @@ public class ABVFcmListenerService extends FirebaseMessagingService { ...@@ -54,12 +56,49 @@ public class ABVFcmListenerService extends FirebaseMessagingService {
UserAuthenticateLogic logic = AbstractLogic.getLogic(UserAuthenticateLogic.class); UserAuthenticateLogic logic = AbstractLogic.getLogic(UserAuthenticateLogic.class);
MemberInfoDto memberInfo = logic.getMemberInfo(); MemberInfoDto memberInfo = logic.getMemberInfo();
if (!StringUtil.isNullOrWhiteSpace(msg.get(AppDefType.PushMessageKey.message)) && this.getResources().getInteger(R.integer.push_message) == 1 && memberInfo != null) { if (!StringUtil.isNullOrWhiteSpace(msg.get(AppDefType.PushMessageKey.message)) && this.getResources().getInteger(R.integer.push_message) == 1 && memberInfo != null) {
// Check pushmessage by chat
String tempMsg = msg.get(AppDefType.PushMessageKey.message);
String pushMsg = "";
Long roomId = null;
String roomName = "";
String pushSendLoginId = "";
long pushSendDate = 0;
Log.d(TAG,"tempMsg : "+ tempMsg);
if (tempMsg.indexOf("pushSendLoginId") > 0) {
JSONObject json = new JSONObject(tempMsg);
Object Obj = json.getString("pushSendLoginId");
roomId = json.getLong("roomId");
roomName = json.getString("roomName");
pushSendLoginId = json.getString("pushSendLoginId");
pushSendDate = json.getLong("pushSendDate");
pushMsg = json.getString("message");
if (pushMsg.length() > 0) {
tempMsg = pushMsg;
}
if (AppUtil.isAppForground(this)) {
msg.put(AppDefType.PushMessageKey.message, pushMsg);
}
}
if (AppUtil.isAppForground(this)) { if (AppUtil.isAppForground(this)) {
Intent pushMsgDialog = new Intent(ABVFcmListenerService.this, ShowPushMessageDailogActivity.class); Intent pushMsgDialog = new Intent(ABVFcmListenerService.this, ShowPushMessageDailogActivity.class);
pushMsgDialog.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); pushMsgDialog.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
pushMsgDialog.putExtra(AppDefType.PushMessageKey.message, msg.get(AppDefType.PushMessageKey.message)); pushMsgDialog.putExtra(AppDefType.PushMessageKey.message, tempMsg);
pushMsgDialog.putExtra(AppDefType.PushMessageKey.data, msg.get(AppDefType.PushMessageKey.data)); pushMsgDialog.putExtra(AppDefType.PushMessageKey.data, msg.get(AppDefType.PushMessageKey.data));
pushMsgDialog.putExtra(AppDefType.PushMessageKey.operationId, msg.get(AppDefType.PushMessageKey.operationId)); pushMsgDialog.putExtra(AppDefType.PushMessageKey.operationId, msg.get(AppDefType.PushMessageKey.operationId));
// push message
if (roomName.length() > 0) {
pushMsgDialog.putExtra(AppDefType.ChatPushMessageKey.roomId, roomId); // Room Id
pushMsgDialog.putExtra(AppDefType.ChatPushMessageKey.roomName, roomName); // Room Name
pushMsgDialog.putExtra(AppDefType.ChatPushMessageKey.pushSendLoginId, pushSendLoginId); // sendLoginId
pushMsgDialog.putExtra(AppDefType.ChatPushMessageKey.pushSendDate, pushSendDate);
}
startActivity(pushMsgDialog); startActivity(pushMsgDialog);
} else { } else {
sendNotification(msg); sendNotification(msg);
...@@ -78,7 +117,49 @@ public class ABVFcmListenerService extends FirebaseMessagingService { ...@@ -78,7 +117,49 @@ public class ABVFcmListenerService extends FirebaseMessagingService {
if (message.get(AppDefType.PushMessageKey.operationId) != null) { if (message.get(AppDefType.PushMessageKey.operationId) != null) {
intent.putExtra(AppDefType.PushMessageKey.operationId, message.get(AppDefType.PushMessageKey.operationId)); intent.putExtra(AppDefType.PushMessageKey.operationId, message.get(AppDefType.PushMessageKey.operationId));
intent.putExtra(AppDefType.PushMessageKey.message, message.get(AppDefType.PushMessageKey.message)); intent.putExtra(AppDefType.PushMessageKey.message, message.get(AppDefType.PushMessageKey.message));
} else {
// Check pushmessage by chat
try {
// チャットプッシュメッセージがある場合
UserAuthenticateLogic logic = AbstractLogic.getLogic(UserAuthenticateLogic.class);
MemberInfoDto memberInfo = logic.getMemberInfo();
if (!StringUtil.isNullOrWhiteSpace(message.get(AppDefType.PushMessageKey.message))) {
String tempMsg = message.get(AppDefType.PushMessageKey.message);
String pushMsg = "";
Long roomId = null;
String roomName = "";
String pushSendLoginId = "";
long pushSendDate = 0;
Log.d(TAG,"tempMsg : "+ tempMsg);
if (tempMsg.indexOf("pushSendLoginId") > 0) {
JSONObject json = new JSONObject(tempMsg);
Object Obj = json.getString("pushSendLoginId");
roomId = json.getLong("roomId");
roomName = json.getString("roomName");
pushSendLoginId = json.getString("pushSendLoginId");
pushSendDate = json.getLong("pushSendDate");
pushMsg = json.getString("message");
message.put(AppDefType.PushMessageKey.message, pushMsg);
// push message
if (roomName.length() > 0) {
intent.putExtra(AppDefType.ChatPushMessageKey.roomId, roomId); // Room Id
intent.putExtra(AppDefType.ChatPushMessageKey.roomName, roomName); // Room Name
intent.putExtra(AppDefType.ChatPushMessageKey.pushSendLoginId, pushSendLoginId); // sendLoginId
intent.putExtra(AppDefType.ChatPushMessageKey.pushSendDate, pushSendDate);
}
}
}
} catch (ABVException e) {
// ignore
Logger.e(TAG, e.toString());
}
} }
intent.setClassName(getApplicationContext(), SplashScreenActivity.class.getName()); intent.setClassName(getApplicationContext(), SplashScreenActivity.class.getName());
Notification notification; Notification notification;
......
...@@ -26,24 +26,25 @@ public class OnAppDownloadReceiver extends BroadcastReceiver { ...@@ -26,24 +26,25 @@ public class OnAppDownloadReceiver extends BroadcastReceiver {
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(DownloadManager.ACTION_DOWNLOAD_COMPLETE)) { if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(intent.getAction())) {
long id = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1); long id = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
Logger.d("Download Complete ID : " + id); Logger.d("Download Complete ID : " + id);
String downloadedTo = null;
DownloadManager dm = (DownloadManager)context.getSystemService(context.DOWNLOAD_SERVICE); DownloadManager dm = (DownloadManager)context.getSystemService(context.DOWNLOAD_SERVICE);
final Cursor cursor; final Cursor cursor;
if (dm != null) { if (dm != null) {
// 現在ダウンロードされたファイルを確認する。
cursor = dm.query( cursor = dm.query(
new DownloadManager.Query().setFilterById(id)); new DownloadManager.Query().setFilterById(id));
if (cursor.moveToFirst()) { if (cursor.moveToFirst()) {
final String downloadedTo = cursor.getString( downloadedTo = cursor.getString(
cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI)); cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
Log.d(TAG, "The file has been downloaded to: " + downloadedTo); Log.d(TAG, "The file has been downloaded to: " + downloadedTo);
if (downloadedTo != null && downloadedTo.endsWith(".pdf")) { if (downloadedTo != null && !downloadedTo.endsWith(".apk")) {
Toast.makeText(context, context.getResources().getString(R.string.download_success), //To notify the Client that the file is being downloaded Toast.makeText(context, context.getResources().getString(R.string.download_success), //To notify the Client that the file is being downloaded
Toast.LENGTH_LONG).show(); Toast.LENGTH_LONG).show();
// PDFファイルの場合はAPK用の処理は通過させない
return; return;
} }
} }
...@@ -53,15 +54,18 @@ public class OnAppDownloadReceiver extends BroadcastReceiver { ...@@ -53,15 +54,18 @@ public class OnAppDownloadReceiver extends BroadcastReceiver {
// ダウンロードマネージャの通知領域をクリックした場合はメッセージ表示のみ // ダウンロードマネージャの通知領域をクリックした場合はメッセージ表示のみ
Toast.makeText(context, intent.getAction(), Toast.LENGTH_LONG).show(); Toast.makeText(context, intent.getAction(), Toast.LENGTH_LONG).show();
} else { } else {
File file = new File(context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), ABVEnvironment.APK_FILE_NAME); // APKファイルの場合
if (file.exists()) { if (downloadedTo != null && downloadedTo.toLowerCase().endsWith(".apk")) {
Intent i = new Intent(Intent.ACTION_VIEW); File file = new File(context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), ABVEnvironment.APK_FILE_NAME);
// Activity以外からActivityを呼び出すためのフラグを設定 if (file.exists()) {
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Intent i = new Intent(Intent.ACTION_VIEW);
i.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive"); // Activity以外からActivityを呼び出すためのフラグを設定
context.startActivity(i); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
} else { i.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
Toast.makeText(context, "No Exist APK File: ", Toast.LENGTH_LONG).show(); context.startActivity(i);
} else {
Toast.makeText(context, "No Exist APK File: ", Toast.LENGTH_LONG).show();
}
} }
} }
} }
......
...@@ -90,6 +90,7 @@ public abstract class ABVContentViewActivity extends ABVAuthenticatedActivity { ...@@ -90,6 +90,7 @@ public abstract class ABVContentViewActivity extends ABVAuthenticatedActivity {
private static final String TAG ="ABVContentViewActivity"; private static final String TAG ="ABVContentViewActivity";
public final static int ABOOK_CHECK_TASK_IMAGE = 103; public final static int ABOOK_CHECK_TASK_IMAGE = 103;
public final static int ABOOK_CHECK_TASK_VIDEO = 104; public final static int ABOOK_CHECK_TASK_VIDEO = 104;
protected final static int ABOOK_CHECK_SELECT_SCENE = 105;
protected long contentId;// 表示中のコンテンツID protected long contentId;// 表示中のコンテンツID
protected long objectId; // オブジェクトID(オブジェクト用のActivityのときのみ使用) protected long objectId; // オブジェクトID(オブジェクト用のActivityのときのみ使用)
......
...@@ -377,7 +377,15 @@ public abstract class ABVNoAuthenticatedActivity extends ABVActivity { ...@@ -377,7 +377,15 @@ public abstract class ABVNoAuthenticatedActivity extends ABVActivity {
if (extras != null && !StringUtil.isNullOrEmpty(extras.getString(AppDefType.PushMessageKey.operationId))) { if (extras != null && !StringUtil.isNullOrEmpty(extras.getString(AppDefType.PushMessageKey.operationId))) {
intent.putExtra(AppDefType.PushMessageKey.operationId, extras.getString(AppDefType.PushMessageKey.operationId)); intent.putExtra(AppDefType.PushMessageKey.operationId, extras.getString(AppDefType.PushMessageKey.operationId));
intent.putExtra(AppDefType.PushMessageKey.message, extras.getString(AppDefType.PushMessageKey.message)); intent.putExtra(AppDefType.PushMessageKey.message, extras.getString(AppDefType.PushMessageKey.message));
} } else {
// チャットのプッシュメッセージがある場合
if (extras != null && !StringUtil.isNullOrEmpty(extras.getString(AppDefType.ChatPushMessageKey.roomName))) {
intent.putExtra(AppDefType.ChatPushMessageKey.roomId, extras.getLong(AppDefType.ChatPushMessageKey.roomId)); // Room Id
intent.putExtra(AppDefType.ChatPushMessageKey.roomName, extras.getString(AppDefType.ChatPushMessageKey.roomName)); // Room Name
intent.putExtra(AppDefType.ChatPushMessageKey.pushSendLoginId, extras.getString(AppDefType.ChatPushMessageKey.pushSendLoginId)); // sendLoginId
intent.putExtra(AppDefType.ChatPushMessageKey.pushSendDate, extras.getString(AppDefType.ChatPushMessageKey.pushSendDate));
}
}
intent.setClassName(getApplicationContext().getPackageName(), getMainActivityClassName()).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.setClassName(getApplicationContext().getPackageName(), getMainActivityClassName()).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
final Uri data = getIntent().getData(); final Uri data = getIntent().getData();
Logger.i(TAG, "call from URI intent : %s", data); Logger.i(TAG, "call from URI intent : %s", data);
......
...@@ -3,10 +3,15 @@ package jp.agentec.abook.abv.ui.common.activity; ...@@ -3,10 +3,15 @@ package jp.agentec.abook.abv.ui.common.activity;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.os.Bundle; import android.os.Bundle;
import java.util.Date;
import java.util.List;
import jp.agentec.abook.abv.bl.common.log.Logger; import jp.agentec.abook.abv.bl.common.log.Logger;
import jp.agentec.abook.abv.bl.dto.OperationDto; import jp.agentec.abook.abv.bl.dto.OperationDto;
import jp.agentec.abook.abv.bl.dto.PushMessageDto;
import jp.agentec.abook.abv.bl.logic.AbstractLogic; import jp.agentec.abook.abv.bl.logic.AbstractLogic;
import jp.agentec.abook.abv.bl.logic.OperationLogic; import jp.agentec.abook.abv.bl.logic.OperationLogic;
import jp.agentec.abook.abv.bl.logic.PushMessageLogic;
import jp.agentec.abook.abv.launcher.android.R; import jp.agentec.abook.abv.launcher.android.R;
import jp.agentec.abook.abv.ui.common.appinfo.AppDefType; import jp.agentec.abook.abv.ui.common.appinfo.AppDefType;
import jp.agentec.abook.abv.ui.common.appinfo.AppDefType.PushMessageKey; import jp.agentec.abook.abv.ui.common.appinfo.AppDefType.PushMessageKey;
...@@ -16,6 +21,8 @@ import jp.agentec.abook.abv.ui.common.util.AlertDialogUtil; ...@@ -16,6 +21,8 @@ import jp.agentec.abook.abv.ui.common.util.AlertDialogUtil;
import jp.agentec.abook.abv.ui.common.util.PatternStringUtil; import jp.agentec.abook.abv.ui.common.util.PatternStringUtil;
import jp.agentec.abook.abv.ui.home.activity.OperationListActivity; import jp.agentec.abook.abv.ui.home.activity.OperationListActivity;
import jp.agentec.abook.abv.ui.home.helper.ActivityHandlingHelper; import jp.agentec.abook.abv.ui.home.helper.ActivityHandlingHelper;
import jp.agentec.adf.util.DateTimeFormat;
import jp.agentec.adf.util.DateTimeUtil;
import jp.agentec.adf.util.StringUtil; import jp.agentec.adf.util.StringUtil;
public class ShowPushMessageDailogActivity extends ABVUIActivity { public class ShowPushMessageDailogActivity extends ABVUIActivity {
...@@ -110,7 +117,33 @@ public class ShowPushMessageDailogActivity extends ABVUIActivity { ...@@ -110,7 +117,33 @@ public class ShowPushMessageDailogActivity extends ABVUIActivity {
alertDialog.setOnDismissListener(new DialogInterface.OnDismissListener() { alertDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override @Override
public void onDismiss(DialogInterface dialog) { public void onDismiss(DialogInterface dialog) {
finish(); // Check PushMessage
Bundle extras = getIntent().getExtras();
if (extras != null) {
Long roomId = extras.getLong(AppDefType.ChatPushMessageKey.roomId, 0);
String roomName = extras.getString(AppDefType.ChatPushMessageKey.roomName);
String pushSendLoginId = extras.getString(AppDefType.ChatPushMessageKey.pushSendLoginId);
long pushSendDate = extras.getLong(AppDefType.ChatPushMessageKey.pushSendDate);
if (roomId > 0 && !StringUtil.isNullOrEmpty(roomName)) {
List<PushMessageDto> pushMessageDtoList = AbstractLogic.getLogic(PushMessageLogic.class).getAllPushMessageList();
Logger.d("pushSendDate","pushSendDate : " + pushSendDate);
String pushSendDateDate = DateTimeUtil.toString(new Date(pushSendDate), DateTimeFormat.yyyyMMddHHmmssSSS_none);
Logger.d("pushSendDate","pushSendDateDate : " + pushSendDateDate);
String pushSendDateDate2 = DateTimeUtil.toString(DateTimeUtil.toDate(pushSendDateDate, DateTimeFormat.yyyyMMddHHmmssSSS_none), DateTimeFormat.yyyyMMddHHmmssSSS_none);
Logger.d("pushSendDate","pushSendDateDate2 : " + pushSendDateDate2);
for (int i=0; i < pushMessageDtoList.size() - 1; i++) {
String tempDate = DateTimeUtil.toString(pushMessageDtoList.get(i).pushSendDate, DateTimeFormat.yyyyMMddHHmmssSSS_none);
Logger.d("tempDate","date : " + tempDate);
}
ActivityHandlingHelper.getInstance().startChatWebviewActivity(roomId, roomName);
}
}
finish();
} }
}); });
alertDialog.show(); alertDialog.show();
......
...@@ -68,6 +68,9 @@ public interface AppDefType { ...@@ -68,6 +68,9 @@ public interface AppDefType {
String OPERATION_SORT_CONDITION = "operation_sort_condition"; // 作業のソート String OPERATION_SORT_CONDITION = "operation_sort_condition"; // 作業のソート
String APERTURE_MASTER_DATA_FETCH_DATE = "apertureMasterDataFetchDate"; // 絞り検索マスタデータのFetchDate String APERTURE_MASTER_DATA_FETCH_DATE = "apertureMasterDataFetchDate"; // 絞り検索マスタデータのFetchDate
String CHAT_LAST_ROOMNAME = "chatLastRoom"; // 最後のルーム名
String CHAT_LAST_ROOMID = "chatLastRoomId"; // 最後のルームID
} }
interface SubMenuType { interface SubMenuType {
...@@ -131,4 +134,12 @@ public interface AppDefType { ...@@ -131,4 +134,12 @@ public interface AppDefType {
interface UrlPattern { interface UrlPattern {
String smart360 = "smart360"; String smart360 = "smart360";
} }
// Chat PushMessage
interface ChatPushMessageKey {
String roomId = "roomId";
String roomName = "roomName";
String pushSendLoginId = "pushSendLoginId";
String pushSendDate = "pushSendDate";
}
} }
...@@ -14,10 +14,12 @@ import java.io.InputStream; ...@@ -14,10 +14,12 @@ import java.io.InputStream;
import jp.agentec.abook.abv.bl.common.ABVEnvironment; import jp.agentec.abook.abv.bl.common.ABVEnvironment;
import jp.agentec.abook.abv.bl.common.log.Logger; import jp.agentec.abook.abv.bl.common.log.Logger;
import jp.agentec.abook.abv.bl.data.ABVDataCache;
import jp.agentec.abook.abv.bl.download.ContentFileExtractor; import jp.agentec.abook.abv.bl.download.ContentFileExtractor;
import jp.agentec.abook.abv.launcher.android.R; import jp.agentec.abook.abv.launcher.android.R;
import jp.agentec.abook.abv.ui.common.activity.ABVUIActivity; import jp.agentec.abook.abv.ui.common.activity.ABVUIActivity;
import jp.agentec.abook.abv.ui.home.helper.ActivityHandlingHelper; import jp.agentec.abook.abv.ui.home.helper.ActivityHandlingHelper;
import jp.agentec.abook.abv.ui.viewer.activity.ParentWebViewActivity;
import jp.agentec.adf.util.FileUtil; import jp.agentec.adf.util.FileUtil;
public class ABookSettingActivity extends PreferenceActivity { public class ABookSettingActivity extends PreferenceActivity {
...@@ -72,7 +74,28 @@ public class ABookSettingActivity extends PreferenceActivity { ...@@ -72,7 +74,28 @@ public class ABookSettingActivity extends PreferenceActivity {
private void backToHome() { private void backToHome() {
ABVUIActivity activity = ActivityHandlingHelper.getInstance().getPreviousOfSettingActivity(); ABVUIActivity activity = ActivityHandlingHelper.getInstance().getPreviousOfSettingActivity();
Intent intent = new Intent(this, (activity != null ? activity.getClass() : OperationListActivity.class));
// Chat
ParentWebViewActivity chatActity = null;
Intent intent = null;
if (activity == null) {
chatActity = ActivityHandlingHelper.getInstance().getPreviousForChatOfSettingActivity();
intent = new Intent(this, (chatActity != null ? chatActity.getClass() : OperationListActivity.class));
//noinspection VariableNotUsedInsideIf
if (chatActity != null) {
intent.putExtra("chatWebviewUrl", ABVEnvironment.getInstance().acmsAddress + ABVDataCache.getInstance().getUrlPath() + "/chatapi/chat/");
String sid = ABVDataCache.getInstance().getMemberInfo().sid;
intent.putExtra("sid", sid);
String loginId = ABVDataCache.getInstance().getMemberInfo().loginId;
String shopName = ABVDataCache.getInstance().getUrlPath();
intent.putExtra("loginId", loginId);
intent.putExtra("shopName", shopName);
}
}
if (chatActity == null) {
intent = new Intent(this, (activity != null ? activity.getClass() : OperationListActivity.class));
}
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent); startActivity(intent);
......
...@@ -398,7 +398,12 @@ public class LoginActivity extends ABVLoginActivity { ...@@ -398,7 +398,12 @@ public class LoginActivity extends ABVLoginActivity {
CommonExecutor.execute(new Runnable() { CommonExecutor.execute(new Runnable() {
@Override @Override
public void run() { public void run() {
fcmRegister(); if (oldMemberInfoDto != null && oldMemberInfoDto.loginStatus == LoginStatus.LimitLogin.statusCode()) {
// アプリロックの場合サーバ認証せずにログイン
offlineLogin();
} else {
fcmRegister();
}
} }
}); });
} }
...@@ -627,6 +632,10 @@ public class LoginActivity extends ABVLoginActivity { ...@@ -627,6 +632,10 @@ public class LoginActivity extends ABVLoginActivity {
} else { } else {
changeUserInit2(); changeUserInit2();
} }
// ユーザ変更があった場合、チャットのルーム情報をクリアする
clearChatLastRoom();
//ユーザ変更があった場合、FetchDateをクリアする //ユーザ変更があった場合、FetchDateをクリアする
AcmsDao dao = AbstractDao.getDao(AcmsDao.class); AcmsDao dao = AbstractDao.getDao(AcmsDao.class);
dao.clearFetchDate(); dao.clearFetchDate();
...@@ -698,4 +707,12 @@ public class LoginActivity extends ABVLoginActivity { ...@@ -698,4 +707,12 @@ public class LoginActivity extends ABVLoginActivity {
protected void goNext() { protected void goNext() {
showMainActivity(mLoginId); showMainActivity(mLoginId);
} }
// チャットのルーム情報をクリア
private void clearChatLastRoom() {
// 最後のチャットのルーム名
PreferenceUtil.putUserPref(getApplicationContext(), UserPrefKey.CHAT_LAST_ROOMNAME, "");
// 最後のチャットのルーム
PreferenceUtil.putUserPref(getApplicationContext(), UserPrefKey.CHAT_LAST_ROOMID, "");
}
} }
...@@ -259,14 +259,19 @@ public class OperationListActivity extends ABVUIActivity { ...@@ -259,14 +259,19 @@ public class OperationListActivity extends ABVUIActivity {
} }
}); });
// 簡易帳票印刷ボタン if (ABVDataCache.getInstance().serviceOption.isUnableIOReport()) {
mQuickReportPrintButton.setOnClickListener(new View.OnClickListener() { // 簡易帳票印刷ボタン
@Override mQuickReportPrintButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) { @Override
showPrintTargetSelect(); public void onClick(View v) {
} showPrintTargetSelect();
}); }
mQuickReportPrintButton.setVisibility(View.VISIBLE); });
mQuickReportPrintButton.setVisibility(View.VISIBLE);
} else {
findViewById(R.id.print_layout).setVisibility(View.GONE);
mQuickReportPrintButton.setVisibility(View.GONE);
}
// 一括同期ボタン // 一括同期ボタン
mOperationBatchSyncButton.setOnClickListener(new View.OnClickListener() { mOperationBatchSyncButton.setOnClickListener(new View.OnClickListener() {
...@@ -349,6 +354,14 @@ public class OperationListActivity extends ABVUIActivity { ...@@ -349,6 +354,14 @@ public class OperationListActivity extends ABVUIActivity {
alertDialog.show(); alertDialog.show();
} }
} }
// プッシュメッセージがある場合
else if (!StringUtil.isNullOrEmpty(getIntent().getStringExtra(AppDefType.ChatPushMessageKey.roomName)) &&
getIntent().getLongExtra(AppDefType.ChatPushMessageKey.roomId, '0') > 0) {
ActivityHandlingHelper.getInstance().startChatWebviewActivity(
getIntent().getLongExtra(AppDefType.ChatPushMessageKey.roomId, '0'),
getIntent().getStringExtra(AppDefType.ChatPushMessageKey.roomName));
}
// リスト更新 // リスト更新
setOperationListView(); setOperationListView();
} }
......
...@@ -109,8 +109,12 @@ public class OperationRelatedContentActivity extends ABVUIActivity { ...@@ -109,8 +109,12 @@ public class OperationRelatedContentActivity extends ABVUIActivity {
showCommunicationMenuDialog(); showCommunicationMenuDialog();
} }
}); });
// 印刷ボタン活性化 if (ABVDataCache.getInstance().serviceOption.isUnableIOReport()) {
mQuickReportPrintButton.setVisibility(View.VISIBLE); mQuickReportPrintButton.setVisibility(View.VISIBLE);
} else {
findViewById(R.id.print_layout).setVisibility(View.GONE);
mQuickReportPrintButton.setVisibility(View.GONE);
}
} }
@Override @Override
......
...@@ -364,7 +364,14 @@ public class CheckOZDViewActivity extends ABVContentViewActivity { ...@@ -364,7 +364,14 @@ public class CheckOZDViewActivity extends ABVContentViewActivity {
@Override @Override
public boolean onKeyUp(int keyCode, KeyEvent event) { public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode != KeyEvent.KEYCODE_BACK) { if (keyCode == KeyEvent.KEYCODE_BACK) {
if (mAddReport) {
ozdCancelProcess(); // Ozd作業画面を閉じる
} else {
// 作業追加区分がなしの場合
goToMain(); // 一覧画面に遷移
}
} else {
return super.onKeyUp(keyCode, event); return super.onKeyUp(keyCode, event);
} }
return false; return false;
......
...@@ -1535,6 +1535,10 @@ public class ContentViewActivity extends ABVContentViewActivity { ...@@ -1535,6 +1535,10 @@ public class ContentViewActivity extends ABVContentViewActivity {
public boolean onKeyUp(int keyCode, KeyEvent event) { public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) { if (keyCode == KeyEvent.KEYCODE_BACK) {
Logger.d(TAG, "KeyEvent.KEYCODE_BACK"); Logger.d(TAG, "KeyEvent.KEYCODE_BACK");
if (mOperationId != null && mOperationId > -1) {
putUserPref(AppDefType.UserPrefKey.SYNC_TARGET_OPERATION_ID, mOperationId);
}
if (isVideoMax) { if (isVideoMax) {
videoMaxToDefault(); videoMaxToDefault();
} else if (isMarking) { } else if (isMarking) {
......
...@@ -623,7 +623,7 @@ public class HTMLWebViewActivity extends ParentWebViewActivity { ...@@ -623,7 +623,7 @@ public class HTMLWebViewActivity extends ParentWebViewActivity {
*/ */
private void printButtonActivityControl() { private void printButtonActivityControl() {
OperationDto operation = mOperationDao.getOperation(mOperationId); OperationDto operation = mOperationDao.getOperation(mOperationId);
if (operation != null && operation.quickReport == 1) { if (operation != null && operation.quickReport == 1 && ABVDataCache.getInstance().serviceOption.isUnableIOReport()) {
printButton.setVisibility(View.VISIBLE); printButton.setVisibility(View.VISIBLE);
} else { } else {
printButton.setVisibility(View.GONE); printButton.setVisibility(View.GONE);
...@@ -709,6 +709,10 @@ public class HTMLWebViewActivity extends ParentWebViewActivity { ...@@ -709,6 +709,10 @@ public class HTMLWebViewActivity extends ParentWebViewActivity {
return; return;
} }
mUploadMessage.onReceiveValue(result); mUploadMessage.onReceiveValue(result);
} else if (requestCode == ABOOK_CHECK_SELECT_SCENE) {
if (intent != null && result != null) {
confirmEntrySceneDialog(result[0]);
}
} }
mUploadMessage = null; mUploadMessage = null;
} }
......
...@@ -729,6 +729,10 @@ public class HTMLXWalkWebViewActivity extends ParentWebViewActivity { ...@@ -729,6 +729,10 @@ public class HTMLXWalkWebViewActivity extends ParentWebViewActivity {
} }
// 動画 // 動画
mUploadMessage.onReceiveValue(result); mUploadMessage.onReceiveValue(result);
} else if (requestCode == ABOOK_CHECK_SELECT_SCENE) {
if (intent != null && result != null) {
confirmEntrySceneDialog(result);
}
} }
mUploadMessage = null; mUploadMessage = null;
} }
......
...@@ -10,10 +10,12 @@ import android.view.Window; ...@@ -10,10 +10,12 @@ import android.view.Window;
import android.webkit.CookieManager; import android.webkit.CookieManager;
import android.webkit.DownloadListener; import android.webkit.DownloadListener;
import android.webkit.URLUtil; import android.webkit.URLUtil;
import android.webkit.WebBackForwardList;
import android.webkit.WebSettings; import android.webkit.WebSettings;
import android.webkit.WebView; import android.webkit.WebView;
import android.webkit.WebViewClient; import android.webkit.WebViewClient;
import android.widget.Button; import android.widget.Button;
import android.widget.ImageButton;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
...@@ -34,6 +36,7 @@ public class OnlineHTMLWebViewActivity extends ABVContentViewActivity { ...@@ -34,6 +36,7 @@ public class OnlineHTMLWebViewActivity extends ABVContentViewActivity {
private WebView webView; private WebView webView;
private Button closeButton; private Button closeButton;
private ImageButton backButton;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
...@@ -59,7 +62,7 @@ public class OnlineHTMLWebViewActivity extends ABVContentViewActivity { ...@@ -59,7 +62,7 @@ public class OnlineHTMLWebViewActivity extends ABVContentViewActivity {
OnlineHTMLWebViewLogic logic = AbstractLogic.getLogic(OnlineHTMLWebViewLogic.class); OnlineHTMLWebViewLogic logic = AbstractLogic.getLogic(OnlineHTMLWebViewLogic.class);
webView.postUrl(url, logic.getPostData(param)); webView.postUrl(url, logic.getPostData(param));
// ***** るボタン // ***** 閉じるボタン
closeButton = findViewById(R.id.closeBtn); closeButton = findViewById(R.id.closeBtn);
closeButton.setOnClickListener(new View.OnClickListener() { closeButton.setOnClickListener(new View.OnClickListener() {
@Override @Override
...@@ -67,6 +70,26 @@ public class OnlineHTMLWebViewActivity extends ABVContentViewActivity { ...@@ -67,6 +70,26 @@ public class OnlineHTMLWebViewActivity extends ABVContentViewActivity {
finishActivity(); finishActivity();
} }
}); });
// ***** 戻るボタン
backButton = findViewById(R.id.backBtn);
backButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// PDFダウンロードの場合はスキップする
WebBackForwardList bfList = webView.copyBackForwardList();
for (int i = 0, len = bfList.getCurrentIndex(); i < len; i++) {
String url = bfList.getItemAtIndex(len - i).getUrl();
if (url.contains("fileSelect")) {
continue;
}
if (webView.canGoBackOrForward(-1 * (i + 1))) {
webView.goBackOrForward(-1 * (i + 1));
break;
}
}
}
});
} }
private void setWebView() { private void setWebView() {
...@@ -98,6 +121,12 @@ public class OnlineHTMLWebViewActivity extends ABVContentViewActivity { ...@@ -98,6 +121,12 @@ public class OnlineHTMLWebViewActivity extends ABVContentViewActivity {
Logger.v(TAG, "shouldOverrideUrlLoading: %s", url); Logger.v(TAG, "shouldOverrideUrlLoading: %s", url);
return false; return false;
} }
@Override
public void onPageFinished(WebView view, String url) {
// ***** 戻るボタンの活性制御
backButton.setEnabled(webView.canGoBack());
super.onPageFinished(view, url);
}
}); });
webView.setDownloadListener(new DownloadListener() { webView.setDownloadListener(new DownloadListener() {
......
...@@ -38,7 +38,9 @@ public class ThetaCameraActivity extends ThetaActivity { ...@@ -38,7 +38,9 @@ public class ThetaCameraActivity extends ThetaActivity {
private static final String TAG = "ThetaCameraActivity"; private static final String TAG = "ThetaCameraActivity";
//画面表示後、ライブビューア取得を0.5秒後に取得 //画面表示後、ライブビューア取得を0.5秒後に取得
private static final int LIVE_VIEW_START_DELAY = 500; private static final int LIVE_VIEW_START_DELAY = 500;
private static final int LIVE_VIEW_FAIL_START_DELAY = 1000;
private static final int EV_TEXT_VIEW_TEXT_SIZE_PHONE = 16; private static final int EV_TEXT_VIEW_TEXT_SIZE_PHONE = 16;
private static final int LIVE_VIDEO_FAIL_MAX_COUNT = 3;
private MJpegView mLiveView; private MJpegView mLiveView;
private ShowLiveViewTask mLivePreviewTask; private ShowLiveViewTask mLivePreviewTask;
private Button mShootBtn; private Button mShootBtn;
...@@ -46,6 +48,8 @@ public class ThetaCameraActivity extends ThetaActivity { ...@@ -46,6 +48,8 @@ public class ThetaCameraActivity extends ThetaActivity {
private TextView mExposureTextView; private TextView mExposureTextView;
private SeekBar mExposureSeekBar; private SeekBar mExposureSeekBar;
private int mCurrentSeekBarProgress; private int mCurrentSeekBarProgress;
private int mLiveViewFailCount;
private boolean mInitOnResumeFlg = false;
private static final List<String> mExposureValues = new ArrayList<>(Arrays.asList("-2.0", "-1.7", "-1.3", "-1.0", "-0.7", "-0.3", "0.0", "0.3", "0.7", "1.0", "1.3", "1.7", "2.0")); private static final List<String> mExposureValues = new ArrayList<>(Arrays.asList("-2.0", "-1.7", "-1.3", "-1.0", "-0.7", "-0.3", "0.0", "0.3", "0.7", "1.0", "1.3", "1.7", "2.0"));
@Override @Override
...@@ -78,6 +82,7 @@ public class ThetaCameraActivity extends ThetaActivity { ...@@ -78,6 +82,7 @@ public class ThetaCameraActivity extends ThetaActivity {
showProgressPopup(); showProgressPopup();
new ShootTask(ThetaCameraActivity.this).execute(); new ShootTask(ThetaCameraActivity.this).execute();
mLiveView.setSource(null); mLiveView.setSource(null);
mLiveViewFailCount = 0;
} }
}); });
...@@ -90,22 +95,54 @@ public class ThetaCameraActivity extends ThetaActivity { ...@@ -90,22 +95,54 @@ public class ThetaCameraActivity extends ThetaActivity {
Intent intent = new Intent(); Intent intent = new Intent();
intent.setClassName(getPackageName(), ThetaImageListActivity.class.getName()); intent.setClassName(getPackageName(), ThetaImageListActivity.class.getName());
startActivity(intent); startActivity(intent);
mLiveViewFailCount = 0;
} }
}); });
//露出シークバー //露出シークバー
settingSeekbar(); settingSeekbar();
showProgressPopup(); showProgressPopup();
startLiveCameraTask(false);
mLiveViewFailCount = 0;
mLiveView.setLiveCameraListenerListener(new MJpegView.LiveCameraListener() {
@Override
public void liveCameraPlayFail() {
mLiveViewFailCount++;
Logger.e(TAG,"mLiveViewFailCount = " + mLiveViewFailCount);
if (mLiveViewFailCount == LIVE_VIDEO_FAIL_MAX_COUNT) {
handler.post(new Runnable() {
@Override
public void run() {
mLiveView.setSource(null);
thetaConnectError(R.string.msg_theta_live_image_fail);
}
});
return;
}
startLiveCameraTask(true);
}
});
}
private void startLiveCameraTask(final boolean isFailRetry) {
int delayTime = LIVE_VIEW_START_DELAY;
if (isFailRetry) { //失敗時にはリトライを1秒後に行うように設定
delayTime = LIVE_VIEW_FAIL_START_DELAY;
}
handler.postDelayed(new Runnable() { handler.postDelayed(new Runnable() {
@Override @Override
public void run() { public void run() {
if (isFailRetry) {
showProgressPopup();
}
if (mLivePreviewTask != null) {
mLivePreviewTask.cancel(true);
}
mLivePreviewTask = new ShowLiveViewTask(ThetaCameraActivity.this); mLivePreviewTask = new ShowLiveViewTask(ThetaCameraActivity.this);
mLivePreviewTask.execute(); mLivePreviewTask.execute();
} }
}, LIVE_VIEW_START_DELAY); }, delayTime);
} }
//端末の戻るボタン禁止 //端末の戻るボタン禁止
@Override @Override
public boolean dispatchKeyEvent(KeyEvent event) { public boolean dispatchKeyEvent(KeyEvent event) {
...@@ -121,19 +158,18 @@ public class ThetaCameraActivity extends ThetaActivity { ...@@ -121,19 +158,18 @@ public class ThetaCameraActivity extends ThetaActivity {
@Override @Override
protected void onPause() { protected void onPause() {
super.onPause(); super.onPause();
mLiveView.stopPlay(); mLiveView.setSource(null);
} }
@Override @Override
protected void onResume() { protected void onResume() {
super.onResume(); super.onResume();
mLiveView.play(); Logger.d(TAG, "super.onResume()");
if (mInitOnResumeFlg) { //初回呼ばれた時は実行しない。(初期表示時)
if (mLivePreviewTask != null) { showProgressPopup();
mLivePreviewTask.cancel(true); startLiveCameraTask(false);
mLivePreviewTask = new ShowLiveViewTask(this);
mLivePreviewTask.execute();
} }
mInitOnResumeFlg = true;
} }
@Override @Override
protected void onDestroy() { protected void onDestroy() {
...@@ -189,8 +225,6 @@ public class ThetaCameraActivity extends ThetaActivity { ...@@ -189,8 +225,6 @@ public class ThetaCameraActivity extends ThetaActivity {
public void onStartTrackingTouch(SeekBar seekBar) {} public void onStartTrackingTouch(SeekBar seekBar) {}
}); });
} }
/** /**
...@@ -225,7 +259,7 @@ public class ThetaCameraActivity extends ThetaActivity { ...@@ -225,7 +259,7 @@ public class ThetaCameraActivity extends ThetaActivity {
mLiveView.setSource(mJpegInputStream); mLiveView.setSource(mJpegInputStream);
new GetOptionExposureTask(ThetaCameraActivity.this).execute(); new GetOptionExposureTask(ThetaCameraActivity.this).execute();
} else { } else {
Logger.e("failed to start live view"); Logger.e(TAG, "failed to start live view");
thetaConnectError(R.string.msg_theta_live_image_fail); thetaConnectError(R.string.msg_theta_live_image_fail);
} }
} }
......
...@@ -25,7 +25,7 @@ import jp.agentec.abook.abv.ui.viewer.activity.theta.ThetaCameraActivity; ...@@ -25,7 +25,7 @@ import jp.agentec.abook.abv.ui.viewer.activity.theta.ThetaCameraActivity;
*/ */
public class ShowLiveViewTask extends AsyncTask<Void, String, MJpegInputStream> { public class ShowLiveViewTask extends AsyncTask<Void, String, MJpegInputStream> {
private static final String TAG = "ShowLiveViewTask"; private static final String TAG = "ShowLiveViewTask";
private static final int FAIL_RETRAY_DELAY_MILLIS = 500; private static final int FAIL_RETRAY_DELAY_MILLIS = 1000;
private final WeakReference<ThetaCameraActivity> refActivity; private final WeakReference<ThetaCameraActivity> refActivity;
public ShowLiveViewTask(ThetaCameraActivity refActivity) { public ShowLiveViewTask(ThetaCameraActivity refActivity) {
...@@ -43,8 +43,20 @@ public class ShowLiveViewTask extends AsyncTask<Void, String, MJpegInputStream> ...@@ -43,8 +43,20 @@ public class ShowLiveViewTask extends AsyncTask<Void, String, MJpegInputStream>
HttpConnector camera = new HttpConnector(ABookValues.THETA_IP_ADDRESS, isOldApi); HttpConnector camera = new HttpConnector(ABookValues.THETA_IP_ADDRESS, isOldApi);
InputStream is = camera.getLivePreview(); InputStream is = camera.getLivePreview();
mjis = new MJpegInputStream(is); mjis = new MJpegInputStream(is);
//正常にライブ再生されるか確認
mjis.readMJpegFrame();
retryCount = MAX_RETRY_COUNT; retryCount = MAX_RETRY_COUNT;
} catch (IOException e) { } catch (IOException e) {
Logger.e(TAG,"doInBackground fail e = " + e.toString());
if (mjis != null) {
try {
mjis.close();
} catch (IOException ex) {
Logger.e(TAG, "doInBackground fail ex = " + ex.toString());
}
}
try { try {
Thread.sleep(FAIL_RETRAY_DELAY_MILLIS); Thread.sleep(FAIL_RETRAY_DELAY_MILLIS);
} catch (InterruptedException e1) { } catch (InterruptedException e1) {
......
...@@ -58,7 +58,7 @@ public class SceneSendHelper { ...@@ -58,7 +58,7 @@ public class SceneSendHelper {
if (isBaseSceneUpload && !isBaseSceneUploadSuccess && firstFilePath.equals(filePath)) { if (isBaseSceneUpload && !isBaseSceneUploadSuccess && firstFilePath.equals(filePath)) {
AbstractLogic.getLogic(OperationLogic.class).sendPanoContent(operationId, OperationName, file); AbstractLogic.getLogic(OperationLogic.class).sendPanoContent(operationId, OperationName, file);
} else { } else {
AbstractLogic.getLogic(OperationLogic.class).sendScene(file); AbstractLogic.getLogic(OperationLogic.class).sendScene(file, null);
} }
needSendImages.remove(filePath); needSendImages.remove(filePath);
......
...@@ -72,9 +72,12 @@ public class OperationTaskLayout extends RelativeLayout { ...@@ -72,9 +72,12 @@ public class OperationTaskLayout extends RelativeLayout {
super(context); super(context);
mContext = (ContentViewActivity)context; mContext = (ContentViewActivity)context;
if (isNormalSize) { // #39410 【Check】報告タブの上部にグレー帯と×ボタンが表示されない
setPadding(0, 130, 0, 0); // android 10 で setPaddingすると、Paddingの値分WebView が表示されないので
} // setPaddingを実行せずに、WebViewを全画面表示にする。
//if (isNormalSize) {
// setPadding(0, 130, 0, 0);
//}
mWebView = new EnqueteWebView(context); mWebView = new EnqueteWebView(context);
mWebView.setVerticalScrollbarOverlay(true); // スクロールバー部分の隙間を消す mWebView.setVerticalScrollbarOverlay(true); // スクロールバー部分の隙間を消す
......
...@@ -86,8 +86,8 @@ is_check_invalid_passward_limit=true ...@@ -86,8 +86,8 @@ is_check_invalid_passward_limit=true
repeat_default=true repeat_default=true
#Setting Info(設定画面のABookについての設定情報) #Setting Info(設定画面のABookについての設定情報)
version_name=1.2.300 version_name=1.2.301
release_date=2020/07/06 release_date=2020/08/31
copy_right=2016 AGENTEC Co.,Ltd. All rights reserved. copy_right=2016 AGENTEC Co.,Ltd. All rights reserved.
hope_page=http://www.agentec.jp hope_page=http://www.agentec.jp
contact_email=abook-appsupport@agentec.jp contact_email=abook-appsupport@agentec.jp
......
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