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;
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.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.ContentVersionsJSON;
import jp.agentec.abook.abv.bl.acms.client.json.FixPushMessageJSON;
......@@ -504,6 +505,14 @@ public class AcmsClient implements AcmsClientResponseListener {
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 {
HttpResponse response = send(AcmsApis.ApiWorkingGroupList, param);
......@@ -616,19 +625,21 @@ public class AcmsClient implements AcmsClientResponseListener {
/**
* パノラマで使用するシーンを登録
* @param sid
* @param contentId
* @param FormFile シーンで使用する画像
* @return
* @throws IOException
* @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のチェック
throw new NetworkDisconnectedException();
}
String apiUrl = AcmsApis.getApiUrl(env.acmsAddress, urlPath, AcmsApis.ApiSceneEntry);
HttpMultipart part1 = new HttpMultipart(ABookKeys.SID, sid);
HttpMultipart part2 = new HttpMultipart(ABookKeys.FORM_FILE, FormFile);
HttpResponse result = HttpRequestSender.post(apiUrl, new HttpMultipart[]{part1, part2});
HttpMultipart part2 = new HttpMultipart(ABookKeys.CONTENT_ID, StringUtil.toString(contentId));
HttpMultipart part3 = new HttpMultipart(ABookKeys.FORM_FILE, FormFile);
HttpResponse result = HttpRequestSender.post(apiUrl, new HttpMultipart[]{part1, part2, part3});
SceneEntryJSON json = new SceneEntryJSON(result.httpResponseBody);
if (json.httpStatus != 200) {
if (json.errorMessage != null) {
......@@ -778,7 +789,7 @@ public class AcmsClient implements AcmsClientResponseListener {
Logger.d(TAG, "call api : %s", methodName);
String apiUrl = AcmsApis.getApiUrl(env.acmsAddress, urlPath, methodName);
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 {
// 簡易帳票リビジョン一覧取得
public static final String ApiQuickReportRevision = "quickReportRevision";
// チャット
public static final String ChatApiUrlFormat = "%s/%s/chatapi/%s/";
public static final String ApiGetChatPushData = "push";
// download
/**
* コンテンツのZIPファイルを取得<br>
......@@ -206,6 +210,8 @@ public class AcmsApis {
methodName.equals(ApiSendPushMessage) || methodName.equals(ApiGetPushMessages) || methodName.equals(ApiSendRoutineTaskData) ||
methodName.equals(ApiOperationGroupMaster) || methodName.equals(ApiGetApertureMasterData) || methodName.equals(ApiQuickReportSearch) || methodName.equals(ApiQuickReportRevision)) {
apiValue = Constant.ApiValue.checkapi;
} else if (methodName.equals(ApiGetChatPushData)) { // pushActionはchatapiを指定
apiValue = Constant.ApiValue.chatapi;
}
switch (apiValue) {
......@@ -221,6 +227,10 @@ public class AcmsApis {
//ABookCheck用のapi
url = String.format(CheckApiUrlFormat, StringUtil.trimLastSlashOrSpace(host), StringUtil.trimLastSlashOrSpace(urlPath), methodName);
break;
case Constant.ApiValue.chatapi:
// チャットAPI
url = String.format(ChatApiUrlFormat, StringUtil.trimLastSlashOrSpace(host), StringUtil.trimLastSlashOrSpace(urlPath), methodName);
break;
}
return url;
......
package jp.agentec.abook.abv.bl.acms.type;
import jp.agentec.abook.abv.bl.logic.ContractLogic;
public interface ServiceOption {
interface ServiceOptionId {
/**
......@@ -158,5 +156,17 @@ public interface ServiceOption {
* 利用しない:N(通常)、利用する:Y
*/
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 {
int nuapi = 0;
int abvapi = 1;
int checkapi = 2;
int chatapi = 3; // チャット
}
public interface XWalkOpenType {
......
package jp.agentec.abook.abv.bl.data;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.List;
......@@ -336,6 +335,14 @@ public class ABVDataCache {
return isServiceOptionEnable(ServiceOptionId.PanoImage);
}
public boolean isChat() {
return isServiceOptionEnable(ServiceOptionId.Chat);
}
public boolean isUnableIOReport() {
return isServiceOptionEnable(ServiceOptionId.UsableIOReport);
}
/**
* @version 1.2.300
* サービスオプション(ユーザパスワードソルト付加)返す
......
package jp.agentec.abook.abv.bl.data.dao;
import java.util.Date;
import java.util.List;
import jp.agentec.abook.abv.bl.common.db.Cursor;
......@@ -46,6 +47,14 @@ public class PushMessageDao extends AbstractDao {
if (column != -1) {
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");
if (column != -1) {
dto.operationName = cursor.getString(column);
......@@ -55,8 +64,8 @@ public class PushMessageDao extends AbstractDao {
public void insert(PushMessageDto dto) {
StringBuffer sql = new StringBuffer();
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(" VALUES (?,?,?,?,?,?) ");
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 (?,?,?,?,?,?,?,?) ");
try {
beginTransaction();
insert(sql.toString(), dto.getInsertValues());
......@@ -94,9 +103,9 @@ public class PushMessageDao extends AbstractDao {
public List<PushMessageDto> selectAll() {
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(" LEFT OUTER JOIN t_operation AS top ");
sql.append(" ON tpm.operation_id = top.operation_id ");
sql.append(" ORDER BY tpm.push_message_id DESC ");
Logger.v(TAG, "sql=%s", sql);
......@@ -106,11 +115,25 @@ public class PushMessageDao extends AbstractDao {
public PushMessageDto select(long pushMessageId) {
String[] args = new String[] { "" + pushMessageId };
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(" INNER JOIN t_operation AS top ");
sql.append(" ON tpm.operation_id = top.operation_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);
return rawQueryGetDto(sql.toString(), args, PushMessageDto.class);
}
......
......@@ -26,8 +26,12 @@ public class TPushMessage extends SQLiteTableScript {
sql.append(" , push_send_date DATE NOT NULL ");
sql.append(" , push_message TEXT ");
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(" , FOREIGN KEY (operation_id) REFERENCES t_operation (operation_id) ");
/**
* チャットのプッシュメッセージではoperation_idを使わないため外部キー制約はコメントアウト*/
// sql.append(" , FOREIGN KEY (operation_id) REFERENCES t_operation (operation_id) ");
sql.append(" ) ");
ddl.add(sql.toString());
......
......@@ -14,6 +14,9 @@ public class PushMessageDto extends AbstractDto {
public String pushMessage;
public String operationName;
public boolean readingFlg;
// Chat
public Long roomId;
public String roomName;
@Override
public String[] getKeyValues() {
......@@ -22,6 +25,6 @@ public class PushMessageDto extends AbstractDto {
@Override
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;
import java.util.UUID;
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.OperationListJSON;
import jp.agentec.abook.abv.bl.acms.client.json.SceneEntryJSON;
......@@ -113,6 +114,16 @@ public class OperationLogic extends AbstractLogic {
OperationListJSON json = AcmsClient.getInstance(cache.getUrlPath(), networkAdapter).getOperationList(param);
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) {
// 登録フラグ
boolean insertFlg = true;
......@@ -1380,11 +1391,12 @@ public class OperationLogic extends AbstractLogic {
/**
* シーンの登録
* @param file
* @param contentId
* @throws IOException
* @throws AcmsException
*/
public Integer sendScene(File file) throws IOException, AcmsException, NetworkDisconnectedException {
SceneEntryJSON json = AcmsClient.getInstance(cache.getUrlPath(), networkAdapter).sceneEntry(cache.getMemberInfo().sid, file);
public Integer sendScene(File file, Long contentId) throws IOException, AcmsException, NetworkDisconnectedException {
SceneEntryJSON json = AcmsClient.getInstance(cache.getUrlPath(), networkAdapter).sceneEntry(cache.getMemberInfo().sid, contentId, file);
return json.resourceId;
}
......
......@@ -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.viewer.activity.CheckOZDViewActivity" android:configChanges="orientation|screenSize"/>
<activity
android:name="jp.agentec.abook.abv.ui.viewer.activity.OnlineHTMLWebViewActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
</activity>
<activity android:name="jp.agentec.abook.abv.ui.home.activity.ChatWebviewActivity" android:configChanges="orientation|screenSize"/>
</application>
</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 @@
<string name="operation_related_content">関連資料</string>
<string name="new_content">新着</string>
<string name="save_all">一括保存</string>
<string name="content_update">更新</string>
<string name="remote_support">遠隔支援</string>
<string name="remote_support_list">遠隔支援一覧</string>
<string name="new_make">新規作成</string>
......@@ -534,7 +533,7 @@
<string name="title_all_operation">全作業</string>
<!-- 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.9.0.0-->
......@@ -1460,4 +1459,22 @@
<string name="msg_device_location_off">端末の位置情報機能をONにしてください。</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>
......@@ -531,12 +531,12 @@
<string name="msg_batch_sync_new_content_updating">새로운 정보갱신 중에는 일괄 동기을 하실 수 없습니다.</string>
<string name="msg_batch_sync_error">「%1$s」정보갱신에 실패하였습니다. 동기처리을 중지합니다.\n</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_all_operation">전체 작업</string>
<!-- 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.9.0.0-->
......@@ -1428,6 +1428,7 @@
<string name="msg_confirm_close_edit_page">편집을 종료하시겠습니까?\n(저장되지 않은 변경 사항은 삭제됩니다.)</string>
<string name="msg_error_edit_page_save">파일 저장 중에 예기치 않은 오류가 발생했습니다.\n편집창을 종료합니다.</string>
<string name="msg_error_edit_page_open">편집창을 여는데 실패했습니다.</string>
<!-- ABookCheck 1.2.300 -->
<string name="title_scene_image_select">장면 이미지 선택</string>
<string name="msg_image_select_max_count_over">장면 이미지의 선택 가능한 최대 개수는 %s개입니다.</string>
......@@ -1464,4 +1465,22 @@
<string name="title_theta_exposure_value">EV:%s</string>
<string name="msg_device_location_off">단말기의 위치정보 기능을 ON으로 설정해 주세요.</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>
\ No newline at end of file
......@@ -540,7 +540,7 @@
<string name="title_all_operation">All</string>
<!-- 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.9.0.0-->
......@@ -1463,4 +1463,21 @@
<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>
</resources>
\ No newline at end of file
<!-- Chat -->
<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 @@
</LinearLayout>
<LinearLayout
android:id="@+id/print_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
......
......@@ -139,6 +139,7 @@
</LinearLayout>
<LinearLayout
android:id="@+id/print_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
......
......@@ -136,6 +136,7 @@
</LinearLayout>
<LinearLayout
android:id="@+id/print_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
......
......@@ -129,6 +129,7 @@
</LinearLayout>
<LinearLayout
android:id="@+id/print_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
......
......@@ -135,8 +135,8 @@
android:layout_weight="1"
android:background="@drawable/btn_operation_print_white"
android:contentDescription="@string/print"
android:scaleX="0.7"
android:scaleY="0.7"
android:scaleX="0.6"
android:scaleY="0.6"
android:visibility="gone" />
<ImageButton
......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
......@@ -12,22 +13,38 @@
android:background="@color/app_color"
android:minHeight="50dp" >
<Button
android:id="@+id/closeBtn"
<ImageButton
android:id="@+id/backBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="false"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignTop="@+id/linearLayout"
android:layout_centerVertical="true"
android:layout_marginLeft="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:contentDescription="@string/cont_desc" />
android:contentDescription="@string/cont_desc"
android:layout_alignParentRight="true" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true">
android:layout_centerInParent="true"
android:id="@+id/linearLayout">
<TextView
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 @@
android:layout_height="1dp"
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>
\ No newline at end of file
......@@ -22,8 +22,11 @@ import java.math.RoundingMode;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.TimeZone;
import java.util.Timer;
import java.util.TimerTask;
......@@ -357,6 +360,7 @@ public class HttpConnector {
try {
//API2.0
if (mIsOldApi) {
//画像ファイルの場合、「recordTime」がないのでJSONException発生
entry.getInt("recordTime");
//動画ファイルは保存しない。
continue;
......@@ -1110,6 +1114,8 @@ public class HttpConnector {
//API2.0
if (mSessionId != null) {
parameters.put("sessionId", mSessionId);
//THETA S端末の時間初期化問題で、現在時間は常に設定
options.put("dateTimeZone", currentDateTimeZone());
}
parameters.put("options", options);
......@@ -1520,4 +1526,12 @@ public class HttpConnector {
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;
import java.io.IOException;
import jp.agentec.abook.abv.bl.common.log.Logger;
/**
* Motion JPEG view
*/
public class MJpegView extends SurfaceView implements SurfaceHolder.Callback {
private static final String TAG = "MJpegView";
private MJpegViewThread mMJpegViewThread = null;
private MJpegInputStream mMJpegInputStream = null;
private boolean existSurface = false;
private int mDisplayWidth;
private int mDisplayHeight;
private MJpegView.LiveCameraListener mListener;
public interface LiveCameraListener {
void liveCameraPlayFail();
}
public void setLiveCameraListenerListener(MJpegView.LiveCameraListener listener) {
this.mListener = listener;
}
/**
* Constructor
* @param context
......@@ -107,8 +119,12 @@ public class MJpegView extends SurfaceView implements SurfaceHolder.Callback {
* @param source Source stream
*/
public void setSource(MJpegInputStream source) {
mMJpegInputStream = source;
play();
if (source == null) { //mMJpegInputStreamのクローズ作業のため、現在スレッドをストップする。
stopPlay();
} else {
mMJpegInputStream = source;
play();
}
}
/**
......@@ -185,7 +201,6 @@ public class MJpegView extends SurfaceView implements SurfaceHolder.Callback {
Bitmap bitmap;
Rect bitmapRect;
Canvas bitmapCanvas = null;
while (keepRunning) {
if (existSurface) {
try {
......@@ -201,7 +216,9 @@ public class MJpegView extends SurfaceView implements SurfaceHolder.Callback {
}
} catch (IOException e) {
e.getStackTrace();
Logger.e(TAG, "MJpegView IOException = " + e.toString());
keepRunning = false;
mListener.liveCameraPlayFail();
}
}
} finally {
......@@ -226,8 +243,10 @@ public class MJpegView extends SurfaceView implements SurfaceHolder.Callback {
if (mMJpegInputStream != null) {
try {
mMJpegInputStream.close();
mMJpegInputStream = null;
} catch (IOException e) {
e.printStackTrace();
Logger.e(TAG, "mMJpegInputStream IOException = " + e.toString());
}
}
}
......
......@@ -11,6 +11,8 @@ import android.util.Log;
import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;
import org.json.adf.JSONObject;
import java.util.Map;
import jp.agentec.abook.abv.bl.common.exception.ABVException;
......@@ -54,12 +56,49 @@ public class ABVFcmListenerService extends FirebaseMessagingService {
UserAuthenticateLogic logic = AbstractLogic.getLogic(UserAuthenticateLogic.class);
MemberInfoDto memberInfo = logic.getMemberInfo();
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)) {
Intent pushMsgDialog = new Intent(ABVFcmListenerService.this, ShowPushMessageDailogActivity.class);
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.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);
} else {
sendNotification(msg);
......@@ -78,7 +117,49 @@ public class ABVFcmListenerService extends FirebaseMessagingService {
if (message.get(AppDefType.PushMessageKey.operationId) != null) {
intent.putExtra(AppDefType.PushMessageKey.operationId, message.get(AppDefType.PushMessageKey.operationId));
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());
Notification notification;
......
......@@ -26,24 +26,25 @@ public class OnAppDownloadReceiver extends BroadcastReceiver {
@Override
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);
Logger.d("Download Complete ID : " + id);
String downloadedTo = null;
DownloadManager dm = (DownloadManager)context.getSystemService(context.DOWNLOAD_SERVICE);
final Cursor cursor;
if (dm != null) {
// 現在ダウンロードされたファイルを確認する。
cursor = dm.query(
new DownloadManager.Query().setFilterById(id));
if (cursor.moveToFirst()) {
final String downloadedTo = cursor.getString(
downloadedTo = cursor.getString(
cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
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.LENGTH_LONG).show();
// PDFファイルの場合はAPK用の処理は通過させない
return;
}
}
......@@ -53,15 +54,18 @@ public class OnAppDownloadReceiver extends BroadcastReceiver {
// ダウンロードマネージャの通知領域をクリックした場合はメッセージ表示のみ
Toast.makeText(context, intent.getAction(), Toast.LENGTH_LONG).show();
} else {
File file = new File(context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), ABVEnvironment.APK_FILE_NAME);
if (file.exists()) {
Intent i = new Intent(Intent.ACTION_VIEW);
// Activity以外からActivityを呼び出すためのフラグを設定
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
context.startActivity(i);
} else {
Toast.makeText(context, "No Exist APK File: ", Toast.LENGTH_LONG).show();
// APKファイルの場合
if (downloadedTo != null && downloadedTo.toLowerCase().endsWith(".apk")) {
File file = new File(context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), ABVEnvironment.APK_FILE_NAME);
if (file.exists()) {
Intent i = new Intent(Intent.ACTION_VIEW);
// Activity以外からActivityを呼び出すためのフラグを設定
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
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 {
private static final String TAG ="ABVContentViewActivity";
public final static int ABOOK_CHECK_TASK_IMAGE = 103;
public final static int ABOOK_CHECK_TASK_VIDEO = 104;
protected final static int ABOOK_CHECK_SELECT_SCENE = 105;
protected long contentId;// 表示中のコンテンツID
protected long objectId; // オブジェクトID(オブジェクト用のActivityのときのみ使用)
......
......@@ -377,7 +377,15 @@ public abstract class ABVNoAuthenticatedActivity extends ABVActivity {
if (extras != null && !StringUtil.isNullOrEmpty(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));
}
} 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);
final Uri data = getIntent().getData();
Logger.i(TAG, "call from URI intent : %s", data);
......
......@@ -3,10 +3,15 @@ package jp.agentec.abook.abv.ui.common.activity;
import android.content.DialogInterface;
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.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.OperationLogic;
import jp.agentec.abook.abv.bl.logic.PushMessageLogic;
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.PushMessageKey;
......@@ -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.home.activity.OperationListActivity;
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;
public class ShowPushMessageDailogActivity extends ABVUIActivity {
......@@ -110,7 +117,33 @@ public class ShowPushMessageDailogActivity extends ABVUIActivity {
alertDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
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();
......
......@@ -68,6 +68,9 @@ public interface AppDefType {
String OPERATION_SORT_CONDITION = "operation_sort_condition"; // 作業のソート
String APERTURE_MASTER_DATA_FETCH_DATE = "apertureMasterDataFetchDate"; // 絞り検索マスタデータのFetchDate
String CHAT_LAST_ROOMNAME = "chatLastRoom"; // 最後のルーム名
String CHAT_LAST_ROOMID = "chatLastRoomId"; // 最後のルームID
}
interface SubMenuType {
......@@ -131,4 +134,12 @@ public interface AppDefType {
interface UrlPattern {
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;
import jp.agentec.abook.abv.bl.common.ABVEnvironment;
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.launcher.android.R;
import jp.agentec.abook.abv.ui.common.activity.ABVUIActivity;
import jp.agentec.abook.abv.ui.home.helper.ActivityHandlingHelper;
import jp.agentec.abook.abv.ui.viewer.activity.ParentWebViewActivity;
import jp.agentec.adf.util.FileUtil;
public class ABookSettingActivity extends PreferenceActivity {
......@@ -72,7 +74,28 @@ public class ABookSettingActivity extends PreferenceActivity {
private void backToHome() {
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);
startActivity(intent);
......
......@@ -398,7 +398,12 @@ public class LoginActivity extends ABVLoginActivity {
CommonExecutor.execute(new Runnable() {
@Override
public void run() {
fcmRegister();
if (oldMemberInfoDto != null && oldMemberInfoDto.loginStatus == LoginStatus.LimitLogin.statusCode()) {
// アプリロックの場合サーバ認証せずにログイン
offlineLogin();
} else {
fcmRegister();
}
}
});
}
......@@ -627,6 +632,10 @@ public class LoginActivity extends ABVLoginActivity {
} else {
changeUserInit2();
}
// ユーザ変更があった場合、チャットのルーム情報をクリアする
clearChatLastRoom();
//ユーザ変更があった場合、FetchDateをクリアする
AcmsDao dao = AbstractDao.getDao(AcmsDao.class);
dao.clearFetchDate();
......@@ -698,4 +707,12 @@ public class LoginActivity extends ABVLoginActivity {
protected void goNext() {
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 {
}
});
// 簡易帳票印刷ボタン
mQuickReportPrintButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showPrintTargetSelect();
}
});
mQuickReportPrintButton.setVisibility(View.VISIBLE);
if (ABVDataCache.getInstance().serviceOption.isUnableIOReport()) {
// 簡易帳票印刷ボタン
mQuickReportPrintButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showPrintTargetSelect();
}
});
mQuickReportPrintButton.setVisibility(View.VISIBLE);
} else {
findViewById(R.id.print_layout).setVisibility(View.GONE);
mQuickReportPrintButton.setVisibility(View.GONE);
}
// 一括同期ボタン
mOperationBatchSyncButton.setOnClickListener(new View.OnClickListener() {
......@@ -349,6 +354,14 @@ public class OperationListActivity extends ABVUIActivity {
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();
}
......
......@@ -109,8 +109,12 @@ public class OperationRelatedContentActivity extends ABVUIActivity {
showCommunicationMenuDialog();
}
});
// 印刷ボタン活性化
mQuickReportPrintButton.setVisibility(View.VISIBLE);
if (ABVDataCache.getInstance().serviceOption.isUnableIOReport()) {
mQuickReportPrintButton.setVisibility(View.VISIBLE);
} else {
findViewById(R.id.print_layout).setVisibility(View.GONE);
mQuickReportPrintButton.setVisibility(View.GONE);
}
}
@Override
......
......@@ -364,7 +364,14 @@ public class CheckOZDViewActivity extends ABVContentViewActivity {
@Override
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 false;
......
......@@ -1535,6 +1535,10 @@ public class ContentViewActivity extends ABVContentViewActivity {
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Logger.d(TAG, "KeyEvent.KEYCODE_BACK");
if (mOperationId != null && mOperationId > -1) {
putUserPref(AppDefType.UserPrefKey.SYNC_TARGET_OPERATION_ID, mOperationId);
}
if (isVideoMax) {
videoMaxToDefault();
} else if (isMarking) {
......
......@@ -623,7 +623,7 @@ public class HTMLWebViewActivity extends ParentWebViewActivity {
*/
private void printButtonActivityControl() {
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);
} else {
printButton.setVisibility(View.GONE);
......@@ -709,6 +709,10 @@ public class HTMLWebViewActivity extends ParentWebViewActivity {
return;
}
mUploadMessage.onReceiveValue(result);
} else if (requestCode == ABOOK_CHECK_SELECT_SCENE) {
if (intent != null && result != null) {
confirmEntrySceneDialog(result[0]);
}
}
mUploadMessage = null;
}
......
......@@ -729,6 +729,10 @@ public class HTMLXWalkWebViewActivity extends ParentWebViewActivity {
}
// 動画
mUploadMessage.onReceiveValue(result);
} else if (requestCode == ABOOK_CHECK_SELECT_SCENE) {
if (intent != null && result != null) {
confirmEntrySceneDialog(result);
}
}
mUploadMessage = null;
}
......
......@@ -10,10 +10,12 @@ import android.view.Window;
import android.webkit.CookieManager;
import android.webkit.DownloadListener;
import android.webkit.URLUtil;
import android.webkit.WebBackForwardList;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;
......@@ -34,6 +36,7 @@ public class OnlineHTMLWebViewActivity extends ABVContentViewActivity {
private WebView webView;
private Button closeButton;
private ImageButton backButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
......@@ -59,7 +62,7 @@ public class OnlineHTMLWebViewActivity extends ABVContentViewActivity {
OnlineHTMLWebViewLogic logic = AbstractLogic.getLogic(OnlineHTMLWebViewLogic.class);
webView.postUrl(url, logic.getPostData(param));
// ***** るボタン
// ***** 閉じるボタン
closeButton = findViewById(R.id.closeBtn);
closeButton.setOnClickListener(new View.OnClickListener() {
@Override
......@@ -67,6 +70,26 @@ public class OnlineHTMLWebViewActivity extends ABVContentViewActivity {
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() {
......@@ -98,6 +121,12 @@ public class OnlineHTMLWebViewActivity extends ABVContentViewActivity {
Logger.v(TAG, "shouldOverrideUrlLoading: %s", url);
return false;
}
@Override
public void onPageFinished(WebView view, String url) {
// ***** 戻るボタンの活性制御
backButton.setEnabled(webView.canGoBack());
super.onPageFinished(view, url);
}
});
webView.setDownloadListener(new DownloadListener() {
......
......@@ -38,7 +38,9 @@ public class ThetaCameraActivity extends ThetaActivity {
private static final String TAG = "ThetaCameraActivity";
//画面表示後、ライブビューア取得を0.5秒後に取得
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 LIVE_VIDEO_FAIL_MAX_COUNT = 3;
private MJpegView mLiveView;
private ShowLiveViewTask mLivePreviewTask;
private Button mShootBtn;
......@@ -46,6 +48,8 @@ public class ThetaCameraActivity extends ThetaActivity {
private TextView mExposureTextView;
private SeekBar mExposureSeekBar;
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"));
@Override
......@@ -78,6 +82,7 @@ public class ThetaCameraActivity extends ThetaActivity {
showProgressPopup();
new ShootTask(ThetaCameraActivity.this).execute();
mLiveView.setSource(null);
mLiveViewFailCount = 0;
}
});
......@@ -90,22 +95,54 @@ public class ThetaCameraActivity extends ThetaActivity {
Intent intent = new Intent();
intent.setClassName(getPackageName(), ThetaImageListActivity.class.getName());
startActivity(intent);
mLiveViewFailCount = 0;
}
});
//露出シークバー
settingSeekbar();
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() {
@Override
public void run() {
if (isFailRetry) {
showProgressPopup();
}
if (mLivePreviewTask != null) {
mLivePreviewTask.cancel(true);
}
mLivePreviewTask = new ShowLiveViewTask(ThetaCameraActivity.this);
mLivePreviewTask.execute();
}
}, LIVE_VIEW_START_DELAY);
}, delayTime);
}
//端末の戻るボタン禁止
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
......@@ -121,19 +158,18 @@ public class ThetaCameraActivity extends ThetaActivity {
@Override
protected void onPause() {
super.onPause();
mLiveView.stopPlay();
mLiveView.setSource(null);
}
@Override
protected void onResume() {
super.onResume();
mLiveView.play();
if (mLivePreviewTask != null) {
mLivePreviewTask.cancel(true);
mLivePreviewTask = new ShowLiveViewTask(this);
mLivePreviewTask.execute();
Logger.d(TAG, "super.onResume()");
if (mInitOnResumeFlg) { //初回呼ばれた時は実行しない。(初期表示時)
showProgressPopup();
startLiveCameraTask(false);
}
mInitOnResumeFlg = true;
}
@Override
protected void onDestroy() {
......@@ -189,8 +225,6 @@ public class ThetaCameraActivity extends ThetaActivity {
public void onStartTrackingTouch(SeekBar seekBar) {}
});
}
/**
......@@ -225,7 +259,7 @@ public class ThetaCameraActivity extends ThetaActivity {
mLiveView.setSource(mJpegInputStream);
new GetOptionExposureTask(ThetaCameraActivity.this).execute();
} else {
Logger.e("failed to start live view");
Logger.e(TAG, "failed to start live view");
thetaConnectError(R.string.msg_theta_live_image_fail);
}
}
......
......@@ -25,7 +25,7 @@ import jp.agentec.abook.abv.ui.viewer.activity.theta.ThetaCameraActivity;
*/
public class ShowLiveViewTask extends AsyncTask<Void, String, MJpegInputStream> {
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;
public ShowLiveViewTask(ThetaCameraActivity refActivity) {
......@@ -43,8 +43,20 @@ public class ShowLiveViewTask extends AsyncTask<Void, String, MJpegInputStream>
HttpConnector camera = new HttpConnector(ABookValues.THETA_IP_ADDRESS, isOldApi);
InputStream is = camera.getLivePreview();
mjis = new MJpegInputStream(is);
//正常にライブ再生されるか確認
mjis.readMJpegFrame();
retryCount = MAX_RETRY_COUNT;
} 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 {
Thread.sleep(FAIL_RETRAY_DELAY_MILLIS);
} catch (InterruptedException e1) {
......
......@@ -58,7 +58,7 @@ public class SceneSendHelper {
if (isBaseSceneUpload && !isBaseSceneUploadSuccess && firstFilePath.equals(filePath)) {
AbstractLogic.getLogic(OperationLogic.class).sendPanoContent(operationId, OperationName, file);
} else {
AbstractLogic.getLogic(OperationLogic.class).sendScene(file);
AbstractLogic.getLogic(OperationLogic.class).sendScene(file, null);
}
needSendImages.remove(filePath);
......
......@@ -72,9 +72,12 @@ public class OperationTaskLayout extends RelativeLayout {
super(context);
mContext = (ContentViewActivity)context;
if (isNormalSize) {
setPadding(0, 130, 0, 0);
}
// #39410 【Check】報告タブの上部にグレー帯と×ボタンが表示されない
// android 10 で setPaddingすると、Paddingの値分WebView が表示されないので
// setPaddingを実行せずに、WebViewを全画面表示にする。
//if (isNormalSize) {
// setPadding(0, 130, 0, 0);
//}
mWebView = new EnqueteWebView(context);
mWebView.setVerticalScrollbarOverlay(true); // スクロールバー部分の隙間を消す
......
......@@ -86,8 +86,8 @@ is_check_invalid_passward_limit=true
repeat_default=true
#Setting Info(設定画面のABookについての設定情報)
version_name=1.2.300
release_date=2020/07/06
version_name=1.2.301
release_date=2020/08/31
copy_right=2016 AGENTEC Co.,Ltd. All rights reserved.
hope_page=http://www.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