From 82a4285cde943f61f80e5e8d785519b4d451d841 Mon Sep 17 00:00:00 2001 From: fsergio101 Date: Sun, 10 Apr 2016 03:36:24 +0200 Subject: [PATCH 1/4] added UX elements for feedback integration added UX elements for feedback integration --- .../applivery/applvsdklib/AppliverySdk.java | 24 +- .../appconfig/ObtainAppConfigInteractor.java | 2 +- .../download/app/DownloadBuildInteractor.java | 2 +- ...ObtainAppBuildDownloadTokenInteractor.java | 2 +- .../domain/feedback/FeedbackInteractor.java | 11 +- .../feedback/FeedbackInteractorCallback.java | 37 +++ .../domain/model/FeedBackType.java | 38 +++ .../applvsdklib/domain/model/Feedback.java | 5 +- .../domain/model/UserFeedback.java | 37 +++ .../ScreenCaptureUtils.java | 56 ++++ .../sensors/AndroidSensorWrapper.java | 12 +- ...rySensor.java => AppliverySensorType.java} | 8 +- .../sensors/SensorEventsReceiver.java | 2 +- .../sensors/SensorsAccessor.java | 22 +- .../sensors/ShakeDetector.java | 4 +- .../applvsdklib/ui/model/ScreenCapture.java | 36 +++ .../ui/views/feedback/FeedbackView.java | 49 ++++ .../views/feedback/UserFeedbackPresenter.java | 85 ++++++ .../ui/views/feedback/UserFeedbackView.java | 254 ++++++++++++++++++ .../res/drawable-hdpi/applivery_arrow.png | Bin 0 -> 2552 bytes .../applivery_arrow_selected.png | Bin 0 -> 2591 bytes .../res/drawable-hdpi/applivery_close.png | Bin 0 -> 1648 bytes .../drawable-hdpi/applivery_close_pressed.png | Bin 0 -> 2985 bytes .../main/res/drawable-hdpi/applivery_icon.png | Bin 0 -> 5508 bytes .../res/drawable-hdpi/applivery_plane.png | Bin 0 -> 5014 bytes .../applivery_plane_selected.png | Bin 0 -> 5108 bytes .../applivery_selected_tab_button.9.png | Bin 0 -> 151 bytes .../res/drawable-mdpi/applivery_arrow.png | Bin 0 -> 2027 bytes .../applivery_arrow_selected.png | Bin 0 -> 2273 bytes .../res/drawable-mdpi/applivery_close.png | Bin 0 -> 1118 bytes .../drawable-mdpi/applivery_close_pressed.png | Bin 0 -> 2092 bytes .../main/res/drawable-mdpi/applivery_icon.png | Bin 0 -> 4396 bytes .../res/drawable-mdpi/applivery_plane.png | Bin 0 -> 3722 bytes .../applivery_plane_selected.png | Bin 0 -> 3807 bytes .../applivery_selected_tab_button.9.png | Bin 0 -> 133 bytes .../res/drawable-xhdpi/applivery_arrow.png | Bin 0 -> 3466 bytes .../applivery_arrow_selected.png | Bin 0 -> 3575 bytes .../res/drawable-xhdpi/applivery_close.png | Bin 0 -> 1958 bytes .../applivery_close_pressed.png | Bin 0 -> 3553 bytes .../res/drawable-xhdpi/applivery_icon.png | Bin 0 -> 6745 bytes .../res/drawable-xhdpi/applivery_plane.png | Bin 0 -> 7419 bytes .../applivery_plane_selected.png | Bin 0 -> 7584 bytes .../applivery_selected_tab_button.9.png | Bin 0 -> 182 bytes .../res/drawable-xxhdpi/applivery_arrow.png | Bin 0 -> 4010 bytes .../applivery_arrow_selected.png | Bin 0 -> 4067 bytes .../res/drawable-xxhdpi/applivery_close.png | Bin 0 -> 3406 bytes .../applivery_close_pressed.png | Bin 0 -> 6070 bytes .../res/drawable-xxhdpi/applivery_icon.png | Bin 0 -> 9252 bytes .../res/drawable-xxhdpi/applivery_plane.png | Bin 0 -> 6571 bytes .../applivery_plane_selected.png | Bin 0 -> 6646 bytes .../applivery_selected_tab_button.9.png | Bin 0 -> 202 bytes .../res/drawable-xxxhdpi/applivery_arrow.png | Bin 0 -> 6468 bytes .../applivery_arrow_selected.png | Bin 0 -> 6562 bytes .../res/drawable-xxxhdpi/applivery_close.png | Bin 0 -> 4213 bytes .../applivery_close_pressed.png | Bin 0 -> 7004 bytes .../res/drawable-xxxhdpi/applivery_icon.png | Bin 0 -> 11596 bytes .../res/drawable-xxxhdpi/applivery_plane.png | Bin 0 -> 9648 bytes .../applivery_plane_selected.png | Bin 0 -> 9744 bytes .../applivery_selected_tab_button.9.png | Bin 0 -> 340 bytes .../res/drawable/applivery_arrow_selector.xml | 29 ++ .../res/drawable/applivery_close_selector.xml | 29 ++ .../res/drawable/applivery_plane_selector.xml | 29 ++ .../applivery_tab_button_selector.xml | 27 ++ .../src/main/res/layout/must_update.xml | 27 +- .../src/main/res/layout/user_feedback.xml | 216 +++++++++++++++ applvsdklib/src/main/res/values/colors.xml | 2 +- applvsdklib/src/main/res/values/dimens.xml | 19 +- applvsdklib/src/main/res/values/strings.xml | 12 + 68 files changed, 1032 insertions(+), 44 deletions(-) create mode 100644 applvsdklib/src/main/java/com/applivery/applvsdklib/domain/feedback/FeedbackInteractorCallback.java create mode 100644 applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/FeedBackType.java create mode 100644 applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/UserFeedback.java create mode 100644 applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/ScreenCaptureUtils.java rename applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/sensors/{AppliverySensor.java => AppliverySensorType.java} (85%) create mode 100644 applvsdklib/src/main/java/com/applivery/applvsdklib/ui/model/ScreenCapture.java create mode 100644 applvsdklib/src/main/java/com/applivery/applvsdklib/ui/views/feedback/FeedbackView.java create mode 100644 applvsdklib/src/main/java/com/applivery/applvsdklib/ui/views/feedback/UserFeedbackPresenter.java create mode 100644 applvsdklib/src/main/java/com/applivery/applvsdklib/ui/views/feedback/UserFeedbackView.java create mode 100644 applvsdklib/src/main/res/drawable-hdpi/applivery_arrow.png create mode 100644 applvsdklib/src/main/res/drawable-hdpi/applivery_arrow_selected.png create mode 100644 applvsdklib/src/main/res/drawable-hdpi/applivery_close.png create mode 100644 applvsdklib/src/main/res/drawable-hdpi/applivery_close_pressed.png create mode 100644 applvsdklib/src/main/res/drawable-hdpi/applivery_icon.png create mode 100644 applvsdklib/src/main/res/drawable-hdpi/applivery_plane.png create mode 100644 applvsdklib/src/main/res/drawable-hdpi/applivery_plane_selected.png create mode 100755 applvsdklib/src/main/res/drawable-hdpi/applivery_selected_tab_button.9.png create mode 100644 applvsdklib/src/main/res/drawable-mdpi/applivery_arrow.png create mode 100644 applvsdklib/src/main/res/drawable-mdpi/applivery_arrow_selected.png create mode 100644 applvsdklib/src/main/res/drawable-mdpi/applivery_close.png create mode 100644 applvsdklib/src/main/res/drawable-mdpi/applivery_close_pressed.png create mode 100644 applvsdklib/src/main/res/drawable-mdpi/applivery_icon.png create mode 100644 applvsdklib/src/main/res/drawable-mdpi/applivery_plane.png create mode 100644 applvsdklib/src/main/res/drawable-mdpi/applivery_plane_selected.png create mode 100755 applvsdklib/src/main/res/drawable-mdpi/applivery_selected_tab_button.9.png create mode 100644 applvsdklib/src/main/res/drawable-xhdpi/applivery_arrow.png create mode 100644 applvsdklib/src/main/res/drawable-xhdpi/applivery_arrow_selected.png create mode 100644 applvsdklib/src/main/res/drawable-xhdpi/applivery_close.png create mode 100644 applvsdklib/src/main/res/drawable-xhdpi/applivery_close_pressed.png create mode 100644 applvsdklib/src/main/res/drawable-xhdpi/applivery_icon.png create mode 100644 applvsdklib/src/main/res/drawable-xhdpi/applivery_plane.png create mode 100644 applvsdklib/src/main/res/drawable-xhdpi/applivery_plane_selected.png create mode 100755 applvsdklib/src/main/res/drawable-xhdpi/applivery_selected_tab_button.9.png create mode 100644 applvsdklib/src/main/res/drawable-xxhdpi/applivery_arrow.png create mode 100644 applvsdklib/src/main/res/drawable-xxhdpi/applivery_arrow_selected.png create mode 100644 applvsdklib/src/main/res/drawable-xxhdpi/applivery_close.png create mode 100644 applvsdklib/src/main/res/drawable-xxhdpi/applivery_close_pressed.png create mode 100644 applvsdklib/src/main/res/drawable-xxhdpi/applivery_icon.png create mode 100644 applvsdklib/src/main/res/drawable-xxhdpi/applivery_plane.png create mode 100644 applvsdklib/src/main/res/drawable-xxhdpi/applivery_plane_selected.png create mode 100755 applvsdklib/src/main/res/drawable-xxhdpi/applivery_selected_tab_button.9.png create mode 100644 applvsdklib/src/main/res/drawable-xxxhdpi/applivery_arrow.png create mode 100644 applvsdklib/src/main/res/drawable-xxxhdpi/applivery_arrow_selected.png create mode 100644 applvsdklib/src/main/res/drawable-xxxhdpi/applivery_close.png create mode 100644 applvsdklib/src/main/res/drawable-xxxhdpi/applivery_close_pressed.png create mode 100644 applvsdklib/src/main/res/drawable-xxxhdpi/applivery_icon.png create mode 100644 applvsdklib/src/main/res/drawable-xxxhdpi/applivery_plane.png create mode 100644 applvsdklib/src/main/res/drawable-xxxhdpi/applivery_plane_selected.png create mode 100755 applvsdklib/src/main/res/drawable-xxxhdpi/applivery_selected_tab_button.9.png create mode 100644 applvsdklib/src/main/res/drawable/applivery_arrow_selector.xml create mode 100644 applvsdklib/src/main/res/drawable/applivery_close_selector.xml create mode 100644 applvsdklib/src/main/res/drawable/applivery_plane_selector.xml create mode 100644 applvsdklib/src/main/res/drawable/applivery_tab_button_selector.xml create mode 100644 applvsdklib/src/main/res/layout/user_feedback.xml diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/AppliverySdk.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/AppliverySdk.java index 6cae260..a72ed78 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/AppliverySdk.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/AppliverySdk.java @@ -25,14 +25,22 @@ import android.util.Log; import android.widget.Toast; import com.applivery.applvsdklib.domain.exceptions.NotForegroundActivityAvailable; +import com.applivery.applvsdklib.domain.feedback.FeedbackInteractor; +import com.applivery.applvsdklib.domain.model.Feedback; +import com.applivery.applvsdklib.domain.model.UserFeedback; import com.applivery.applvsdklib.network.api.AppliveryApiService; import com.applivery.applvsdklib.network.api.AppliveryApiServiceBuilder; import com.applivery.applvsdklib.domain.appconfig.ObtainAppConfigInteractor; import com.applivery.applvsdklib.tools.androidimplementations.AndroidCurrentAppInfo; import com.applivery.applvsdklib.tools.androidimplementations.AppliveryActivityLifecycleCallbacks; +import com.applivery.applvsdklib.tools.androidimplementations.ScreenCaptureUtils; import com.applivery.applvsdklib.tools.utils.Validate; import com.applivery.applvsdklib.tools.permissions.AndroidPermissionCheckerImpl; import com.applivery.applvsdklib.tools.permissions.PermissionChecker; +import com.applivery.applvsdklib.ui.model.ScreenCapture; +import com.applivery.applvsdklib.ui.views.feedback.FeedbackView; +import com.applivery.applvsdklib.ui.views.feedback.UserFeedbackView; +import com.applivery.applvsdklib.ui.views.update.MustUpdateViewImpl; import java.util.concurrent.*; /** @@ -214,8 +222,20 @@ public static void setUpdateCheckingTime(int updateCheckingTime) { AppliverySdk.updateCheckingTime = new Integer(updateCheckingTime * 1000).longValue(); } - public static void sendFeedbackOnShake() { - Toast.makeText(applicationContext, "You shake your phone", Toast.LENGTH_SHORT).show(); + public static void requestForUserFeedBack() { + + FeedbackView feedbackView = UserFeedbackView.getInstance(); + + if (feedbackView.isNotShowing()){ + ScreenCapture screenCapture = ScreenCaptureUtils.getScreenCapture(getCurrentActivity()); + feedbackView.setScreenCapture(screenCapture); + feedbackView.show(); + } + + + //Toast.makeText(applicationContext, "You shake your phone", Toast.LENGTH_SHORT).show(); + //Feedback feedback = new UserFeedback(); + //getExecutor().execute(FeedbackInteractor.getInstance(appliveryApiService, feedback)); } public static class Logger { diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/appconfig/ObtainAppConfigInteractor.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/appconfig/ObtainAppConfigInteractor.java index 763b32d..a24fef4 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/appconfig/ObtainAppConfigInteractor.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/appconfig/ObtainAppConfigInteractor.java @@ -34,7 +34,7 @@ public class ObtainAppConfigInteractor extends BaseInteractor { private final ObtainAppConfigRequest obtainAppConfigRequest; private final InteractorCallback appConfigInteractorCallback; - public ObtainAppConfigInteractor(AppliveryApiService apiService, String appId, String authToken, + private ObtainAppConfigInteractor(AppliveryApiService apiService, String appId, String authToken, CurrentAppInfo currentAppInfo) { this.obtainAppConfigRequest = new ObtainAppConfigRequest(apiService, appId, authToken); this.appConfigInteractorCallback = new ObtainAppConfigInteractorCallback(apiService, currentAppInfo); diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/download/app/DownloadBuildInteractor.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/download/app/DownloadBuildInteractor.java index 69b7ddb..1da3cc5 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/download/app/DownloadBuildInteractor.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/download/app/DownloadBuildInteractor.java @@ -40,7 +40,7 @@ public class DownloadBuildInteractor extends BaseInteractor { private final DownloadStatusListener downloadStatusListener; private final AppInstaller appInstaller; - public DownloadBuildInteractor(AppliveryApiService appliveryApiService, String appName, + private DownloadBuildInteractor(AppliveryApiService appliveryApiService, String appName, BuildTokenInfo buildTokenInfo, final DownloadBuildInteractorCallback interactorCallback, ExternalStorageWriter externalStorageWriter) { diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/download/token/ObtainAppBuildDownloadTokenInteractor.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/download/token/ObtainAppBuildDownloadTokenInteractor.java index d717a8d..c015184 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/download/token/ObtainAppBuildDownloadTokenInteractor.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/download/token/ObtainAppBuildDownloadTokenInteractor.java @@ -33,7 +33,7 @@ public class ObtainAppBuildDownloadTokenInteractor extends BaseInteractor infoInteractorCallback; - public ObtainAppBuildDownloadTokenInteractor(AppliveryApiService appliveryApiService, + private ObtainAppBuildDownloadTokenInteractor(AppliveryApiService appliveryApiService, String buildId, InteractorCallback infoInteractorCallback) { this.obtainBuildDownloadTokenRequest = diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/feedback/FeedbackInteractor.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/feedback/FeedbackInteractor.java index 6178ac9..6c63178 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/feedback/FeedbackInteractor.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/feedback/FeedbackInteractor.java @@ -16,6 +16,7 @@ package com.applivery.applvsdklib.domain.feedback; +import android.app.Activity; import com.applivery.applvsdklib.domain.BaseInteractor; import com.applivery.applvsdklib.domain.InteractorCallback; import com.applivery.applvsdklib.domain.model.BusinessObject; @@ -38,11 +39,10 @@ public class FeedbackInteractor extends BaseInteractor { private final InteractorCallback feedbackCallback; private final FeedbackWrapper feedbackWrapper; - public FeedbackInteractor(FeedbackRequest feedbackRequest, InteractorCallback feedbackCallback, - Feedback feedback, AppliveryApiService appliveryApiService) { + public FeedbackInteractor(AppliveryApiService appliveryApiService, Feedback feedback) { this.feedbackWrapper = FeedbackWrapper.createWrapper(feedback); this.feedbackRequest = new FeedbackRequest(appliveryApiService, feedbackWrapper); - this.feedbackCallback = feedbackCallback; + this.feedbackCallback = new FeedbackInteractorCallback(); } @Override protected void receivedResponse(BusinessObject result) { @@ -61,4 +61,9 @@ public FeedbackInteractor(FeedbackRequest feedbackRequest, InteractorCallback fe //TODO transform fee return feedbackRequest.execute(); } + + public static Runnable getInstance(AppliveryApiService service, Feedback feedback) { + FeedbackInteractor feedbackInteractor = new FeedbackInteractor(service, feedback); + return feedbackInteractor; + } } diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/feedback/FeedbackInteractorCallback.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/feedback/FeedbackInteractorCallback.java new file mode 100644 index 0000000..9f65bcc --- /dev/null +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/feedback/FeedbackInteractorCallback.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2016 Applivery + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.applivery.applvsdklib.domain.feedback; + +import com.applivery.applvsdklib.domain.InteractorCallback; +import com.applivery.applvsdklib.domain.model.ErrorObject; +import com.applivery.applvsdklib.domain.model.FeedbackResult; + +/** + * Created by Sergio Martinez Rodriguez + * Date 9/4/16. + */ +public class FeedbackInteractorCallback implements InteractorCallback { + + @Override public void onSuccess(FeedbackResult businessObject) { + + } + + @Override public void onError(ErrorObject error) { + + } + +} diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/FeedBackType.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/FeedBackType.java new file mode 100644 index 0000000..4e94243 --- /dev/null +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/FeedBackType.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2016 Applivery + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.applivery.applvsdklib.domain.model; + +import com.applivery.applvsdklib.tools.utils.StringValueEnum; + +/** + * Created by Sergio Martinez Rodriguez + * Date 10/4/16. + */ +public enum FeedBackType implements StringValueEnum{ + FEEDBACK("FEEDBACK"), + BUG("BUG"); + + private final String type; + + FeedBackType(final String type) { + this.type = type; + } + + public String getStringValue() { + return type; + } +} diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/Feedback.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/Feedback.java index 6db781f..ec0c504 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/Feedback.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/Feedback.java @@ -21,5 +21,8 @@ * Date 3/1/16. */ public interface Feedback { - //TODO next release stuff + void setType(FeedBackType bug); + + void attachScreenshot(boolean activated); + } diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/UserFeedback.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/UserFeedback.java new file mode 100644 index 0000000..ebf2d06 --- /dev/null +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/UserFeedback.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2016 Applivery + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.applivery.applvsdklib.domain.model; + +/** + * Created by Sergio Martinez Rodriguez + * Date 9/4/16. + */ +public class UserFeedback implements Feedback { + + private FeedBackType feedBackType; + private boolean screenshotAttached; + + @Override public void setType(FeedBackType feedBackType) { + this.feedBackType = feedBackType; + } + + @Override public void attachScreenshot(boolean activated) { + this.screenshotAttached = activated; + } + + +} diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/ScreenCaptureUtils.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/ScreenCaptureUtils.java new file mode 100644 index 0000000..5c80d87 --- /dev/null +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/ScreenCaptureUtils.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2016 Applivery + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.applivery.applvsdklib.tools.androidimplementations; + +import android.app.Activity; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.view.View; +import com.applivery.applvsdklib.R; +import com.applivery.applvsdklib.ui.model.ScreenCapture; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; + +/** + * Created by Sergio Martinez Rodriguez + * Date 10/4/16. + */ +public class ScreenCaptureUtils { + + private static final int COMPRESSION_BITMAP_QUALITY = 100; + + public static ScreenCapture getScreenCapture(Activity activity) { + + try { + View v1 = activity.getWindow().getDecorView().getRootView(); + v1.setDrawingCacheEnabled(true); + Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache()); + v1.setDrawingCacheEnabled(false); + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + + bitmap.compress(Bitmap.CompressFormat.JPEG, COMPRESSION_BITMAP_QUALITY, out); + Bitmap decoded = BitmapFactory.decodeStream(new ByteArrayInputStream(out.toByteArray())); + + return new ScreenCapture(decoded); + } catch (Throwable e) { + e.printStackTrace(); + return new ScreenCapture(BitmapFactory.decodeResource(null, R.drawable.applivery_icon)); + } + } + +} diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/sensors/AndroidSensorWrapper.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/sensors/AndroidSensorWrapper.java index 3414f51..7594f3c 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/sensors/AndroidSensorWrapper.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/sensors/AndroidSensorWrapper.java @@ -25,11 +25,11 @@ public class AndroidSensorWrapper { private boolean enabled; - private final AppliverySensor appliverySensor; + private final AppliverySensorType appliverySensorType; private final SensorEventListener sensorEventListener; - public AndroidSensorWrapper(AppliverySensor appliverySensor, SensorEventListener listener) { - this.appliverySensor = appliverySensor; + public AndroidSensorWrapper(AppliverySensorType appliverySensorType, SensorEventListener listener) { + this.appliverySensorType = appliverySensorType; this.enabled = false; this.sensorEventListener = listener; } @@ -42,12 +42,12 @@ public boolean isEnabled() { return enabled; } - public AppliverySensor getAppliverySensor() { - return appliverySensor; + public AppliverySensorType getAppliverySensorType() { + return appliverySensorType; } public int getAndroidSensorType() { - return appliverySensor.toAndroidSensor(); + return appliverySensorType.toAndroidSensor(); } public SensorEventListener getSensorEventListener() { diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/sensors/AppliverySensor.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/sensors/AppliverySensorType.java similarity index 85% rename from applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/sensors/AppliverySensor.java rename to applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/sensors/AppliverySensorType.java index 32b27d5..3193983 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/sensors/AppliverySensor.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/sensors/AppliverySensorType.java @@ -23,12 +23,12 @@ * Created by Sergio Martinez Rodriguez * Date 9/4/16. */ -public enum AppliverySensor implements StringValueEnum{ +public enum AppliverySensorType implements StringValueEnum{ ACCELEROMETER("ACCELEROMETER"); private final String type; - AppliverySensor(final String type) { + AppliverySensorType(final String type) { this.type = type; } @@ -45,10 +45,10 @@ public int toAndroidSensor(){ } } - public static AppliverySensor toAppliverySensor(int sensor){ + public static AppliverySensorType toAppliverySensor(int sensor){ switch (sensor){ case Sensor.TYPE_ACCELEROMETER: - return AppliverySensor.ACCELEROMETER; + return AppliverySensorType.ACCELEROMETER; default: return null; } diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/sensors/SensorEventsReceiver.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/sensors/SensorEventsReceiver.java index ce34ab7..6a16196 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/sensors/SensorEventsReceiver.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/sensors/SensorEventsReceiver.java @@ -25,7 +25,7 @@ public class SensorEventsReceiver implements ShakeDetector.OnShakeListener { @Override public void onShake(int count) { - AppliverySdk.sendFeedbackOnShake(); + AppliverySdk.requestForUserFeedBack(); } } diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/sensors/SensorsAccessor.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/sensors/SensorsAccessor.java index d662bbb..02fc6bc 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/sensors/SensorsAccessor.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/sensors/SensorsAccessor.java @@ -36,8 +36,8 @@ public SensorsAccessor(SensorEventsReceiver sensorEventsReceiver) { private void initSensors(SensorEventsReceiver sensorEventsReceiver) { //init Accelerometer sensor SHAKE Detection - sensors.put(AppliverySensor.ACCELEROMETER.getStringValue(), - new AndroidSensorWrapper(AppliverySensor.ACCELEROMETER, + sensors.put(AppliverySensorType.ACCELEROMETER.getStringValue(), + new AndroidSensorWrapper(AppliverySensorType.ACCELEROMETER, new ShakeDetector(sensorEventsReceiver))); //init Init all required sensors here @@ -45,26 +45,26 @@ private void initSensors(SensorEventsReceiver sensorEventsReceiver) { } - public boolean isSensorAvailable(AppliverySensor appliverySensor){ - if (sensors.containsKey(appliverySensor.getStringValue())){ - AndroidSensorWrapper androidSensorWrapper = sensors.get(appliverySensor.getStringValue()); + public boolean isSensorAvailable(AppliverySensorType appliverySensorType){ + if (sensors.containsKey(appliverySensorType.getStringValue())){ + AndroidSensorWrapper androidSensorWrapper = sensors.get(appliverySensorType.getStringValue()); return androidSensorWrapper.isEnabled(); }else{ return false; } } - public void setSensorAsAvailable(AppliverySensor appliverySensor){ - if (!isSensorAvailable(appliverySensor) && - sensors.containsKey(appliverySensor.getStringValue())){ - AndroidSensorWrapper androidSensorWrapper = sensors.get(appliverySensor.getStringValue()); + public void setSensorAsAvailable(AppliverySensorType appliverySensorType){ + if (!isSensorAvailable(appliverySensorType) && + sensors.containsKey(appliverySensorType.getStringValue())){ + AndroidSensorWrapper androidSensorWrapper = sensors.get(appliverySensorType.getStringValue()); androidSensorWrapper.enableSensor(); } } public void enableSensor(int type) { - AppliverySensor appliverySensor = AppliverySensor.toAppliverySensor(type); - setSensorAsAvailable(appliverySensor); + AppliverySensorType appliverySensorType = AppliverySensorType.toAppliverySensor(type); + setSensorAsAvailable(appliverySensorType); } public boolean hasAvailableSensors() { diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/sensors/ShakeDetector.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/sensors/ShakeDetector.java index 37258a3..97ec157 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/sensors/ShakeDetector.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/sensors/ShakeDetector.java @@ -69,12 +69,12 @@ public interface OnShakeListener { float gY = y / SensorManager.GRAVITY_EARTH; float gZ = z / SensorManager.GRAVITY_EARTH; - // gForce will be close to 1 when there is no movement. + // gForce will be applivery_close to 1 when there is no movement. double gForce = Math.sqrt(gX * gX + gY * gY + gZ * gZ); if (gForce > SHAKE_THRESHOLD_GRAVITY) { final long now = System.currentTimeMillis(); - // ignore shake events too close to each other (500ms) + // ignore shake events too applivery_close to each other (500ms) if (mShakeTimestamp + SHAKE_SLOP_TIME_MS > now) { return; } diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/ui/model/ScreenCapture.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/ui/model/ScreenCapture.java new file mode 100644 index 0000000..34e9c12 --- /dev/null +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/ui/model/ScreenCapture.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2016 Applivery + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.applivery.applvsdklib.ui.model; + +import android.graphics.Bitmap; + +/** + * Created by Sergio Martinez Rodriguez + * Date 10/4/16. + */ +public class ScreenCapture { + + private final Bitmap screenShot; + + public ScreenCapture(Bitmap screenShot) { + this.screenShot = screenShot; + } + + public Bitmap getScreenShot() { + return screenShot; + } +} diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/ui/views/feedback/FeedbackView.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/ui/views/feedback/FeedbackView.java new file mode 100644 index 0000000..1a6cfa9 --- /dev/null +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/ui/views/feedback/FeedbackView.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2016 Applivery + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.applivery.applvsdklib.ui.views.feedback; + +import com.applivery.applvsdklib.ui.model.ScreenCapture; + +/** + * Created by Sergio Martinez Rodriguez + * Date 9/4/16. + */ +public interface FeedbackView { + + void show(); + + void showFeedbackFormView(); + + void dismissFeedBack(); + + void cleanScreenData(); + + void takeDataFromScreen(); + + void setBugButtonSelected(); + + void setFeedbackButtonSelected(); + + void showFeedbackImage(); + + void hideFeedbackImage(); + + void setScreenCapture(ScreenCapture screenCapture); + + boolean isNotShowing(); + +} diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/ui/views/feedback/UserFeedbackPresenter.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/ui/views/feedback/UserFeedbackPresenter.java new file mode 100644 index 0000000..220231c --- /dev/null +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/ui/views/feedback/UserFeedbackPresenter.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2016 Applivery + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.applivery.applvsdklib.ui.views.feedback; + +import android.widget.Toast; +import com.applivery.applvsdklib.AppliverySdk; +import com.applivery.applvsdklib.domain.model.FeedBackType; +import com.applivery.applvsdklib.domain.model.Feedback; +import com.applivery.applvsdklib.domain.model.UserFeedback; +import com.applivery.applvsdklib.ui.model.ScreenCapture; + +/** + * Created by Sergio Martinez Rodriguez + * Date 10/4/16. + */ +public class UserFeedbackPresenter{ + + final FeedbackView feedbackView; + final Feedback feedback; + private ScreenCapture screenCapture; + + public UserFeedbackPresenter(FeedbackView feedbackView) { + this.feedbackView = feedbackView; + this.feedback = new UserFeedback(); + } + + public void cancelButtonPressed() { + feedbackView.cleanScreenData(); + feedbackView.dismissFeedBack(); + } + + public void nextButtonPressed() { + feedbackView.showFeedbackFormView(); + } + + public void sendButtonPressed() { + feedbackView.takeDataFromScreen(); + } + + public void feedbackButtonPressed() { + feedback.setType(FeedBackType.FEEDBACK); + feedbackView.setFeedbackButtonSelected(); + } + + public void bugButtonPressed() { + feedback.setType(FeedBackType.BUG); + feedbackView.setBugButtonSelected(); + } + + public void screenshotSwitchPressed(boolean activated) { + feedback.attachScreenshot(activated); + + if (activated){ + feedbackView.showFeedbackImage(); + }else{ + feedbackView.hideFeedbackImage(); + } + } + + public void setScreenCapture(ScreenCapture screenCapture) { + this.screenCapture = screenCapture; + } + + public ScreenCapture getScreenCapture() { + return screenCapture; + } + + public void sendFeedbackInfo(String s) { + Toast.makeText(AppliverySdk.getCurrentActivity(), "Feedback Ready", Toast.LENGTH_SHORT).show(); + } +} diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/ui/views/feedback/UserFeedbackView.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/ui/views/feedback/UserFeedbackView.java new file mode 100644 index 0000000..7a8a879 --- /dev/null +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/ui/views/feedback/UserFeedbackView.java @@ -0,0 +1,254 @@ +/* + * Copyright (c) 2016 Applivery + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.applivery.applvsdklib.ui.views.feedback; + +import android.app.Activity; +import android.app.Dialog; +import android.app.DialogFragment; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.widget.EditText; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.Switch; +import com.applivery.applvsdklib.AppliverySdk; +import com.applivery.applvsdklib.R; +import com.applivery.applvsdklib.ui.model.ScreenCapture; + +/** + * Created by Sergio Martinez Rodriguez + * Date 9/4/16. + */ +public class UserFeedbackView extends DialogFragment implements FeedbackView, View.OnClickListener { + + private static UserFeedbackView userFeedbackView; + + private ImageButton cancelButton; + private ImageButton nextButton; + private ImageButton sendButton; + + private LinearLayout feedbackButton; + private LinearLayout bugButton; + + private ImageView screenshot; + private ImageView feedbackImage; + private Switch screenShotSwitch; + + private EditText feedbackMessage; + + private LinearLayout feedbackFormContainer; + + private UserFeedbackPresenter userFeedbackPresenter; + + public UserFeedbackView(){ + this.userFeedbackPresenter = new UserFeedbackPresenter(this); + } + + public static FeedbackView getInstance() { + if (userFeedbackView == null){ + userFeedbackView = new UserFeedbackView(); + } + + return userFeedbackView; + } + + /** + * * Using DialogFragment instead of Dialog because DialogFragment is not dismissed in rotation. + * @param activity + */ + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + } + + /** + * Overrided in order to get fullScreen dialog + * @param savedInstanceState + * @return + */ + @Override + public Dialog onCreateDialog(final Bundle savedInstanceState) { + + final RelativeLayout root = new RelativeLayout(getActivity()); + root.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); + + final Dialog dialog = new Dialog(getActivity()); + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.setContentView(root); + dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.YELLOW)); + dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); + + return dialog; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstState) { + View view = inflater.inflate(R.layout.user_feedback, container); + setCancelable(false); + initViewElements(view); + return view; + } + + private void initViewElements(View view) { + + cancelButton = (ImageButton) view.findViewById(R.id.applivery_feedback_cancel_button); + nextButton = (ImageButton) view.findViewById(R.id.applivery_feedback_next_button); + sendButton = (ImageButton) view.findViewById(R.id.applivery_feedback_send_button); + feedbackButton = (LinearLayout) view.findViewById(R.id.applivery_tab_button_selector_feedback); + bugButton = (LinearLayout) view.findViewById(R.id.applivery_tab_button_selector_bug); + screenshot = (ImageView) view.findViewById(R.id.appliveryScreenShot); + feedbackImage = (ImageView) view.findViewById(R.id.applivery_feedback_image); + feedbackMessage = (EditText) view.findViewById(R.id.applivery_feedback_description); + feedbackFormContainer = (LinearLayout) view.findViewById(R.id.applivery_feedback_form); + screenShotSwitch = (Switch) view.findViewById(R.id.attach_screenshot_switch); + + initViewState(); + + initElementActions(); + + } + + private void initViewState() { + showScreenshotElements(); + userFeedbackPresenter.feedbackButtonPressed(); + setFeedbackButtonSelected(); + screenShotSwitch.setChecked(true); + } + + @Override public void onClick(View v) { + + if (R.id.applivery_feedback_cancel_button == v.getId()){ + userFeedbackPresenter.cancelButtonPressed(); + }else if(R.id.applivery_feedback_next_button == v.getId()){ + userFeedbackPresenter.nextButtonPressed(); + }else if(R.id.applivery_feedback_send_button == v.getId()){ + userFeedbackPresenter.sendButtonPressed(); + }else if(R.id.applivery_tab_button_selector_feedback == v.getId()){ + userFeedbackPresenter.feedbackButtonPressed(); + }else if(R.id.applivery_tab_button_selector_bug == v.getId()){ + userFeedbackPresenter.bugButtonPressed(); + }else if(R.id.attach_screenshot_switch == v.getId()){ + userFeedbackPresenter.screenshotSwitchPressed(screenShotSwitch.isChecked()); + } + } + + private void initElementActions() { + cancelButton.setOnClickListener(this); + nextButton.setOnClickListener(this); + sendButton.setOnClickListener(this); + feedbackButton.setOnClickListener(this); + bugButton.setOnClickListener(this); + screenShotSwitch.setOnClickListener(this); + } + + private void showScreenshotElements() { + ScreenCapture screenCapture = userFeedbackPresenter.getScreenCapture(); + //NOTE screenshot get lost after screen capture + if (screenCapture!=null){ + screenshot.setImageBitmap(screenCapture.getScreenShot()); + } + screenshot.setVisibility(View.VISIBLE); + nextButton.setVisibility(View.VISIBLE); + } + + private void hideFormElements() { + feedbackFormContainer.setVisibility(View.GONE); + sendButton.setVisibility(View.GONE); + } + + private void showFormElements() { + feedbackFormContainer.setVisibility(View.VISIBLE); + sendButton.setVisibility(View.VISIBLE); + showFeedbackImage(); + } + + private void hideScreenShotElements() { + screenshot.setImageResource(android.R.color.transparent); + screenshot.setVisibility(View.GONE); + nextButton.setVisibility(View.GONE); + } + + @Override + public void show() { + show(AppliverySdk.getCurrentActivity().getFragmentManager(), ""); + } + + @Override public void showFeedbackFormView() { + hideScreenShotElements(); + showFormElements(); + } + + @Override public void dismissFeedBack() { + dismiss(); + } + + @Override public void cleanScreenData() { + hideFormElements(); + screenShotSwitch.setSelected(true); + screenshot.setImageResource(android.R.color.transparent); + feedbackImage.setImageResource(android.R.color.transparent); + feedbackImage.setVisibility(View.VISIBLE); + feedbackMessage.getText().clear(); + } + + @Override public void takeDataFromScreen() { + userFeedbackPresenter.sendFeedbackInfo(feedbackMessage.getText().toString()); + } + + @Override public void setBugButtonSelected() { + feedbackButton.setBackgroundResource(R.drawable.applivery_tab_button_selector); + bugButton.setBackgroundResource(R.drawable.applivery_selected_tab_button); + } + + @Override public void setFeedbackButtonSelected() { + feedbackButton.setBackgroundResource(R.drawable.applivery_selected_tab_button); + bugButton.setBackgroundResource(R.drawable.applivery_tab_button_selector); + } + + @Override public void showFeedbackImage() { + feedbackImage.setVisibility(View.VISIBLE); + ScreenCapture screenCapture = userFeedbackPresenter.getScreenCapture(); + //NOTE screenshot get lost after screen capture + if (screenCapture!=null) { + feedbackImage.setImageBitmap(screenCapture.getScreenShot()); + } + } + + @Override public void hideFeedbackImage() { + feedbackImage.setImageResource(android.R.color.transparent); + feedbackImage.setVisibility(View.GONE); + } + + @Override public void setScreenCapture(ScreenCapture screenCapture) { + userFeedbackPresenter.setScreenCapture(screenCapture); + } + + @Override public boolean isNotShowing() { + if (getDialog() == null){ + return true; + }else{ + return !getDialog().isShowing(); + } + } +} diff --git a/applvsdklib/src/main/res/drawable-hdpi/applivery_arrow.png b/applvsdklib/src/main/res/drawable-hdpi/applivery_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..a72f8a430fbdaa19bb1263a252a1c624e2772d32 GIT binary patch literal 2552 zcmVKLZ*U+R`sCEkzKl)gj5&q@hY_5?)@_euSf22N!q0z{yc?Q2YY_Kym8e z5Fvwu2%hQO!{u_psMvL#(bD64NQRTZj^-}DnS22ry9f-;mW=gZvQj}U-ZdMsK&I8^7~DvX`q=ioaU%u%0p=hT=Yv_nYDIiEGl))AZV?%%>L^fdv zBxK3UCfQ`~?T35UX7d8s&ED*0pPBn*ckj99{PusI^PF>^bHtB+_eaLSvVeTxAz&sj z6_{jxZU?0KI}Hc}*MSz`bKop+0;mDntgfhPVcEIBGT;$lK9D!c@@j$Oz#-s6;L>;j zvH(~OJZ?fsmgSq*Qzne}fOmjn$*jCgVp-n?4gyDkXOawKDE0lseAYqp*=Yl0Hc$cV z1{O2+w%B}jg;|%B0a1XLfm6V8Qg6$FlfYK9Zet2$25zsqp}L8JI`r+B`F& z9TAYbfi+~lt-)BExhareTf9y(vUorUq!b7tta^kEcZn-@vizI&%CzR7Ileda@t; z67bPb3V9G%m`WhJu5&%qMezgou>sEB3MZnylfIOXQ zzoBWyzn^zoc8qG)l`WxUZUKR-*NAAE6;PfY2;^3vG}S;9vrC)_TprYwep<4aMFrCd zG+UySQj-BnVR2bBL|>T>W1-V-<3BYGcwG)=SC6 zb=(d+iXu61x|(dShv~VK2Ph?vE7v?XK8MCrUa*j3|wlucFm*%RNS zt*e`pwE^zB#R%*Y2=a5(ct;l@prfk?pWDH*!rA2bJoNTO#w>7a4|UTU(dg<4V^>}O z?>>sc=9MM9TCty_)wSG_Gcl1z_*B3d&mCRiUi@w+>sKsg>g4PcI^CgS7=^WEOW5?M zFy}5^A=~SYS0xTf9PehN5M1xd=9m(S5SqPP%)0H>J34kDU1CNLy$u{lU# z-V~l$wrCKLf1au1mw(-d%WlLjeUZ596;_EekxkQe95$6(C-`X#b<^4rLRdWR3XGVf zzNv-#^QZ8`B@6JoW5+6jq~DcqQD z$_TWy@|CH#vth-fIBl_`$;r9^uk6~7&88+x82}ByISF(Ehtma!l!C_QAhYhsrF>Nh z69y>bR9%4boqLhMB%dc)$^iHn=!{0H2h*dg2!fs6%)T?1jVqQ8Qby&4Mz&S#Ln@L< zeowOFpM&(9$Ls;Fq#B5(X@q*hJn`@xCVJfiU^K9K=LcvSl@kj?mnaxOwRIH5gET{GKiV!zL{zuHbud1Q`vj6il$&Y;od%uRoAig z-M`bP=~gHsYHxheZ3pa^IYNrx?+T!!yN4`~8<*WiQ?LzP2fxQj#2Oe!fUkYw)CYXI zDb*^`0k_jZdsjD?gKgMV6`#vt6$~))SQ!q;M^WdJYL&R{HoQ(dsv^;>n;z_;Un&H{ ztd>0s^rnMSbZg`1Uf{VwanKMyJPW)|=G$v#TW<;kj8y3384TlJ43nxp9FRWX2S85- z!ss#E7KsN4z&YUi83<%GaDLdi)J<;wGsdo|OtE#qUv4vk@Y0!EYQ88M^1LSR=Kz}RKh<%Qvb zE~|k=?Y}@7#%U0#SeuO=hERr)d^;*j=DwKs&1(V1j_OjZJ0Zfd<1(z+D0Ixc%7Mo) zww=$%IQwHX7ClhqAh4Hlbf8NAfAKBz@&nU||Hz$sbBg{6V|3)s{{{d~d2*d!Umf!R O0000KLZ*U+R`sCEkzKl)gj5&q@hY_5?)@_euSf22N!q0z{yc?Q2YY_Kym8e z5Fvwu2%hQO!{u_psMvL#(bD64NQRTZj^-}DnS22ry9f-;mW=gZvQj}U-ZdMsK&I8^7~DvX`q=iQ{{?)0**s5)#j_D+wG?{5bv=1d}!8D+Pf`Uc_ z0TH+eT-fa&yC@G)mV1|bx!;-nhkMy`&gcI2cYeRKzjMTrjawN61%UCubYK#250GU1 z-3~~`_f((_xCYb$gyg<5t%96QiwMqwSah@(ths@Bxs; z;48~$`+(7xr~#3ISAhax9?{o4ARl4mZ7V)#uy?3WDT&Ip|91( zSi%Cb2zZV7(QClMfdZKb{DJt>uG>w?(rt2_U4SDFfjEq@DQ1AY3Oq>s>Omu-?H7>A zz>CDcUPND;xg(IbEM6z+Upyd5NRosQ!m1{0z}7nfnFTx^O%Spq5o&MeQcW!tm#;h`;65ZtqOhz2m&1-MNmevF z7T9?!3rPnuqG=tPrcvJ%WX`wKS^oW5JeiTs`sEABxbN#!RMntqniY@G!@vW#0`gq6 z{f4Tl08IGm&BZoJ2(ni!;;BcbbFQ+Q4pp@R%5yz|j0EOJ8;C5+Xqrahxr$zo(&{Bo zGxPpb$}d}DDRT`5H+;w^B0w+2xWM<5Skv0XpBJ=fYVfQS_< z(KHRG!wx`hej#I$hch;LWH(F6m^y`$3zd9PR!*YN9SKYE0|(^P%-K%?PsCbWt!Wx= zrvq7*_$aS{5dl9FM~~{}XtUB%sI0ll@#0bvyq<8O2;g%$HFNeev6{$rT8gG>b%P5TiAy^N`!*{DWRz{kP- zFOX%y{LF8Wicen5S`+uj%-nkEt z+fJg-I}jKE4GMa-pXmq^!0ohKo&pI#2#NB`)nrafVbjVb_KGJzyP=)0jFYd zrVs{@^HnuWn>3!Bm5Y19$SW)+`<-`jIcy{a{B)>lxXqqa(2HWVSW5qO2MT4Cmzg$U z9B)3q3}+7*pB0s`cKe@j*=^kA_YKr%^wd!ay;AtgShI}s%QbxS-m&DYT-*!Bu~TQs z-nkct%|=o}L@Wc~B2Xd$LEuoV0FflYg{mv0jvvjN&p%6|&)Xfw>9efewg(Ul3q;H^ z01g7d&PX*kR$$aM2AOJDM$b6ozs03&+_4u~Ru~>R%b+WRP9Prw)zJphp{iVOX=Bl> z8NCv-{Nhqx`rRH>O=Wn%M|)(0!D`@dU4c}g*N#V3s;VJN0;kg5G73u0vEl7^ktK-{ ziGfI42FBQ{=#lAek2VmSEMvDRd~o;}m9%#YmgV?93H7JzuRpU4AARX=?lmwoz5kSJP<~nDS$goHG3Gvj0Q?jPMcq&|%&uja zRS5W5uc`kQUn~ZGP5f)CG1fZ*0lgGDFOFdxp^sAazJRm?%YfE6gwbk@t-}lufD+)D zI0Uj3IMZkPaEE{1hrVknUbF_-f7^VjA2)d&*b)aY-k={_MEd()<`?u)3Oz)$nSN{y zF#`l(9r_ltp{Dh~%l%%0FnRMF!_fwZ0EnRBKsT9MlNmrmyMZ+HJ@~PzPmMnAG5e1L zt(7hT9!1|q(iUSe#w$kON(OR+aEiw}jA$<_%ttT24NH;S7xP!+nt{HfdM?(T5MkMI8CGl*I&55KLZ*U+R`sCEkzKl)gj5&q@hY_5?)@_euSf22N!q0z{yc?Q2YY_Kym8e z5Fvwu2%hQO!{u_psMvL#(bD64NQRTZj^-}DnS22ry9f-;mW=gZvQj}U-ZdMsK&I8^7~DvX`q=i=Vt1JNpt z;KbWROBpmyHFo4H*2lm&EIM#tTN9C|eNjE0YhmG$u`O6WyPnq3V`r;bhD{0mxisPVQ;Z9yL(;q>_=B~vg4|(#gft)JlP^>+>9ixXAgOzWfrQ*` z{)BYe{4EJ)pZ7TjR|$}i2R;7=N`YySH0=x=TV+5(9&>!0Hova{^NKU*VvGsjCTU30 z8dPQK#crOh=l$H!9OpNDx{lJ^7=iH;(+U zXO}Sc=dAHBNxca}WYlwLI0m3X#EUqYaPIXwvU8H!ko2I_I3=kyhfpaOa#7>QQiSLY z=5I(n0nqInZ@vP4OL)LrvJ>a9({?{_94L5W8-VwKole`Z$uA|eJ8k}k)ExlrPQ#Ze zkKYTx9^gZ#?E&B&pxJ&m+wUG{%qUPa`80IKdF}{+O-{r28Il_dKrir-)AlIvHqZ#X z1@t+63gn5|i|Y|XF-=yMN9+R*aJof7M7Ew2^QA33D2!jQv& zH2|IVdlC4+`WJJs<@&oWaB^o#lnJQ}s2`Z}+9!d>asq-S7Q^&XZD0*pPOB~_BMrb2 zZ$5_kwja7tKV_@8wX^+^%rum)#N;12`u*;QcFhV^)@H` z$$qc5DD>I5`i%Bko#(m0i|h7`p%wLq_=J7^Cp|zrZG4uHyVZG~3cR)Y?u?-o^@lj` ztUN_)52+_($aOi-6V=+AjV;68tX0yl?%piiHUFM+*Ia5FzZ|>f-RAGVcFlR7XOcLS z^*nPd>O6y;)ZCM1dkkemIfP2ulct~Bdt4HMO`hY<dj_=Pgkzs z6beleI z!-vEtd3s=}Y^D);&BsW<QP^uLTX=jVD5nv?*Ogf*85HQ17JgfkR{KAWs?AOf3NW>Qxekcz4 zS5hQT0>Y8ar6bIZObw|hG#Y`y7@^I~F&MM~!UTmjF-A#Vj3L?#YmUL1SRlSWNJ%s< zEf7m|a`_rda>5~l`Fsx6*f=60!YIPjh|LW$Mq61~t#O!`7)m@0d66tWSzyTGZU4sL zMCVbt3=W^cW+B!X$rN@tABU7=`d0}|&UacC?`xYR4Ko&yImT!s)LKd396de%zbljZ z-J8cJ(*Mr)ABlNBksP`)kbE%TS1#Vvp#lbpq>0~~e>%(S;ed{72n9XPNg4rB| zqc;Yj>q(|ESZfBoF9=UhtQ(8RC$p$@HzyoY!ePW<(6D&Cvy-Ehv$+cf?|?=-n>*lL z%&lBZ@n+^Il%*xc^c&WRO$}$#S^RHU+TU2r53y@vU~(jpo#@B8jYu%G<>-4AN z-FXeX`L}tWtv=Vq1XWMA#&2X)SaP{sjGUZYH936~45rM{!)eMzTSmW%w%M{b%R7r# zFfzk*-@DhYZRKKF*<^q|ZQ%y!?74IGSFc=|f8Ns4@)4S!|H=l?=<4dSJeQsA+c!4$ zF{pn@TbiPrRA0N0{pr&uu7&-0OWI~#I(jLugE&iyoMqN~#KzvTgUjTtYr*Z?DcX~K z=-OC&!?C`5P_SiA!AGdAFXS0dZC^%0?R0Hz?H19mDP9xZoG2=bHFvs*mQ`J9?TGmHS*_WAjcnj z%iBMtq*#D5wvzKS)@4#gY>!_Z@kEd)y^~ALJ>b;}0J%YBY}-D<%Z$}!cBQG*qa%&A zvboKtsSi;N$*VzSV=vqM%Gyswjh!)29WenKXy9Y4_nqKVv!*0Qfx_})p+65FkTo75 zOy4{r8p!Ftvmk8Ed0o2aI2TkNH>{w>?Skm|vVh3EQ0sxYmSe`V;9ix>QEIlkVVe+> z?&#Za6&1*-nF5W$M;lXdjEDuG_fYFfG|)ftMimbCNS1*V#SKNS+gTa!cd-A?ZHLp* z8%}&6OSQ%|k){MrsH|D^hZ6tzXWMeGnlUxCNG}xNPZ(18Rri{QZS}(2U{~3wW{oo2 zgDKlFykGL3&2PG)P+MLetjHU3Z$8QCxl^Hz3Hj_W*LGo1*5XOhl@GIK`Hx2ny3#^- z3}dFRH&j(sc_x5w?=8a@x!=zS+SjRnva;c`@=DoE{*1+g!1WV7w`!w3PHu;a%lGk?a4a=fe*AnyLR+4lfAQMf3- zU>6gRC>1gUXdmpubj6fvX=#bQhFu?S^+7&35wfc}rW_Sg%=BWkwk|_aQV#FZGi7QB zc?4ZKF;_WN-qu1Y#rloa_y@uUFuY;d`{$p>+S`?8Il1?%`}+T+d)o^isP#-mV=&}~g zwN`_bwpHjS&&fQ^1)mDocUe!@*FRSa!DJ0f-8X+ z_2DfBO+pQU^ii?Or24HMP@$0*Z%56Y%M%nn=b|1e1^lw<^w4-h=NQpF#JrV_2GmnR z>Jw&6!%GojO<@RVd@pB=PSSC$itJCic&pa}9a*Xo;uh=h+&9hsLi&6avCi$g%gYan2)c7#1GE@n~Xj; zMCvCsX@=qpdg@QRJ=!MYd)v^2!WN-A|Lh_lZ^w`-$a%1%VrlEy6)+4gs_ zgAlGe^TgdP8GC*L#el~(I;B(V&jdBV*6n!{P?}gCuXFbb=q9r^nz)D)`;xZlnidhL{$fKzgXypeBBgglx@b;y|L-MIQzV2uDe|PjqQ1#doyQwM$m5}% zhu_V!MVOCvB)0bW* zDQUk{L5AI*#?JjRnZ=iu{?l3odeAwK#FRPkE-k)CLG#e=^-#Bd(hG>p6TKZ7lo8J)FhrVMmZ&=P*g* zELYfRr>A*EPR7Ez&gY9Vs~Sf5dToRF?UP;)7oU2Z9g>??j?3I4Mb+=Qr;GXpjgGl^ z;VM)u a5TI?pT==Q?Z)Vmm&u-3MPSyB;U;hj2Gxc`> literal 0 HcmV?d00001 diff --git a/applvsdklib/src/main/res/drawable-hdpi/applivery_icon.png b/applvsdklib/src/main/res/drawable-hdpi/applivery_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6b446758770ac239321a5935e298229341c71ed8 GIT binary patch literal 5508 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 literal 0 HcmV?d00001 diff --git a/applvsdklib/src/main/res/drawable-hdpi/applivery_plane_selected.png b/applvsdklib/src/main/res/drawable-hdpi/applivery_plane_selected.png new file mode 100644 index 0000000000000000000000000000000000000000..9e817227d671c9365e75d2e898da8247c7033dd1 GIT binary patch literal 5108 zcmVKLZ*U+R`sCEkzKl)gj5&q@hY_5?)@_euSf22N!q0z{yc?Q2YY_Kym8e z5Fvwu2%hQO!{u_psMvL#(bD64NQRTZj^-}DnS22ry9f-;mW=gZvQj}U-ZdMsK&I8^7~DvX`q=i$A4A5?~+=(kU$``u*j@pUqeE?VPWh* z>?D(9GIla2IVXwZWwO|g?KtB};!MsNI~nK1iE(^vh;3}Z;Eb`s7-1n0Vv!J%(1H+X zZ*{l2Tk55%=0lg-EMgIA7T%u;nZS7UN(T}F z3!qcSg#ka%2Xp{U>QxCe0^Vz_sP-D(I|Wz;EC=SOAP84^FGU4rAMg>d8R-7J05Tu= z8c+&k#Oa=bYGD(A`+#;}6Yv_aH=fFialF?Zz)qkH_+A{r7)~;Pe^;NiQ+@VL1ISe1 zZD0$ql@PLS_DBr z5QgP`KUe1v7eF2Z9=X|p5JeHMKR~C;O(+~e6fc_*qJluQfFp1WSvV%D)%YO7q04V@|bhBARx7$NFA~CaY0;P-Qu&}r&Hm;`m6el~nxpnSz zKwxk6akN?yK@?CFG`>_ zG5c#9*jru4YyaHM_wN2Of*?@a(nd>r7j}#JQeX_t{dwT_O98S1xb;T!h)_5}SDyz- zmYFjtpVCDo%$rgW8+Wj-i7jRO*58MHL9IKR}<)kJV^o?&N&#UA}A3Da?y$7hOZzdu|aQpm}Oq$5E4}OhghmF5% z-N6fQZKq&t766|ft)s2mMOva`Bo;C>_j3SA0`9(^7SY%5BgtW7-HHXQSvrplXJTyJ zr`2_A*|VR@`X(Zg2zs3kji}>+RV%r7`FxTc(dBWXt%I>?DHM*4TFBuOEubifqBv4O zR;#q$H3Ud0;Jl_jLKJYh`|0{TnMZ2UXF%*ZQp=V-`>ASZCKQg4nVg6yinMlilb@Z%_t)IUw29-+ zT1qv%@a8shGg6sRkO#o=mNvRQUhHNQpj?f*D~15EsE#Fm79k1<2=scqcmsos%Sh$+ z`LkHPWKPW70X{r%gso)6Okm+lM*rNb;yds=^hsmDZ&re-bv}A5|xrG2!cQ$807bFY(@|S ztR^E_DM^T`6&`D8!)i1j%gWWNpAAgZ5^XOEqqPVS=yiMX4GfZ-nMUd25=s}(A<3IAB608=A^P+yG;Z!?){XVi%MjaO>YJr@Q z=NTG8;V|7EAA{i#6EZWnXW4vKEiA!dH3Q)B1$cXRIUiIU=5%*2Hj9Y_n+2WLhAb;c zl7vtLi9? zXF9Q(jO3)JM3;>$Bg+b+dY@D6UF2nF@L=i67&F~oUP)DbGhhAUVvGhog?SWSMXzLXzD|kqSuV@kU%;ADJnMqqPozBrRaNRMe0p znGTPe!BB{4dAZ!Va26|O-4Yw)^7`1cyPS`!YG`Ti#A-IF7NJBvzH+Yf?eX+85Df8y zHMg;5*?a&(kqD2y_$qsA>UjOhACuusBp3?w+c(}NB1t4#%|s*_Q4kmih8drkMzP9E zD(jojX*FmB5lN9p3y4Xpmeht#!#jHW0GOVi%N+}5v-p-tu`yk451V%Fg~M!SY+4G6q718)Midzgg*n;T&4Q_gJhXNdS*g)z@ZR1^ zp5L&U_TE1J_mS^1BY!*q&u`dF*^yfEvon#-;uR5D0u=JHqHgcdi55CsE(|(dJeEr= z{STdQ9X%c|8Oe$K@!V36Ovv6&Al4$GA<((MI~iJdU<>S zQW6~8GBL_dD{C8Y`}|}j$1M#DX@P+YCZl$1`U3;8=wUSI$w^P4q$rP5UA=hx1IV(1 z*<_3^2}Oyy3qcSNfcBm~bXpA$uPfyXs+IM6ygc*Do0QkoBS{jg7S85g)t7v9@F@Si zaSQ254h%Zo1wi`;g3KwJNP=2CK78UNdaVv&^x<|$0$RXz_9u#>kYuyr=@0P0bAM#{ ztf|~KcP3dWN!+_^0rxIjKwDQYyQ-@BpyCj%ojr&ekz|J*gIcklC8#0wATPYN4M|b3nvBdWoWSGX{EEspn|St>e_$~fFdK{)fFa8=8c|?I!T4BV zxw*X)hs6}PFiWzO4qBM1U|troY>&w=BOd|FdSb>m4KRx=sSMC=wb#d+gc zJZ&=R&IBY$rlIW&fx#dejflq|pkz`$Pd{)U4vU#!IL!L(J9+8d{{tbK_!;zie*67z zVl^A-4-D|wpZ-oT6ecyv5p$wvFTa6Mgd~TJf4OxTR547z~9etFB|$p&CjG^O!rifJM_Lk&<9%^^&=)UNV=e`eruosbF7i zJqb1o&pdEHT8&71Zy(RDk1mmd>`Z)vgA4>iJn^lskZ7|I3P*VKkL&4l^^uk0Bpi{3 zi~j_}AtsJVCtWQhRX4R_((B`0v1ru-^%whg$P`U_9Tt;;U?@UmeG~g@Pq68ea=uhD zjiuA4ke!;$^!!|==jT#?>I}zQ+R$o5WLf4nuf4;;`X-9TWfK?}#O3kv)W3a|nS~RO zWSQT*{tky5TFA{vMY%|(8s#4$3dd&0xKCZ{8O%mQJgozuPD^xCta7Q0R{0t#?j>d9wbM(90#puJNSj&@ zxa==b6a>I#GGa3s=?@ID=Ws0*#~PSfFrLT0z6OWItTIy(o7sqh678(bo57t6X8}-l zq?R{!d_s1r6H(w2#7dw)FhF*ilY*Q~HM%sTC{d0RM?g*i4I*Ro2)tY#zG zX-@1G6FU!9v%Bip1&p`L$=^nTkR%6lQi&KB6ch z$ubS6+R^Lc-dx-R_=om~e0bG%rbKfVqh622Xr!XH;hgWifdP^oc7FQxd(de#bi2L$ z$Ddxs>knWxnJ!!Xlw<|1R>N2|W3FpGO;?{AYkacXvth;apXh`O=mi>7~^Uk=gj?VKn@VyOn=oPD+*Slf!2;5-rV&mUVnhWa3t2S z9?FZ}uc+dc?K=TTO?2?=gZJ~3`$|zzIMd@IBFShpBK`hB5^dI4tKmdj2YvlMv>I)^ zo#}yCc0P6K%5#_+SF!u|e41@G8mMbM%^N%R5C{hO_U)hb!498j;qjMVr|jr)jyAQD zXtOdV)k#547RzTA)8qD1)7(lZ96^y~ax>DnXX!iuHtsB=wW9~S#S~9Kz6CT7XCXtL zcH3y#jb5uo6a>!nx+oq$?wpA8+}}5$*XtJ zT6Y%)otB2Sc8YSNrNX{`AJt8*nALJ)oMao(14&%WLQt9OcNxV=iJ``l0+cQ)VSHv9 zzJWm=e&H2PcJ`3&bRf$LNp>q5QDEo6YATO6;xs; z*M)@AbLt^ zWE~%g}ahk1v2E%Lsy?`kS~UbL)m%DrXm& zFC`m*T(0wecUe}@h$2ph4M~y^Rk9WbFdn-U7+hf_`A^`#xB;T5+oR4dR*gcQ;|h+5 zTxn>1l;~FI&#OGc6&wv22_O(Xg!9Db5R4~)UtF>O8sW{KQmMWFa{z>2)%B?nIrOV| z(5t`=qvdT? zm!GS|lIsn~kW>@h1wHgKgd4Fu?f}-Px{Qt##!<2Nh`uXiKJX&ZS6W;vX;+^yUw!6# z@w)M~I4Ja~dOb<}U#L>9)-Sg3IeMYWkaPooQLmv_?#xnCfswp&r&%rWU6)tx{Qm$5 Wh()4Y7H&-d0000! literal 0 HcmV?d00001 diff --git a/applvsdklib/src/main/res/drawable-hdpi/applivery_selected_tab_button.9.png b/applvsdklib/src/main/res/drawable-hdpi/applivery_selected_tab_button.9.png new file mode 100755 index 0000000000000000000000000000000000000000..6d34ce303597ba158959bcf9b23402531db08c97 GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^ffzu-^Q61CBr-UqJiSF7Aar##V=D#<_ZWi?YPW&c<1i^6YDPa zPI-Dj)XMqPl%*-sM(XNSR|K|jNUckB$`lr1ct3R(bHUFyO+cF%JYD@<);T3K0RR$M BHUaKLZ*U+R`sCEkzKl)gj5&q@hY_5?)@_euSf22N!q0z{yc?Q2YY_Kym8e z5Fvwu2%hQO!{u_psMvL#(bD64NQRTZj^-}DnS22ry9f-;mW=gZvQj}U-ZdMsK&I8^7~DvX`q=iic91@Gf0}w<|ENB%A-IjKDyWQ>X z_+j3bZM5t$J4^j1nwpJy1WA`i zv|k6D5q8Uq1@jzm5~u|RQ&4gMHl2iy&V}-x}3F86YvGsMzGOdvg&R-1C z-VsBQWveDv2*3XY^OA-ARaQOH-VtN;;0mg%?qpD)ls`hP$ku>#;dd_>6?nnUUWvvN zxSR?LW>2O1z6sRMnZ~e+a?Uk1TkWCeh5tP;j{v21!Wf2uLzeNV=0>7a*H~IJolygW zoNa2xkw1_hcsLzqp54=r?kb_VEyBv3U-taZt-4rRGlP)>gEUwJn%50e4pi9^OXs)w}km0l8Q{f2IHmL#@bIo6QW&&<%wnv`0Is zn=_5uhYjg@zVF8~EZ??=pwEL(SF?S2mlfbbHs4Gc2C7p*bt(nu5eK362pI70Q?nUA z@`j#g2T%OM(yeqf4P^PP11`Yu+ zyFp}0BHYnQIM&I+xeqXL^c9e=fBucdn?J|z*6@4s0_gz0l7VK-1huV7BvZuV2^P$n z%7iqK!>1cqv}rd!O{L7O=R5812SRdM9?DilJL3!}^Kti>5m(~kbOUu8Kf|Z11iX4a zJ<_cW=_k!CnAdZ*Ni9)m4M#b0<{XJ+k^?7yWy#h(_%xM(N4K&Nw+jDzt^qrNRhSun zTU4SbU>L00wU2;D=R!*xUbO_Trdr)mtQ7wDN;R#(!hK>k2Q!z`i6YB1T@K^cTzFKM z)!jr?`2DZESvWlhWrtFRfm3nd)m$jDOv*5^1%W$Cn-g zlKmW{OZZ79m~+L*qghlna6TItfK6m^hj@+jhVYMUVF2DD!yV!^&=O#ApIfF3jbFEO z?a5KK!XNU50rL*ArWl*iJ`@vUB;y@xwpq6IzSYU`oVRsDhe$Hp6Jb$zqvvOm!7*C&w?NB}ni}p3b zUY)R?`;px0F-450^}qnkD!@tN%?_sTO29_0R01BRK$U?13;;01wm|>@ literal 0 HcmV?d00001 diff --git a/applvsdklib/src/main/res/drawable-mdpi/applivery_arrow_selected.png b/applvsdklib/src/main/res/drawable-mdpi/applivery_arrow_selected.png new file mode 100644 index 0000000000000000000000000000000000000000..45e2bf1ef8bddfe31013b17291303299fad5d21a GIT binary patch literal 2273 zcmV<72p;!|P)KLZ*U+R`sCEkzKl)gj5&q@hY_5?)@_euSf22N!q0z{yc?Q2YY_Kym8e z5Fvwu2%hQO!{u_psMvL#(bD64NQRTZj^-}DnS22ry9f-;mW=gZvQj}U-ZdMsK&I8^7~DvX`q=i<)DNAhZSAy$Qh8M9v{R^J({WMd^wo0CXd&$3iRnEOC+h9)vyQS5eE-95d{5o4;JAw7g9N8ds$_VTaz@yAOc~t6_ z7T6YGH8WRMOC3`J`!=wVnJ*iqu1SI20PN!GkzG>fgkU=X>s1711)fO+Ru6nJAKIv@ zf~u;B>?0lNG884QQfR23mIM*Oj4_zYM*P?<|8Aq0_V z6o3csxt+Dk@5S$S@xi$OiV!H7!BtLNHDyBTu_D*2B?R~iwV`ZZLSmC(@>L{rstx1|8?{{+kjEXju@ zG)xmqVF3b@&5ipweC)({gzI+ki|>7t60e(%-XN-~q-#*_2D}PTlWU_fQKB&&kJFB| z$ikDmU*L`7r^Y^;?ens2-6Qy%PR?`((A0GDV6Fvf)Y_$W%YnLldQ{Uiu@@DgnU0yl{=d=}Z*G&s(dFNe%p#eM&JEm!-0v1qfm)12TQ(00Jg_v$|ad4R7 z@Cf0^D3?bfX+M`nMi{&lMpG4rM#3CuJ&L`^!j0F?MNt&&MHUv-%%}Cl`*a5S@Ozx3 zz}BY$u4JI1(I^*&hADPAnWd@dhJna}AvJ+wr=7rsk9qFU>r~Ay;f~q`agST(=a&sD zcznkmx_Zx3QR*Y6Cq?Jh5(T^h&~<~$krBRCcQ?zv@Hq+#3W(`CB3ll^1WnVpI6RE_ zRQNi7PAR{8qJhVE>>)HbgxhYzFcQL9G{!5mQ^$6iN?-p4Zo8qH70d3)sZnuQEmOXq zQ|#eqYaU|5&b>rqIt8kV@&ET_VtZB$To)_{x2I8-47ewTwtG>T!E8Rt(Xpeh1^puH!^l3Q+MQ^UiQc*c!% z)8SUOH65g)q!_o&MkE?bcK87e=uI|S&`mSb=zD?-5on6ad!60fd|d@w)~>{58#mB@ zdE;N~c<~VBelM;fYbsCxy&CcUR7&AcHqMj)PIrCC!s<#kH9R~S>h-tS)^w0EpBKB; zLL?eX)wP_`fMfZzZbE{!_XMe_C}+pIdTd4GX1=+ljm>{%SAh3{ zu6%)Mno6KQL`~&fwy#?~32I-<5jHjMr@YvQ*I_3bOAD$KIIRHvKucaKQ;I@paEQ63 zex6$O5H9=p_G^B#jqOc`DD}GWI&6%}+DIDmCJ_3>K{rc7mD_Yhn1nta=FWu+DD!#7 z-v71r7@HcKaXYNIY*t2Nu}q9@^Tg7?E5ON|pD$D3v|4zttDAwLxcl7q&m;W&PcPzk zIq*7cM0GurDNab1u@-0qc%FD4EO(^=!@%cq@Ih~oAO5}(o8=l#ws%qDcHwc@8I8s= zjb@&gER%Y>&jOF-vP@tC!UXFzg>;|qM~@jetyV0v3NqP#6OG1mQx!}HfS=~0pd%2t ztyX+aI|Z6bEcMiXDtSsWd4G88+twKb z^>i{eAlc&h2IAKbg3|~TlsY7Jn<15|{~q8@;LtQc{SCN7>Oi)^0NRQ7(&~YZJOFhN zZ@=E3>U`<+X=2jLFOpWNEeAkta_mLYoTnT}W>T36Nk8%%;%%t=MRpd vo`do!m0-643rT$0`J5~!9Vg3|o&PrgY7AH+EN9z600000NkvXXu0mjfgQY4S literal 0 HcmV?d00001 diff --git a/applvsdklib/src/main/res/drawable-mdpi/applivery_close.png b/applvsdklib/src/main/res/drawable-mdpi/applivery_close.png new file mode 100644 index 0000000000000000000000000000000000000000..202066dfc01b4e6ded63f4d8b5d2547497dce4e9 GIT binary patch literal 1118 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 VFbMCBc})NS002ovPDHLkV1kz*IG+Fj literal 0 HcmV?d00001 diff --git a/applvsdklib/src/main/res/drawable-mdpi/applivery_selected_tab_button.9.png b/applvsdklib/src/main/res/drawable-mdpi/applivery_selected_tab_button.9.png new file mode 100755 index 0000000000000000000000000000000000000000..ab985cea245064dcf3c2392dc4acadb0a4c299a9 GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^JU}eX!3HEfmgOA*Qa+w8jv*HQ$tevD{{vS~NyLqZXK`j{frO${XX4|N-Y!oA>x*p*#8N$GZknROTU@lL ey`L?}%Z}lhSQ>L8*B?2cxeT7JelF{r5}E*daVV1j literal 0 HcmV?d00001 diff --git a/applvsdklib/src/main/res/drawable-xhdpi/applivery_arrow.png b/applvsdklib/src/main/res/drawable-xhdpi/applivery_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..e9e8d0e4cf2ca5f9c656657d70df6901ffa1c12d GIT binary patch literal 3466 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 literal 0 HcmV?d00001 diff --git a/applvsdklib/src/main/res/drawable-xhdpi/applivery_arrow_selected.png b/applvsdklib/src/main/res/drawable-xhdpi/applivery_arrow_selected.png new file mode 100644 index 0000000000000000000000000000000000000000..10765af1eb3fd1de014fe3f4841830f20d24d52b GIT binary patch literal 3575 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 literal 0 HcmV?d00001 diff --git a/applvsdklib/src/main/res/drawable-xhdpi/applivery_close.png b/applvsdklib/src/main/res/drawable-xhdpi/applivery_close.png new file mode 100644 index 0000000000000000000000000000000000000000..7061a827addf3ef4b486cd9b2859c2968ae7a935 GIT binary patch literal 1958 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 e?f!HOEDgH)^BK=6P}mNyxukd literal 0 HcmV?d00001 diff --git a/applvsdklib/src/main/res/drawable-xhdpi/applivery_icon.png b/applvsdklib/src/main/res/drawable-xhdpi/applivery_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e654e92feec68f681c9ea7eef520bc4c8500cb6e GIT binary patch literal 6745 zcmWlcWmHsM6oxN7bTdeoDAF)UNP`lB;E05P#7K98)X@0R(%mJEv^2ud-5?Dk5004+plog@qQTE>p!bN|-Svjqs2Yg3mJr@8V zr2O|{0BISt06?H_rJ$gxY3bnV;9}|E$fBa4z~boaU~Xk=1^}LmneRMw<1cBXS1-*- zwdLoJYLaaO05o)VR?D_xmL^EVpKT*n1JI99|r|u{UNADlT!y^i38TyD3F90u~49& zPph8_=%)p$-+li?03-l_t(T8H8}N-7*gsQ|#sTI_%t72#CS}QlBbuV9Ndg zjNb=9c`!S>ft+$#Ha_gmN({JOgOCy?ybT9%kJgPPl{E(7sq#F-0E-wVpuj{qg2keS zl_N0Ou~us27}BJS0dx)}jwHXH6sBrQ9H;X*Ia=Fb-RQQhkv9Qzk(uLfv1KHuvr{S~ zvD8M10D$glqU&BvCKkD~wZ3DHv_+lu=H1&IIj~8y9eqvsjJ@ zjB2+In^JvXQ5&#ay)qPD!q53YF#h=}!b|K{mMJS&vtN>tfq;ua z!&-#j1$y>=>GKiblqQ>6(U~7~=VW53C1+RRg@*-=#(Ur$K8T65aiM($vx8Ql$gh^ug0RwAx~Q;tLqXJBSx-K7zFG& zf^m&$v$|MdJuzjFa*sl0WZ zp)&gkuQQc+l!5GZ>{36A(0{l8wJHfF1k}F8n#OdKZ7yM^`>!v@Wx^FgY6wrtvzef) zW0Hb5H2$JX$BCeUZR?6?$B4ifbw%B&={vJb zP#_M>2sq_F=wmQhw{2i-tdg#pu0qMb@%HJY;2J&3gRt2??c9yfO#Lz}Kxe1gwu^g;WStY?POjc?;eZNKcYkWvFrP#o7(5 zY=LUw4G+t`KKLh`9O-` zg-c|AP_fH#*W`Z}R!RwROM5($PNOhXz?(lao@QlXb!o}J>)L|YgH!-R7Y7yiATM8v3O;8Yi6x0%q#pVL>E6V zwlA6@A|)95ZDzc{0x>>?AJT@LQg@yln|-S#lfuBRvJ%^V-EfA3P`7{WYO< zZg-Y{4*r9hMNKe^3P3>5V;|WHiouSCV`0B-QmmRLj)K=q$cHRj;(l7@PpITSY2rK# zv)B~z1WTKjJ204*Lsra|Z6r-ht%Q~eeirm@wR4Rm*rb`aOw>)e4iES9ESJxh59~*a z&t%wSnY1soF5O0j6u!*pRgHKafk;|R@)^QOQct=pPtlgv_R>Dro-0?GHQ3|Xvzyhi z)uh)+CrXz{A8IJ6NU!+mo^H2FwLulbHOY1U&VEsF|8}2XKW!iPK>Whw;_-#u#Ter- z0|n#k3)dGu&aQ65?zWDtdj;!|p3%`BHH`6Z*#Y=WX3PS0~p?p4sv(y&H?R=;N5u$mSPI)(y_?7UkBq zP+Qo3dK0|qTT_5%*x#4O$rP@X9QX%cwtmk4l=`yif{C)dg|EW3WvIq0w?1Kf4Jfx)+@r6}?5FD5inA-_V+&3Tyy6KN2^slNVymP&?m2K(7Kb-esR!yfSt?7=5!2yOY~X>~N|J7hUjn{=nS zp$mO~V(qnj5)BQSEG$&u4%C4pmL?1g*;k%@XogXnBz}62vQD1S*Yb9?I8w7v8_x1T%={1roIO5f74}@79&8 z^d0uhE{6_uBr9Fd)c0OYpr-t`$!V*rpy0RXVWSEJrn06-e5q9~{3xwx!`K;`Js*3Vr*f=9+PkZ#LCtctj1$d>1sXktx>Fgd6`@Hb%NGQrC4vq@&mh?I|R9f z1S4X?Ut&|Y?^(3Od%4Um*11P0gCl}q{!CB_F*)|vlwgj%9hidqSeDC5@x#9N=h_A3 zza==kFI>#W%w1MovQ|&ey|XT*BEua;NTbVq`WqUaPft(Fs(!J39%1{OaP$EW+(#P@ ziWC&+13Di*?)wKS80A-#&l_}I(ZV!U)&EL~t$sp=T+Ur`uo*G+(FT)UGx>OW{yi+4 z#AHBB05gMSlPGZ`ApwDEL7IqE9cn;6JR8$uF@{q^2cZf*q_jGbplVyne|HHI7x zg3I7mM+-I#3Pd_SOYDBl-xj<(Rh(a1iVsy4i~i2snQ|M4??(wYBA;l>aN!J=_4k*_ z^1t`edjH;}CzKd~8}JnelX=&t-qNbwjbW7IRjZz2uwu9T_;EZeJeJeYK%*gfj2#Y& z-h{jOVR!o9(E_>{#>DUrT%eFj3>gc}D=QhuL>$tM^Uw@yD6QmIX0 zBN=Wk4tlOpvt{&hwU*{b91Y<`(f$8CNm~oINiUE*}329 zU&WU9_`}i%V>^rwu?Bo$mJos|NR0>TW9#LLx8JCPt?ke55JHos=aOSVWTx_)p@KV@ z^F}<~_v0`cc-WWU=s+5Qfi_V#+-n&@;cG2?rZu$kxnvCvtI>=v+>I~x7sR|Tc#`;y zq6=RqUw7}>1pX?!{Y@p$@NAexh69+}+Wpg}T1p>CM{@0bl$!{3Gz1@eGRT8$7iw|5 zFZSis)rp~{RQ7G>+7Jk&(}_VW8jEW?I7yeqkAWla@PQDh#Hpr{r6iy6%o3H`3|T!t zk|Y&2AMX79`)PyiLLdwgo!j2dCJ+v+K(U1@+{NM*Z}m2(xiR!j@~5#iSPAc|2k zl720vSSNeqrnw|nf#<93pOl=O-`EJ&Z?KgUN>wy8WPFn)`6Yx9Yz96VYNV>U$_rlh=Fku6SEU!R`h3pP4f z*w?QVM8w2h0+IOk?>eu}QF?5Pm%br=A<;4u^if&hlru9k${ZB`q^qi`T5ZyUtClUzSgJ(;RaGmRSnKD9yJF7EEKsb4 z07n*zXCU|w;BQf72$8ie;jlRKWv43Fma}+dWF$-G8}>M5mh_R086Bfu^x5C)>qmG> zMn^}J0G*pLGSMd|&O{_=hpj8!y0`|4%-;Y+h6IF7A>p$aO%a06*-H)rSAJ;dyD^Pz zJNIupJ2D_-JPg69YPfSBy?G7hdR@k(!qCBZ^lGt_%yO%$NTWB6@2=1PB}6FojF(e6 zWt1FC88qQs`QgT3)57cF{$)G#)PZI?bhiDY(XjdV_8hqm2oYACGB#B89~X^{0f*LO zTwJ_=TP5rf5J1~5HWY&_W0`kyXWK#g-gXcuLhh zoGLuAxcJ}Ysy{Oz;D7H!M*ekx1HHZzs_oMB{`QKNf#IxcsvAt%sw=yd!3;Ql9t4!R zUd!i>s~1^SA~UL3@~X{0u(Pw%($k-kqUpiOfn+GM$}1?qF0#7DcoS44QY`MvL(_v` z_K!q+nT3HQzqJ)@&4MYbv$HefnQ!l#u6ELox08+7m}2tl>LByuJkLB?uLk@b-l{gQ z63Y5lI2Rn%srFQc}8;#{$%*g00fR71=-`@_y`4<}N&ZJ}>S< zvKRzw;ZL*@YrHS*wY0U_7)XL#qSZKq-W9(w*&a-6Ivss6v9z=oL^J*8(<1-y9bmw= z=wE5eI<aa56Gq%cICfuA8)tm)Bi?Z#+$kt8jN|Q`wBW zU`vxO>d;r5?e||xi$qEhK3kyO656dw3JO@-<+=ftm3(N>OhMuXKJ`(H^com{U5&xC ze4*12YiMW~)YjI9avF8`3SFTg2qF8TXq?7L)B_-W7=BG(83g618~D!!+V~?g{-p~G z3v0gBOISieqS|tT?O|OUDdzTvDv4J=w6E`#tGm0Yt1H!n<#dcl5dQDBZwi$s#^GFdOh5D0Anh!P($+agdnZ$fzVq$Jv8zXNz(2teXZWD`s)2U(* zndaydRW6hPa3s5%>SWls;P%T+@eB;yr@Gvi9=2Ep1ZB&u2O-gQMSv&)yVstsF~jH!^6JiW|!kmEYh6s-zm|KpRjZ_fK$sG+uGU&j)&X@1)d56 z(%IHyZL|S@{}a5RhV8qt{)CQR`O1fHOEA(~qP7}czr`*|K z_q0$G3Jtu!_tVnSGDh=PnKS-33UwJm+DF|Z(C6lThKe@}y1ja$IPKL1V83F9A1I!Y z!|D3w4I^uA#E~MAf{&Jc3iNeayuaHmJ>OrfC#0sPe#*;x?tO-~KAQ6Dj`LN!H#axr zUljYSpoHIa+|fs}N&`LD;v@_PE&#_O%uX#)6*GXrEb@+<{MReRy+^PPvq)mxRO6Q~ zanLlescH+&eBtqr%w}e0_bnOdgrHD(Fd}tzbu#&!;$pl|6E({S9Po=Tpk@Pm`594_ zU}m#OM#*fm;!{Qypo**TBbFl}(x=c&?-HHk5e?4xf2wI|Y0)$^Bxc2CKm?FsqP>aU zZRMUR8dTx0^2L0wA>Hea6Syj|??9}^OYU!L-~GnCa_iW9N4=BRFhKq`BH<+4v}XPQ z5zXlR5CZ-v>)|2#XK(KgQX(QFAOMexBQH1nLG!O#9&aK{(#&iA*csRu1jUV*KPd-O zeaB{#C`h2=;~9GLf{y^`qun?b3orT6+#G<@xw4D?GYd&33K{; zWWpfrLyNA1Xn^=8nK6#1&2b54zRAzc#SmTbWS73#7w$+JuYW19O>JL69GLejCzcf3 z3xL@&!^)M$gcB9As%F{aK+#N6{|Q@+8h`qPU07InkEP1x;WElRQ`WfaN{8-4BEbB8 z=-lKcoVfT_Co=BSauu=!r;t&ey!dfzBQlONTkY_yqL$DZBQu%-A@?j%UPFUa_4R8+ zeYY5rH`FA9BhNZ>$YLxj3f%$J)Ci*cK?6QKv}g2=G*9Nly*0?{*$Vv+#_!hP3? z(Cm->hY?&>A637guN8KOps*fFcO%D9jYpwQoec-phBD|Htx9qTeW?ER8I1+`?ufCJswG-AL%T;Lf4V)%J?klhOX8qe#b2JJ^R%!3z z!aYOWr4P0LyFs@`fvbKFGSdFtV$5_jL%gJ<1VFYLsV;!lGH<7!01)RZxJQfyAnKGb7|c(C2x6c?`F7|r7CihP7?P4`h)79ceUXpe zWoxRU3)3xMobs*D;c_#=aL!O&v0~LlS-z)C_p9>SO zT1c9Yc=RSEM`413;t&3W@qvN5`H6`Dt!LZGrAT4PF`KAY`B4BA>2*K`M*=>WYbspZ zQX#KbLQSY}y8~2~_cjbVYk4}Jcw#^n+zdtC$j$l!Zd*1{A!PKlFi}gJaX>6OA2vxo zcG})PPH#BMubzo>gi<^s?3<@y{i!!1Ci0}e7@>ev@O@ICZ*ZTF)%l@s9xJj2eP;@m zXU!xKRy=d6fk@13{|P76VnSOAepS;Y&dE*qhXkm`PUA*(83DYrJs3p`BQe}sTHSwGW$GA2_>%%Q X_=WVo3E*V(?Hy2g`9`r)-Z=1o4Z+OA literal 0 HcmV?d00001 diff --git a/applvsdklib/src/main/res/drawable-xhdpi/applivery_plane.png b/applvsdklib/src/main/res/drawable-xhdpi/applivery_plane.png new file mode 100644 index 0000000000000000000000000000000000000000..da723315d04c118751ee2af888872374c3d29c76 GIT binary patch literal 7419 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 literal 0 HcmV?d00001 diff --git a/applvsdklib/src/main/res/drawable-xxhdpi/applivery_arrow.png b/applvsdklib/src/main/res/drawable-xxhdpi/applivery_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..ab96150800e624ef14c84cb476c595347018656b GIT binary patch literal 4010 zcmV;b4^{AqP)KLZ*U+R`sCEkzKl)gj5&q@hY_5?)@_euSf22N!q0z{yc?Q2YY_Kym8e z5Fvwu2%hQO!{u_psMvL#(bD64NQRTZj^-}DnS22ry9f-;mW=gZvQj}U-ZdMsK&I8^7~DvX`q=ihKsUWi=LR)cUP$2|x00hxC zw%UOR8tf851hjUw1yKa4g-|rEmTE~|AP^DD6u==Q6%{$l))03aNQ09pap0#^fVwzvn zI}uAT&`gBT7%G7CKq*iNWCMGFUBGr=kBBJW9~#x;2cqZ!+y>kZ+yJx|K?Hf}o`K?Z zLV+0ID!F%=2qp*E34AWsSHM{<5c_BabOREB1o0Tr)w%~?5hQ|%5$`opyvQCP6Ic&? zE8ay5#0%fE3ory22HXh5$ymdw1Ol6_~-f`PH}#{5=`;}YVfO;!WR(pF7MAlFNO`xoFkt%obp z9he6!^i@0AEs#K&nXCdHMTNdKb$i;XHhawOX}+BTi2+`b0a!9Qs3iR?9feZtdNPI(M4TGdj?{~960)VH0cTnpn8f)n)Z95(> zu1R@IAc4T|WXutzZRs_lfmy%{-Wt4mLm&~rtH2*nITIT15-M#yTiV`Itd67x%P2cV z+s#%2fTvM8DHBoIZjSRH5u#!(4&RYtwI}gd_j)1r6_}uH z;~1V6n>eD2dBUnMqp@^MGF5EjQ-KVTL8+dtIFB%~&0t>%q$g^nQO7x)OO)8?M!N+P z3(N;PYa2M8E@G=#y95#lyogGV)3}5FVzWRy1oAK{6HMbS#sUv{TOgf*nR-y_N+@+Iv)^d1N?0zv~vd zw27yZN-8U1Z%!_YKl*~x=Zf6=SfRl9zpC0Yn5FF$o zBq)f`WM^Bq8mK+lv%Cymg-RMaIfYHgR>CI~sNH9-P+A-!ebt^F4=5eKsyKoXH~-hz@gAIB7_7YI;;n0=W+8pe0Z@Z>`^I z+LOdbMey9HL^p|~Bh~7;R2N8J^d1+lc#`<22qry{;Fj4^y($;;#e-9in-Q7%n zAc2UGV5dG#1kfuvH9f#UE$w&5od@+eiodS@nExI4&eUhGY97Pnk&f+dJgD>k!VOVN zS8ZNvSg?9C|JiSTOfqT2K&N_=u0Vt#{f*u&XCVvMY%$&4T+#u`?jV&yZ_ipW@ltlUg5LDFF*3&gY5PAs0i-4=?40C*98M=qf_e^OdLLt zIqz@ql}I8z*t|LF@x(sd+@-y?zDYW_iD%M?1ZFK?&jtHEZLonVC}IoYA~1jZ12%rZRJL_ z-wE6AX#lnjk9Ygv0sV#j$4-**`3}2pd%?hhLubsAwR107JNIg9H$WV-maq54t;-G6 z=|r~i&#W(*_RdPSe6wF$-URz{a+#fx>5C~YKv}?;`HQy!H~Hf3I+9wq=kRePb(;q$ z@YUVRD=tu8alXljWBk2$nij{wmiO;S7iEH z8~}L+a8jGk%bw$&{-(uo=)@`JuG~mjMTHZ-`biIPTxK#lC&UXpF|;4OI$Uj19H*I` zv4PUEawmNC3gEZ_1e8EK8JHpGdm;GDdIphkz)Yg0q3Ko>8bBqmLp+J50gN5oms?C`%AGh{z|8m7IawTt z7IvhiBvn@BgY1%ch^C%Ap4f-poz0IqUS77|>Eb}frF-CFHd!w4wKjMC7&GV&(>b=s z^78rf%8e8hm$>24c8W-T5J&;=F*YU-xt(7p+|I3CuQm1A-28LQUXkgRBSR{H&1oq~ z1=R(D2qa&d-kj&Sy;}#<;&^4*I?fiAxaIK*fGt&jF)o|d9MI;s&U2hDC}h_1OgD)G zU_Y?8CV}JwYqbPwpRJhn9C?LB%v`pPyh7KVM74%$IYO6bwSS1t52=xekYLlZm9s^~ z%vidXyh7KlVB`TGrlllRUP&OkB|xINjJ9#nCOtl(!qXMiJ+t(?ON?;K_%yxGw3s!GtXLb&yW#yEV zl~H`Yj2(xMGJVM!PUgFMDXRcjRDEz-#g$6xZ9@gl?$NTi$f<%tUjJZ|KR#NP*c>w+ z1XK#Zd~~K+Q=k|~O-o5Cu8%+fHUV38`}sXv#MabTASJ+D`BUSclmK(nQj$s=A`pN~ zJ)`k!)&U!9`#@a+DFt3Zhu{5?)4X1BpaB4&BbOkUZG5EdBjSA0Hg!&>GpL!OT?B~Es!$cMf5H_H**;HJ!;>J zd#}6~Lc>&AQE9Ll!Wd29!K) zXr<*dz<53Nb znyo12zYv(I?cq3P0&g_-mlzg)nYr2~j$w{fFRfJqsXztM=4spboO!5Vm?ec)tvu%W z9Pq4&E=AkPC(IWcSXT7R>H~#JQPDcx-PlW|bSqP^xaO@lPMoUpBrl>v@^(-R{0^9m zN;b#o0;w94OqXevj+1zgv+^>|z)Qt{ym@9_r3{!JL6_O|2D_zgQ@wc;I}SBm1w4dG zfYw;UI%(4ny?rCQPQBa?jFy3vj=DCSLf};qhb<=@+IcK$o(!a(M3=g12>Ye&rpVX> ze-j8YkopI3FKUChK8D0x=wK0WA1V{w)=HFyj~;p#Fb=gEtScH_nXgf+vE!u8Y{&5N zn~??#1ztxL^VKMFQNhNcz+1lbw1xv3BO90iJPa(u3&9?j4MLa8AoLkbZcXqe9)~nc zC2EKHHeety7Pte5Y9hkON7Z9_3$<6)F~LQT!y2jp$N)9~cLToy`U7!(DvZ;pe9=WB z49Arz@;J2N3V@Z;c)fw20z-f{xc^L>3e-W8Yk+rwFLCg4gva5Hc~-nh7SLHlG92gu zv~Za)PNDL6SD;cg_fwAzOj;ndQ!dlIU8rq?-GISB0?-ABcA#ge5P|O&k!J$mBFAjF z1rP4ygj`#I*+6&THo1C8Hxv#8+5ElAWEPTx$|CC7h&RYz^B%y?Rg zN9iTP=>)VF!8DVrvCmwNI%oL23@WpwyZ8pRKC)Zl7=DrF;K6^$musI40K?^K1#|$e z67SMVgcK=Pn0T8&F2;o}NEcCtT3jrU>jdiPwqvLRsSn7%70TszCCvXn05YAWyu>|= QSpWb407*qoM6N<$f@i8kTmS$7 literal 0 HcmV?d00001 diff --git a/applvsdklib/src/main/res/drawable-xxhdpi/applivery_arrow_selected.png b/applvsdklib/src/main/res/drawable-xxhdpi/applivery_arrow_selected.png new file mode 100644 index 0000000000000000000000000000000000000000..4cf86f3d7109901b1be2df2fad1d411439259d97 GIT binary patch literal 4067 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 VrtUvL3b_CP002ovPDHLkV1juoe$M~^ literal 0 HcmV?d00001 diff --git a/applvsdklib/src/main/res/drawable-xxhdpi/applivery_close.png b/applvsdklib/src/main/res/drawable-xxhdpi/applivery_close.png new file mode 100644 index 0000000000000000000000000000000000000000..490ad7d12a55c87d1e61583cb5b67e6a66f13bba GIT binary patch literal 3406 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 literal 0 HcmV?d00001 diff --git a/applvsdklib/src/main/res/drawable-xxhdpi/applivery_icon.png b/applvsdklib/src/main/res/drawable-xxhdpi/applivery_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..48ddb790ea3f51e9d45be6bfe81e1781c334a6b8 GIT binary patch literal 9252 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 J^@=v({{xuNqbvXb literal 0 HcmV?d00001 diff --git a/applvsdklib/src/main/res/drawable-xxhdpi/applivery_plane.png b/applvsdklib/src/main/res/drawable-xxhdpi/applivery_plane.png new file mode 100644 index 0000000000000000000000000000000000000000..2eb4daf2ff9ff23b6175fd19b5787bfcd661ee84 GIT binary patch literal 6571 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 fKXP{ViUOLXAZ{T>xCQ8 zt9~*GC^$4QFfy@lU}G5cJ46=#(A2yA_@`E;-}KKfSLCgK9VYakZZ`*1mygnh{NUaQ dx!=ah_s;y)6Ef0T*9deRgQu&X%Q~loCIHi0Lq-4q literal 0 HcmV?d00001 diff --git a/applvsdklib/src/main/res/drawable-xxxhdpi/applivery_arrow.png b/applvsdklib/src/main/res/drawable-xxxhdpi/applivery_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..145c671ff6fce845517988776dc36c7f43dbd7a9 GIT binary patch literal 6468 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 Uk&qkwG5`Po07*qoM6N<$f}1g1qW}N^ literal 0 HcmV?d00001 diff --git a/applvsdklib/src/main/res/drawable-xxxhdpi/applivery_close.png b/applvsdklib/src/main/res/drawable-xxxhdpi/applivery_close.png new file mode 100644 index 0000000000000000000000000000000000000000..58c1678172d0da4eee71d9b78c3388f7fb300334 GIT binary patch literal 4213 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 LNkvXXu0mjfNDiiO literal 0 HcmV?d00001 diff --git a/applvsdklib/src/main/res/drawable-xxxhdpi/applivery_close_pressed.png b/applvsdklib/src/main/res/drawable-xxxhdpi/applivery_close_pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..660282a09a4b31e4c8f2abac18223331a69573ef GIT binary patch literal 7004 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

f|iMiqs#HLD6}pf|M_-C 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 KWoo3%!v6;W&~HTm literal 0 HcmV?d00001 diff --git a/applvsdklib/src/main/res/drawable-xxxhdpi/applivery_selected_tab_button.9.png b/applvsdklib/src/main/res/drawable-xxxhdpi/applivery_selected_tab_button.9.png new file mode 100755 index 0000000000000000000000000000000000000000..f88adeca5998bbe2f2c6d6371b164ba43404f3fa GIT binary patch literal 340 zcmeAS@N?(olHy`uVBq!ia0vp^T0oq}!3HGvMl$;_FfdAcx;TbZ#J#<iq&kmYV(1Mxz_}}e>3D8YLj9q*Pm3*zefI5{YqL4U$NuT#pZEJM z`9Ay#^2*FTz!{KsYz9Q+`o0g&chihC_VSz+7!?%g8vCPwE#`;8 zilZ~xLPG+j?WQt{+o@*CFI5!{z0$^?exQ}V`IdWTfUD@%hryBs4}&Lt18d8LYO9@s zPum48tNFW?w*R~LW$Co5MTRk1mNDym`FGu4)9$$Y@y?fy{=3&UFH(;WoMNmb5_-j! zEA_x(7RPJXHCC;7&3US!owKRL_Tq&5i_Y(F{Bd)=f&MvmMd3+8_n)fn1BMoZr>mdK II;Vst05jW&l>h($ literal 0 HcmV?d00001 diff --git a/applvsdklib/src/main/res/drawable/applivery_arrow_selector.xml b/applvsdklib/src/main/res/drawable/applivery_arrow_selector.xml new file mode 100644 index 0000000..0068496 --- /dev/null +++ b/applvsdklib/src/main/res/drawable/applivery_arrow_selector.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/applvsdklib/src/main/res/drawable/applivery_close_selector.xml b/applvsdklib/src/main/res/drawable/applivery_close_selector.xml new file mode 100644 index 0000000..c76a154 --- /dev/null +++ b/applvsdklib/src/main/res/drawable/applivery_close_selector.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/applvsdklib/src/main/res/drawable/applivery_plane_selector.xml b/applvsdklib/src/main/res/drawable/applivery_plane_selector.xml new file mode 100644 index 0000000..b1bc0c3 --- /dev/null +++ b/applvsdklib/src/main/res/drawable/applivery_plane_selector.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/applvsdklib/src/main/res/drawable/applivery_tab_button_selector.xml b/applvsdklib/src/main/res/drawable/applivery_tab_button_selector.xml new file mode 100644 index 0000000..07d97d0 --- /dev/null +++ b/applvsdklib/src/main/res/drawable/applivery_tab_button_selector.xml @@ -0,0 +1,27 @@ + + + + + + + + + \ No newline at end of file diff --git a/applvsdklib/src/main/res/layout/must_update.xml b/applvsdklib/src/main/res/layout/must_update.xml index 1e18242..0926ad7 100644 --- a/applvsdklib/src/main/res/layout/must_update.xml +++ b/applvsdklib/src/main/res/layout/must_update.xml @@ -15,29 +15,40 @@ ~ limitations under the License. --> - + + android:layout_height="@dimen/appliveryTitleHeight"> + + - \ No newline at end of file + \ No newline at end of file diff --git a/applvsdklib/src/main/res/layout/user_feedback.xml b/applvsdklib/src/main/res/layout/user_feedback.xml new file mode 100644 index 0000000..10f4364 --- /dev/null +++ b/applvsdklib/src/main/res/layout/user_feedback.xml @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/applvsdklib/src/main/res/values/colors.xml b/applvsdklib/src/main/res/values/colors.xml index ae2aa98..97cb182 100644 --- a/applvsdklib/src/main/res/values/colors.xml +++ b/applvsdklib/src/main/res/values/colors.xml @@ -16,6 +16,6 @@ --> - #719AB0 + #6494A5 #ffffff \ No newline at end of file diff --git a/applvsdklib/src/main/res/values/dimens.xml b/applvsdklib/src/main/res/values/dimens.xml index a305579..e4d4cb1 100644 --- a/applvsdklib/src/main/res/values/dimens.xml +++ b/applvsdklib/src/main/res/values/dimens.xml @@ -16,12 +16,27 @@ --> - 45dp + 20dp + 56dp + 45dp + 7dp + 10dp + 50dp + 16dp + 50dp + 20dp + 40dp + 16dp + 20dp + 20dp + 144dp + 96dp 16dp 16dp 20dp 20dp 20dp 10dp - + 5dp + 10dp \ No newline at end of file diff --git a/applvsdklib/src/main/res/values/strings.xml b/applvsdklib/src/main/res/values/strings.xml index e41c443..ed43a6e 100644 --- a/applvsdklib/src/main/res/values/strings.xml +++ b/applvsdklib/src/main/res/values/strings.xml @@ -41,4 +41,16 @@ Applivery error Aceptar + + Bug + Feedback + + Applivery Logo + Cancel feedback button + Continue with feedback button + Send feedback button + Screenshot feedback Image + + Attach screenshot + From 721fec7e2c9e68fb4f48897dae8f1948da36b009 Mon Sep 17 00:00:00 2001 From: fsergio101 Date: Sun, 10 Apr 2016 14:21:45 +0200 Subject: [PATCH 2/4] Added network support to feedback feature Added network support to feedback feature --- .../applivery/applvsdklib/AppliverySdk.java | 7 +-- .../appconfig/update/UpdateListenerImpl.java | 2 +- .../download/app/DownloadBuildInteractor.java | 2 - .../download/app}/DownloadStatusListener.java | 2 +- .../download/app}/ExternalStorageReader.java | 2 +- .../download/app}/ExternalStorageWriter.java | 2 +- .../ObtainBuildTokenInteractorCallback.java | 2 +- .../domain/feedback/FeedbackInteractor.java | 3 - .../applvsdklib/domain/model/Feedback.java | 8 +++ .../domain/model/FeedbackWrapper.java | 55 +++++++++++++++++++ .../domain/model/UserFeedback.java | 14 +++++ .../network/api/AppliveryApiService.java | 6 +- .../network/api/model/ApiDeviceData.java | 37 +++++++++++++ .../network/api/model/ApiDeviceInfoData.java | 35 ++++++++++++ .../network/api/model/ApiFeedbackData.java | 46 ++++++++++++++++ .../ApiOsData.java} | 16 ++++-- .../network/api/model/ApiPackageInfoData.java | 35 ++++++++++++ .../api/requests/DownloadBuildRequest.java | 2 + .../network/api/requests/FeedbackRequest.java | 24 ++++++-- .../mappers/ApiDeviceInfoRequestMapper.java | 48 ++++++++++++++++ .../mappers/ApiDeviceRequestMapper.java | 37 +++++++++++++ .../mappers/ApiFeedbackRequestMapper.java | 33 +++++++++-- .../requests/mappers/ApiOsRequestMapper.java | 35 ++++++++++++ .../mappers/ApiPackageInfoRequestMapper.java | 36 ++++++++++++ .../api/responses/ApiFeedbackResponse.java | 4 +- .../ApiFeedbackResponseData.java | 2 +- .../AndroidAppInstallerImpl.java | 2 +- .../AndroidExternalStorageReaderImpl.java | 2 +- .../AndroidExternalStorageWriterImpl.java | 4 +- .../views/feedback/UserFeedbackPresenter.java | 39 +++++++++++-- .../ui/views/feedback/UserFeedbackView.java | 10 +++- .../ui/views/update/MustUpdateViewImpl.java | 2 + .../api/mappers/ObtainBuildDownloadTest.java | 4 +- 33 files changed, 507 insertions(+), 51 deletions(-) rename applvsdklib/src/main/java/com/applivery/applvsdklib/{network/api/requests => domain/download/app}/DownloadStatusListener.java (94%) rename applvsdklib/src/main/java/com/applivery/applvsdklib/{network/api/requests => domain/download/app}/ExternalStorageReader.java (94%) rename applvsdklib/src/main/java/com/applivery/applvsdklib/{network/api/requests => domain/download/app}/ExternalStorageWriter.java (93%) create mode 100644 applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/model/ApiDeviceData.java create mode 100644 applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/model/ApiDeviceInfoData.java create mode 100644 applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/model/ApiFeedbackData.java rename applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/{requests/ApiFeedbackRequestData.java => model/ApiOsData.java} (60%) create mode 100644 applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/model/ApiPackageInfoData.java create mode 100644 applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/mappers/ApiDeviceInfoRequestMapper.java create mode 100644 applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/mappers/ApiDeviceRequestMapper.java create mode 100644 applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/mappers/ApiOsRequestMapper.java create mode 100644 applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/mappers/ApiPackageInfoRequestMapper.java rename applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/{model => responses}/ApiFeedbackResponseData.java (92%) diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/AppliverySdk.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/AppliverySdk.java index a72ed78..a2271e9 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/AppliverySdk.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/AppliverySdk.java @@ -224,18 +224,13 @@ public static void setUpdateCheckingTime(int updateCheckingTime) { public static void requestForUserFeedBack() { - FeedbackView feedbackView = UserFeedbackView.getInstance(); + FeedbackView feedbackView = UserFeedbackView.getInstance(appliveryApiService); if (feedbackView.isNotShowing()){ ScreenCapture screenCapture = ScreenCaptureUtils.getScreenCapture(getCurrentActivity()); feedbackView.setScreenCapture(screenCapture); feedbackView.show(); } - - - //Toast.makeText(applicationContext, "You shake your phone", Toast.LENGTH_SHORT).show(); - //Feedback feedback = new UserFeedback(); - //getExecutor().execute(FeedbackInteractor.getInstance(appliveryApiService, feedback)); } public static class Logger { diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/appconfig/update/UpdateListenerImpl.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/appconfig/update/UpdateListenerImpl.java index 81f73d4..36396e4 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/appconfig/update/UpdateListenerImpl.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/appconfig/update/UpdateListenerImpl.java @@ -23,7 +23,7 @@ import com.applivery.applvsdklib.domain.download.token.ObtainBuildTokenInteractorCallback; import com.applivery.applvsdklib.domain.model.AppConfig; import com.applivery.applvsdklib.network.api.AppliveryApiService; -import com.applivery.applvsdklib.network.api.requests.ExternalStorageReader; +import com.applivery.applvsdklib.domain.download.app.ExternalStorageReader; import com.applivery.applvsdklib.tools.androidimplementations.AndroidAppInstallerImpl; import com.applivery.applvsdklib.tools.androidimplementations.AndroidExternalStorageReaderImpl; import com.applivery.applvsdklib.ui.views.update.UpdateListener; diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/download/app/DownloadBuildInteractor.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/download/app/DownloadBuildInteractor.java index 1da3cc5..4a54905 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/download/app/DownloadBuildInteractor.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/download/app/DownloadBuildInteractor.java @@ -25,8 +25,6 @@ import com.applivery.applvsdklib.domain.model.ErrorObject; import com.applivery.applvsdklib.network.api.AppliveryApiService; import com.applivery.applvsdklib.network.api.requests.DownloadBuildRequest; -import com.applivery.applvsdklib.network.api.requests.DownloadStatusListener; -import com.applivery.applvsdklib.network.api.requests.ExternalStorageWriter; import com.applivery.applvsdklib.tools.androidimplementations.AndroidAppInstallerImpl; /** diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/DownloadStatusListener.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/download/app/DownloadStatusListener.java similarity index 94% rename from applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/DownloadStatusListener.java rename to applvsdklib/src/main/java/com/applivery/applvsdklib/domain/download/app/DownloadStatusListener.java index 07bffd5..2e0873d 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/DownloadStatusListener.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/download/app/DownloadStatusListener.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.applivery.applvsdklib.network.api.requests; +package com.applivery.applvsdklib.domain.download.app; import com.applivery.applvsdklib.domain.model.DownloadResult; diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/ExternalStorageReader.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/download/app/ExternalStorageReader.java similarity index 94% rename from applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/ExternalStorageReader.java rename to applvsdklib/src/main/java/com/applivery/applvsdklib/domain/download/app/ExternalStorageReader.java index b73180e..5e1cb71 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/ExternalStorageReader.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/download/app/ExternalStorageReader.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.applivery.applvsdklib.network.api.requests; +package com.applivery.applvsdklib.domain.download.app; import com.applivery.applvsdklib.tools.androidimplementations.AppPathReceiver; diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/ExternalStorageWriter.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/download/app/ExternalStorageWriter.java similarity index 93% rename from applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/ExternalStorageWriter.java rename to applvsdklib/src/main/java/com/applivery/applvsdklib/domain/download/app/ExternalStorageWriter.java index bbb72d3..032b3cb 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/ExternalStorageWriter.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/download/app/ExternalStorageWriter.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.applivery.applvsdklib.network.api.requests; +package com.applivery.applvsdklib.domain.download.app; import java.io.InputStream; diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/download/token/ObtainBuildTokenInteractorCallback.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/download/token/ObtainBuildTokenInteractorCallback.java index e2f3e2c..73f8b58 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/download/token/ObtainBuildTokenInteractorCallback.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/download/token/ObtainBuildTokenInteractorCallback.java @@ -23,7 +23,7 @@ import com.applivery.applvsdklib.domain.model.BuildTokenInfo; import com.applivery.applvsdklib.domain.model.ErrorObject; import com.applivery.applvsdklib.network.api.AppliveryApiService; -import com.applivery.applvsdklib.network.api.requests.ExternalStorageWriter; +import com.applivery.applvsdklib.domain.download.app.ExternalStorageWriter; import com.applivery.applvsdklib.tools.androidimplementations.AndroidExternalStorageWriterImpl; import com.applivery.applvsdklib.ui.views.ShowErrorAlert; import com.applivery.applvsdklib.ui.views.update.UpdateView; diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/feedback/FeedbackInteractor.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/feedback/FeedbackInteractor.java index 6c63178..a80b7ea 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/feedback/FeedbackInteractor.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/feedback/FeedbackInteractor.java @@ -16,7 +16,6 @@ package com.applivery.applvsdklib.domain.feedback; -import android.app.Activity; import com.applivery.applvsdklib.domain.BaseInteractor; import com.applivery.applvsdklib.domain.InteractorCallback; import com.applivery.applvsdklib.domain.model.BusinessObject; @@ -33,8 +32,6 @@ */ public class FeedbackInteractor extends BaseInteractor { - //TODO next release stuff - private final FeedbackRequest feedbackRequest; private final InteractorCallback feedbackCallback; private final FeedbackWrapper feedbackWrapper; diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/Feedback.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/Feedback.java index ec0c504..20f9185 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/Feedback.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/Feedback.java @@ -16,6 +16,8 @@ package com.applivery.applvsdklib.domain.model; +import com.applivery.applvsdklib.ui.model.ScreenCapture; + /** * Created by Sergio Martinez Rodriguez * Date 3/1/16. @@ -25,4 +27,10 @@ public interface Feedback { void attachScreenshot(boolean activated); + boolean mustAttachScreenshot(); + + void setMessage(String feedbackMessage); + + void setScreenCapture(ScreenCapture screenCapture); + } diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/FeedbackWrapper.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/FeedbackWrapper.java index a8ffa8a..7968d60 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/FeedbackWrapper.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/FeedbackWrapper.java @@ -21,6 +21,17 @@ * Date 3/1/16. */ public class FeedbackWrapper { + private String packageName; + private String appVersionName; + private String osName; + private String screenShotBase64; + private String feedBackMessage; + private String vendor; + private String model; + private String type; + private String appId; + private String bugType; + private String osVersion; //TODO next release stuff @@ -28,4 +39,48 @@ public static FeedbackWrapper createWrapper(Feedback feedback) { FeedbackWrapper feedbackWrapper = new FeedbackWrapper(); return feedbackWrapper; } + + public String getPackageName() { + return packageName; + } + + public String getAppVersionName() { + return appVersionName; + } + + public String getOsName() { + return osName; + } + + public String getScreenShotBase64() { + return screenShotBase64; + } + + public String getFeedBackMessage() { + return feedBackMessage; + } + + public String getVendor() { + return vendor; + } + + public String getModel() { + return model; + } + + public String getType() { + return type; + } + + public String getAppId() { + return appId; + } + + public String getBugType() { + return bugType; + } + + public String getOsVersion() { + return osVersion; + } } diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/UserFeedback.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/UserFeedback.java index ebf2d06..5aa3af2 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/UserFeedback.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/UserFeedback.java @@ -16,6 +16,8 @@ package com.applivery.applvsdklib.domain.model; +import com.applivery.applvsdklib.ui.model.ScreenCapture; + /** * Created by Sergio Martinez Rodriguez * Date 9/4/16. @@ -24,6 +26,8 @@ public class UserFeedback implements Feedback { private FeedBackType feedBackType; private boolean screenshotAttached; + private String feedbackMessage; + private ScreenCapture screenCapture; @Override public void setType(FeedBackType feedBackType) { this.feedBackType = feedBackType; @@ -33,5 +37,15 @@ public class UserFeedback implements Feedback { this.screenshotAttached = activated; } + @Override public boolean mustAttachScreenshot() { + return screenshotAttached; + } + @Override public void setMessage(String feedbackMessage) { + this.feedbackMessage = feedbackMessage; + } + + @Override public void setScreenCapture(ScreenCapture screenCapture) { + this.screenCapture = screenCapture; + } } diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/AppliveryApiService.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/AppliveryApiService.java index 6a5617e..f69b620 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/AppliveryApiService.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/AppliveryApiService.java @@ -16,7 +16,7 @@ package com.applivery.applvsdklib.network.api; -import com.applivery.applvsdklib.network.api.requests.ApiFeedbackRequestData; +import com.applivery.applvsdklib.network.api.model.ApiFeedbackData; import com.applivery.applvsdklib.network.api.responses.ApiAppConfigResponse; import com.applivery.applvsdklib.network.api.responses.ApiBuildTokenResponse; import com.applivery.applvsdklib.network.api.responses.ApiFeedbackResponse; @@ -43,8 +43,8 @@ public interface AppliveryApiService { @Streaming Call downloadBuild(@Path("build_id") String buildId, @Path("download_token") String download_token); - @POST("/api/bugs") - Call sendFeedback(@Body ApiFeedbackRequestData bugRequest); + @POST("/api/feedback") + Call sendFeedback(@Body ApiFeedbackData feedback); //TODO this will be implemented in second phase diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/model/ApiDeviceData.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/model/ApiDeviceData.java new file mode 100644 index 0000000..353ca0a --- /dev/null +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/model/ApiDeviceData.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2016 Applivery + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.applivery.applvsdklib.network.api.model; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +/** + * Created by Sergio Martinez Rodriguez + * Date 10/4/16. + */ +public class ApiDeviceData { + + @SerializedName("model") @Expose private final String model; + @SerializedName("vendor") @Expose private final String vendor; + @SerializedName("type") @Expose private final String type; + + public ApiDeviceData(String model, String vendor, String type) { + this.model = model; + this.vendor = vendor; + this.type = type; + } +} diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/model/ApiDeviceInfoData.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/model/ApiDeviceInfoData.java new file mode 100644 index 0000000..2281300 --- /dev/null +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/model/ApiDeviceInfoData.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2016 Applivery + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.applivery.applvsdklib.network.api.model; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +/** + * Created by Sergio Martinez Rodriguez + * Date 10/4/16. + */ +public class ApiDeviceInfoData { + + @SerializedName("device") @Expose private final ApiDeviceData device; + @SerializedName("os") @Expose private final ApiOsData os; + + public ApiDeviceInfoData(ApiDeviceData device, ApiOsData os) { + this.device = device; + this.os = os; + } +} diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/model/ApiFeedbackData.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/model/ApiFeedbackData.java new file mode 100644 index 0000000..f248c99 --- /dev/null +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/model/ApiFeedbackData.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2016 Applivery + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.applivery.applvsdklib.network.api.model; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +/** + * Created by Sergio Martinez Rodriguez + * Date 3/1/16. + */ +public class ApiFeedbackData { + + @SerializedName("app") @Expose private final String app; + @SerializedName("type") @Expose private final String type; + @SerializedName("message") @Expose private final String message; + + @SerializedName("packageInfo") @Expose private final ApiPackageInfoData packageInfo; + @SerializedName("deviceInfo") @Expose private final ApiDeviceInfoData deviceInfo; + + @SerializedName("screenshot") @Expose private final String screenshot; + + public ApiFeedbackData(String app, String type, String message, ApiPackageInfoData packageInfo, + ApiDeviceInfoData deviceInfo, String screenshot) { + this.app = app; + this.type = type; + this.message = message; + this.packageInfo = packageInfo; + this.deviceInfo = deviceInfo; + this.screenshot = screenshot; + } +} diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/ApiFeedbackRequestData.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/model/ApiOsData.java similarity index 60% rename from applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/ApiFeedbackRequestData.java rename to applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/model/ApiOsData.java index 3305b32..70ac6dd 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/ApiFeedbackRequestData.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/model/ApiOsData.java @@ -14,14 +14,22 @@ * limitations under the License. */ -package com.applivery.applvsdklib.network.api.requests; +package com.applivery.applvsdklib.network.api.model; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; /** * Created by Sergio Martinez Rodriguez - * Date 3/1/16. + * Date 10/4/16. */ -public class ApiFeedbackRequestData { +public class ApiOsData { - //TODO next release stuff + @SerializedName("name") @Expose private final String name; + @SerializedName("version") @Expose private final String version; + public ApiOsData(String name, String version) { + this.name = name; + this.version = version; + } } diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/model/ApiPackageInfoData.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/model/ApiPackageInfoData.java new file mode 100644 index 0000000..588be75 --- /dev/null +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/model/ApiPackageInfoData.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2016 Applivery + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.applivery.applvsdklib.network.api.model; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +/** + * Created by Sergio Martinez Rodriguez + * Date 10/4/16. + */ +public class ApiPackageInfoData { + + @SerializedName("name") @Expose private final String name; + @SerializedName("version") @Expose private final String version; + + public ApiPackageInfoData(String name, String version) { + this.name = name; + this.version = version; + } +} diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/DownloadBuildRequest.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/DownloadBuildRequest.java index 018e5f4..0c9af16 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/DownloadBuildRequest.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/DownloadBuildRequest.java @@ -17,6 +17,8 @@ package com.applivery.applvsdklib.network.api.requests; import com.applivery.applvsdklib.AppliverySdk; +import com.applivery.applvsdklib.domain.download.app.DownloadStatusListener; +import com.applivery.applvsdklib.domain.download.app.ExternalStorageWriter; import com.applivery.applvsdklib.network.api.AppliveryApiService; import com.applivery.applvsdklib.domain.model.BuildTokenInfo; import com.applivery.applvsdklib.domain.model.BusinessObject; diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/FeedbackRequest.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/FeedbackRequest.java index 455f334..b916f03 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/FeedbackRequest.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/FeedbackRequest.java @@ -20,7 +20,12 @@ import com.applivery.applvsdklib.domain.model.BusinessObject; import com.applivery.applvsdklib.domain.model.FeedbackResult; import com.applivery.applvsdklib.domain.model.FeedbackWrapper; +import com.applivery.applvsdklib.network.api.model.ApiFeedbackData; +import com.applivery.applvsdklib.network.api.requests.mappers.ApiDeviceInfoRequestMapper; +import com.applivery.applvsdklib.network.api.requests.mappers.ApiDeviceRequestMapper; import com.applivery.applvsdklib.network.api.requests.mappers.ApiFeedbackRequestMapper; +import com.applivery.applvsdklib.network.api.requests.mappers.ApiOsRequestMapper; +import com.applivery.applvsdklib.network.api.requests.mappers.ApiPackageInfoRequestMapper; import com.applivery.applvsdklib.network.api.responses.ApiFeedbackResponse; import retrofit2.Call; @@ -30,8 +35,6 @@ */ public class FeedbackRequest extends ServerRequest { - //TODO next release stuff - private final AppliveryApiService apiService; private final FeedbackWrapper feedbackWrapper; private final ApiFeedbackRequestMapper apiFeedbackRequestMapper; @@ -39,11 +42,24 @@ public class FeedbackRequest extends ServerRequest { public FeedbackRequest(AppliveryApiService apiService, FeedbackWrapper feedbackWrapper) { this.apiService = apiService; this.feedbackWrapper = feedbackWrapper; - this.apiFeedbackRequestMapper = new ApiFeedbackRequestMapper(); + this.apiFeedbackRequestMapper = createMappers(); + } + + private ApiFeedbackRequestMapper createMappers() { + + ApiOsRequestMapper apiOsRequestMapper = new ApiOsRequestMapper(); + ApiDeviceRequestMapper apiDeviceRequestMapper = new ApiDeviceRequestMapper(); + + ApiDeviceInfoRequestMapper apiDeviceInfoRequestMapper = + new ApiDeviceInfoRequestMapper(apiDeviceRequestMapper, apiOsRequestMapper); + + ApiPackageInfoRequestMapper apiPackageInfoRequestMapper = new ApiPackageInfoRequestMapper(); + + return new ApiFeedbackRequestMapper(apiPackageInfoRequestMapper, apiDeviceInfoRequestMapper); } @Override protected BusinessObject performRequest() { - ApiFeedbackRequestData apiFeedbackData = apiFeedbackRequestMapper.modelToData(feedbackWrapper); + ApiFeedbackData apiFeedbackData = apiFeedbackRequestMapper.modelToData(feedbackWrapper); Call response = apiService.sendFeedback(apiFeedbackData); ApiFeedbackResponse apiFeedbackResponse = super.performRequest(response); return new FeedbackResult(apiFeedbackResponse.getStatus()); diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/mappers/ApiDeviceInfoRequestMapper.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/mappers/ApiDeviceInfoRequestMapper.java new file mode 100644 index 0000000..092e450 --- /dev/null +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/mappers/ApiDeviceInfoRequestMapper.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2016 Applivery + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.applivery.applvsdklib.network.api.requests.mappers; + +import com.applivery.applvsdklib.domain.model.FeedbackWrapper; +import com.applivery.applvsdklib.network.api.model.ApiDeviceData; +import com.applivery.applvsdklib.network.api.model.ApiDeviceInfoData; +import com.applivery.applvsdklib.network.api.model.ApiOsData; + +/** + * Created by Sergio Martinez Rodriguez + * Date 10/4/16. + */ +public class ApiDeviceInfoRequestMapper implements RequestMapper{ + + private final ApiDeviceRequestMapper apiDeviceRequestMapper; + private final ApiOsRequestMapper apiOsRequestMapper; + + public ApiDeviceInfoRequestMapper(ApiDeviceRequestMapper apiDeviceRequestMapper, + ApiOsRequestMapper apiOsRequestMapper) { + this.apiDeviceRequestMapper = apiDeviceRequestMapper; + this.apiOsRequestMapper = apiOsRequestMapper; + } + + @Override public ApiDeviceInfoData modelToData(FeedbackWrapper feedbackWrapper) { + + ApiDeviceData apiDeviceData = apiDeviceRequestMapper.modelToData(feedbackWrapper); + ApiOsData apiOsData = apiOsRequestMapper.modelToData(feedbackWrapper); + + return new ApiDeviceInfoData(apiDeviceData, apiOsData); + } + + +} diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/mappers/ApiDeviceRequestMapper.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/mappers/ApiDeviceRequestMapper.java new file mode 100644 index 0000000..c39cd77 --- /dev/null +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/mappers/ApiDeviceRequestMapper.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2016 Applivery + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.applivery.applvsdklib.network.api.requests.mappers; + +import com.applivery.applvsdklib.domain.model.FeedbackWrapper; +import com.applivery.applvsdklib.network.api.model.ApiDeviceData; + +/** + * Created by Sergio Martinez Rodriguez + * Date 10/4/16. + */ +public class ApiDeviceRequestMapper implements RequestMapper{ + + @Override public ApiDeviceData modelToData(FeedbackWrapper feedbackWrapper) { + + String model = feedbackWrapper.getModel(); + String vendor = feedbackWrapper.getVendor(); + String type = feedbackWrapper.getType(); + + return new ApiDeviceData(model,vendor, type); + } + +} diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/mappers/ApiFeedbackRequestMapper.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/mappers/ApiFeedbackRequestMapper.java index 4843d22..f3bb163 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/mappers/ApiFeedbackRequestMapper.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/mappers/ApiFeedbackRequestMapper.java @@ -17,19 +17,40 @@ package com.applivery.applvsdklib.network.api.requests.mappers; import com.applivery.applvsdklib.domain.model.FeedbackWrapper; -import com.applivery.applvsdklib.network.api.requests.ApiFeedbackRequestData; +import com.applivery.applvsdklib.network.api.model.ApiDeviceInfoData; +import com.applivery.applvsdklib.network.api.model.ApiFeedbackData; +import com.applivery.applvsdklib.network.api.model.ApiPackageInfoData; /** * Created by Sergio Martinez Rodriguez * Date 3/1/16. */ public class ApiFeedbackRequestMapper - implements RequestMapper { + implements RequestMapper { + + private final ApiPackageInfoRequestMapper packageInfoMapper; + private final ApiDeviceInfoRequestMapper deviceInfoMapper; + + public ApiFeedbackRequestMapper(ApiPackageInfoRequestMapper packageInfoMapper, + ApiDeviceInfoRequestMapper deviceInfoMapper) { + this.packageInfoMapper = packageInfoMapper; + this.deviceInfoMapper = deviceInfoMapper; + } + + + @Override public ApiFeedbackData modelToData(FeedbackWrapper feedbackWrapper) { + + String app = feedbackWrapper.getAppId(); + String type = feedbackWrapper.getBugType(); + String meessage = feedbackWrapper.getFeedBackMessage(); + String screenShotBase64 = feedbackWrapper.getScreenShotBase64(); + + ApiPackageInfoData apiPackageInfoData = packageInfoMapper.modelToData(feedbackWrapper); + ApiDeviceInfoData apiDeviceInfoData = deviceInfoMapper.modelToData(feedbackWrapper); + + ApiFeedbackData apiFeedbackData = new ApiFeedbackData(app, type, meessage, apiPackageInfoData, + apiDeviceInfoData, screenShotBase64); - @Override public ApiFeedbackRequestData modelToData(FeedbackWrapper feedbackWrapper) { - ApiFeedbackRequestData apiFeedbackData = new ApiFeedbackRequestData(); - //TODO implement mapping of fields - //TODO next release stuff return apiFeedbackData; } } diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/mappers/ApiOsRequestMapper.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/mappers/ApiOsRequestMapper.java new file mode 100644 index 0000000..37fe6d5 --- /dev/null +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/mappers/ApiOsRequestMapper.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2016 Applivery + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.applivery.applvsdklib.network.api.requests.mappers; + +import com.applivery.applvsdklib.domain.model.FeedbackWrapper; +import com.applivery.applvsdklib.network.api.model.ApiOsData; + +/** + * Created by Sergio Martinez Rodriguez + * Date 10/4/16. + */ +public class ApiOsRequestMapper implements RequestMapper{ + + @Override public ApiOsData modelToData(FeedbackWrapper feedbackWrapper) { + + String name = feedbackWrapper.getOsName(); + String version = feedbackWrapper.getOsVersion(); + + return new ApiOsData(name, version); + } +} diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/mappers/ApiPackageInfoRequestMapper.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/mappers/ApiPackageInfoRequestMapper.java new file mode 100644 index 0000000..b2b84aa --- /dev/null +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/mappers/ApiPackageInfoRequestMapper.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2016 Applivery + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.applivery.applvsdklib.network.api.requests.mappers; + +import com.applivery.applvsdklib.domain.model.FeedbackWrapper; +import com.applivery.applvsdklib.network.api.model.ApiPackageInfoData; + +/** + * Created by Sergio Martinez Rodriguez + * Date 10/4/16. + */ +public class ApiPackageInfoRequestMapper implements RequestMapper{ + + @Override public ApiPackageInfoData modelToData(FeedbackWrapper feedbackWrapper) { + + String name = feedbackWrapper.getPackageName(); + String version = feedbackWrapper.getAppVersionName(); + + return new ApiPackageInfoData(name, version); + } + +} diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/responses/ApiFeedbackResponse.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/responses/ApiFeedbackResponse.java index 0c5f1f8..9e48969 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/responses/ApiFeedbackResponse.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/responses/ApiFeedbackResponse.java @@ -16,11 +16,11 @@ package com.applivery.applvsdklib.network.api.responses; -import com.applivery.applvsdklib.network.api.requests.ApiFeedbackRequestData; +import com.applivery.applvsdklib.network.api.model.ApiFeedbackData; /** * Created by Sergio Martinez Rodriguez * Date 2/1/16. */ -public class ApiFeedbackResponse extends ServerResponse { +public class ApiFeedbackResponse extends ServerResponse { } diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/model/ApiFeedbackResponseData.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/responses/ApiFeedbackResponseData.java similarity index 92% rename from applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/model/ApiFeedbackResponseData.java rename to applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/responses/ApiFeedbackResponseData.java index 88e0496..e503fd5 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/model/ApiFeedbackResponseData.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/responses/ApiFeedbackResponseData.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.applivery.applvsdklib.network.api.model; +package com.applivery.applvsdklib.network.api.responses; /** * Created by Sergio Martinez Rodriguez diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/AndroidAppInstallerImpl.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/AndroidAppInstallerImpl.java index 946170d..d1e435e 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/AndroidAppInstallerImpl.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/AndroidAppInstallerImpl.java @@ -20,7 +20,7 @@ import android.content.Intent; import android.net.Uri; import com.applivery.applvsdklib.domain.download.app.AppInstaller; -import com.applivery.applvsdklib.network.api.requests.ExternalStorageReader; +import com.applivery.applvsdklib.domain.download.app.ExternalStorageReader; /** * Created by Sergio Martinez Rodriguez diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/AndroidExternalStorageReaderImpl.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/AndroidExternalStorageReaderImpl.java index 0e3889d..926d588 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/AndroidExternalStorageReaderImpl.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/AndroidExternalStorageReaderImpl.java @@ -20,7 +20,7 @@ import android.support.annotation.NonNull; import com.applivery.applvsdklib.AppliverySdk; import com.applivery.applvsdklib.domain.download.permissions.ReadExternalPermission; -import com.applivery.applvsdklib.network.api.requests.ExternalStorageReader; +import com.applivery.applvsdklib.domain.download.app.ExternalStorageReader; import com.applivery.applvsdklib.tools.permissions.PermissionChecker; import com.applivery.applvsdklib.tools.permissions.UserPermissionRequestResponseListener; import java.io.File; diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/AndroidExternalStorageWriterImpl.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/AndroidExternalStorageWriterImpl.java index 4f50bb8..ecdf412 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/AndroidExternalStorageWriterImpl.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/AndroidExternalStorageWriterImpl.java @@ -20,8 +20,8 @@ import com.applivery.applvsdklib.AppliverySdk; import com.applivery.applvsdklib.domain.download.permissions.WriteExternalPermission; import com.applivery.applvsdklib.domain.model.DownloadResult; -import com.applivery.applvsdklib.network.api.requests.DownloadStatusListener; -import com.applivery.applvsdklib.network.api.requests.ExternalStorageWriter; +import com.applivery.applvsdklib.domain.download.app.DownloadStatusListener; +import com.applivery.applvsdklib.domain.download.app.ExternalStorageWriter; import com.applivery.applvsdklib.tools.permissions.PermissionChecker; import com.applivery.applvsdklib.tools.permissions.UserPermissionRequestResponseListener; import java.io.File; diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/ui/views/feedback/UserFeedbackPresenter.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/ui/views/feedback/UserFeedbackPresenter.java index 220231c..a666b37 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/ui/views/feedback/UserFeedbackPresenter.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/ui/views/feedback/UserFeedbackPresenter.java @@ -16,21 +16,27 @@ package com.applivery.applvsdklib.ui.views.feedback; -import android.widget.Toast; import com.applivery.applvsdklib.AppliverySdk; +import com.applivery.applvsdklib.domain.InteractorCallback; +import com.applivery.applvsdklib.domain.feedback.FeedbackInteractor; +import com.applivery.applvsdklib.domain.model.ErrorObject; import com.applivery.applvsdklib.domain.model.FeedBackType; import com.applivery.applvsdklib.domain.model.Feedback; +import com.applivery.applvsdklib.domain.model.FeedbackResult; import com.applivery.applvsdklib.domain.model.UserFeedback; +import com.applivery.applvsdklib.network.api.AppliveryApiService; import com.applivery.applvsdklib.ui.model.ScreenCapture; +import com.applivery.applvsdklib.ui.views.ShowErrorAlert; /** * Created by Sergio Martinez Rodriguez * Date 10/4/16. */ -public class UserFeedbackPresenter{ +public class UserFeedbackPresenter implements InteractorCallback{ - final FeedbackView feedbackView; - final Feedback feedback; + private final FeedbackView feedbackView; + private final Feedback feedback; + private AppliveryApiService appliveryApiService; private ScreenCapture screenCapture; public UserFeedbackPresenter(FeedbackView feedbackView) { @@ -38,6 +44,10 @@ public UserFeedbackPresenter(FeedbackView feedbackView) { this.feedback = new UserFeedback(); } + public void setAppliveryApiService(AppliveryApiService appliveryApiService) { + this.appliveryApiService = appliveryApiService; + } + public void cancelButtonPressed() { feedbackView.cleanScreenData(); feedbackView.dismissFeedBack(); @@ -79,7 +89,24 @@ public ScreenCapture getScreenCapture() { return screenCapture; } - public void sendFeedbackInfo(String s) { - Toast.makeText(AppliverySdk.getCurrentActivity(), "Feedback Ready", Toast.LENGTH_SHORT).show(); + public void sendFeedbackInfo(String feedbackMessage) { + feedback.setMessage(feedbackMessage); + + if (feedback.mustAttachScreenshot()){ + feedback.setScreenCapture(screenCapture); + } + + AppliverySdk.getExecutor().execute(FeedbackInteractor.getInstance(appliveryApiService, feedback)); + + } + + @Override public void onSuccess(FeedbackResult businessObject) { + feedbackView.cleanScreenData(); + feedbackView.dismissFeedBack(); + } + + @Override public void onError(ErrorObject error) { + ShowErrorAlert showErrorAlert = new ShowErrorAlert(); + showErrorAlert.showError(error); } } diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/ui/views/feedback/UserFeedbackView.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/ui/views/feedback/UserFeedbackView.java index 7a8a879..b75e19a 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/ui/views/feedback/UserFeedbackView.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/ui/views/feedback/UserFeedbackView.java @@ -32,8 +32,10 @@ import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.Switch; +import android.widget.Toast; import com.applivery.applvsdklib.AppliverySdk; import com.applivery.applvsdklib.R; +import com.applivery.applvsdklib.network.api.AppliveryApiService; import com.applivery.applvsdklib.ui.model.ScreenCapture; /** @@ -65,9 +67,10 @@ public UserFeedbackView(){ this.userFeedbackPresenter = new UserFeedbackPresenter(this); } - public static FeedbackView getInstance() { + public static FeedbackView getInstance(AppliveryApiService appliveryApiService) { if (userFeedbackView == null){ userFeedbackView = new UserFeedbackView(); + userFeedbackView.userFeedbackPresenter.setAppliveryApiService(appliveryApiService); } return userFeedbackView; @@ -205,7 +208,7 @@ public void show() { @Override public void cleanScreenData() { hideFormElements(); - screenShotSwitch.setSelected(true); + screenShotSwitch.setChecked(true); screenshot.setImageResource(android.R.color.transparent); feedbackImage.setImageResource(android.R.color.transparent); feedbackImage.setVisibility(View.VISIBLE); @@ -251,4 +254,5 @@ public void show() { return !getDialog().isShowing(); } } -} + +} \ No newline at end of file diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/ui/views/update/MustUpdateViewImpl.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/ui/views/update/MustUpdateViewImpl.java index 00457ca..b395c6c 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/ui/views/update/MustUpdateViewImpl.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/ui/views/update/MustUpdateViewImpl.java @@ -37,6 +37,8 @@ */ public class MustUpdateViewImpl extends Dialog implements UpdateView { + //TODO avoid dismiss dialog in rotation + private Button update; private ProgressBar progressBar; private TextView appName; diff --git a/applvsdklib/src/test/java/com/applivery/applvsdklib/network/api/mappers/ObtainBuildDownloadTest.java b/applvsdklib/src/test/java/com/applivery/applvsdklib/network/api/mappers/ObtainBuildDownloadTest.java index 24cd5f1..abee82e 100644 --- a/applvsdklib/src/test/java/com/applivery/applvsdklib/network/api/mappers/ObtainBuildDownloadTest.java +++ b/applvsdklib/src/test/java/com/applivery/applvsdklib/network/api/mappers/ObtainBuildDownloadTest.java @@ -21,8 +21,8 @@ import com.applivery.applvsdklib.domain.model.DownloadResult; import com.applivery.applvsdklib.network.api.AppliveryApiService; import com.applivery.applvsdklib.network.api.requests.DownloadBuildRequest; -import com.applivery.applvsdklib.network.api.requests.DownloadStatusListener; -import com.applivery.applvsdklib.network.api.requests.ExternalStorageWriter; +import com.applivery.applvsdklib.domain.download.app.DownloadStatusListener; +import com.applivery.applvsdklib.domain.download.app.ExternalStorageWriter; import com.applivery.applvsdklib.utils.MockAppliveryInstance; import java.io.IOException; import java.io.InputStream; From 99eac4e0c898c9c45cdcb0d3fc79ea2705831251 Mon Sep 17 00:00:00 2001 From: fsergio101 Date: Sun, 10 Apr 2016 15:07:27 +0200 Subject: [PATCH 3/4] Added deviceInfo Implementation details Added deviceInfo Implementation details --- .../applivery/applvsdklib/AppliverySdk.java | 10 +-- .../appconfig/update/CurrentAppInfo.java | 2 + .../domain/feedback/DeviceDetailsInfo.java | 34 +++++++++ .../domain/feedback/FeedbackInteractor.java | 19 +++-- .../domain/model/FeedBackType.java | 4 +- .../applvsdklib/domain/model/Feedback.java | 5 ++ .../domain/model/FeedbackWrapper.java | 69 +++++++++++++----- .../domain/model/UserFeedback.java | 12 ++++ .../AndroidCurrentAppInfo.java | 4 ++ .../AndroidDeviceDetailsInfo.java | 71 +++++++++++++++++++ .../applvsdklib/tools/utils/ImageUtils.java | 34 +++++++++ .../applvsdklib/ui/model/ScreenCapture.java | 5 ++ 12 files changed, 242 insertions(+), 27 deletions(-) create mode 100644 applvsdklib/src/main/java/com/applivery/applvsdklib/domain/feedback/DeviceDetailsInfo.java create mode 100644 applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/AndroidDeviceDetailsInfo.java create mode 100644 applvsdklib/src/main/java/com/applivery/applvsdklib/tools/utils/ImageUtils.java diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/AppliverySdk.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/AppliverySdk.java index a2271e9..76637ec 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/AppliverySdk.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/AppliverySdk.java @@ -23,11 +23,7 @@ import android.os.AsyncTask; import android.os.Build; import android.util.Log; -import android.widget.Toast; import com.applivery.applvsdklib.domain.exceptions.NotForegroundActivityAvailable; -import com.applivery.applvsdklib.domain.feedback.FeedbackInteractor; -import com.applivery.applvsdklib.domain.model.Feedback; -import com.applivery.applvsdklib.domain.model.UserFeedback; import com.applivery.applvsdklib.network.api.AppliveryApiService; import com.applivery.applvsdklib.network.api.AppliveryApiServiceBuilder; import com.applivery.applvsdklib.domain.appconfig.ObtainAppConfigInteractor; @@ -40,7 +36,6 @@ import com.applivery.applvsdklib.ui.model.ScreenCapture; import com.applivery.applvsdklib.ui.views.feedback.FeedbackView; import com.applivery.applvsdklib.ui.views.feedback.UserFeedbackView; -import com.applivery.applvsdklib.ui.views.update.MustUpdateViewImpl; import java.util.concurrent.*; /** @@ -139,6 +134,11 @@ private static void obtainAppConfig(boolean requestConfig) { } } + public static String getApplicationId(){ + Validate.sdkInitialized(); + return applicationId; + } + public static Executor getExecutor() { synchronized (LOCK) { if (AppliverySdk.executor == null) { diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/appconfig/update/CurrentAppInfo.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/appconfig/update/CurrentAppInfo.java index a4aef4b..52e9ae8 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/appconfig/update/CurrentAppInfo.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/appconfig/update/CurrentAppInfo.java @@ -22,4 +22,6 @@ */ public interface CurrentAppInfo { long getVersionCode(); + + String getPackageName(); } diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/feedback/DeviceDetailsInfo.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/feedback/DeviceDetailsInfo.java new file mode 100644 index 0000000..f7cc9b9 --- /dev/null +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/feedback/DeviceDetailsInfo.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2016 Applivery + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.applivery.applvsdklib.domain.feedback; + +/** + * Created by Sergio Martinez Rodriguez + * Date 10/1/16. + */ +public interface DeviceDetailsInfo { + + String getOsName(); + + String getVendor(); + + String getModel(); + + String getDeviceType(); + + String getOsversion(); +} diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/feedback/FeedbackInteractor.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/feedback/FeedbackInteractor.java index a80b7ea..3d5d5cf 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/feedback/FeedbackInteractor.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/feedback/FeedbackInteractor.java @@ -16,8 +16,10 @@ package com.applivery.applvsdklib.domain.feedback; +import com.applivery.applvsdklib.AppliverySdk; import com.applivery.applvsdklib.domain.BaseInteractor; import com.applivery.applvsdklib.domain.InteractorCallback; +import com.applivery.applvsdklib.domain.appconfig.update.CurrentAppInfo; import com.applivery.applvsdklib.domain.model.BusinessObject; import com.applivery.applvsdklib.domain.model.ErrorObject; import com.applivery.applvsdklib.domain.model.Feedback; @@ -25,6 +27,8 @@ import com.applivery.applvsdklib.domain.model.FeedbackWrapper; import com.applivery.applvsdklib.network.api.AppliveryApiService; import com.applivery.applvsdklib.network.api.requests.FeedbackRequest; +import com.applivery.applvsdklib.tools.androidimplementations.AndroidCurrentAppInfo; +import com.applivery.applvsdklib.tools.androidimplementations.AndroidDeviceDetailsInfo; /** * Created by Sergio Martinez Rodriguez @@ -36,8 +40,10 @@ public class FeedbackInteractor extends BaseInteractor { private final InteractorCallback feedbackCallback; private final FeedbackWrapper feedbackWrapper; - public FeedbackInteractor(AppliveryApiService appliveryApiService, Feedback feedback) { - this.feedbackWrapper = FeedbackWrapper.createWrapper(feedback); + public FeedbackInteractor(AppliveryApiService appliveryApiService, Feedback feedback, + CurrentAppInfo currentAppInfo, DeviceDetailsInfo deviceDetailsInfo) { + + this.feedbackWrapper = FeedbackWrapper.createWrapper(feedback, currentAppInfo, deviceDetailsInfo); this.feedbackRequest = new FeedbackRequest(appliveryApiService, feedbackWrapper); this.feedbackCallback = new FeedbackInteractorCallback(); } @@ -55,12 +61,17 @@ public FeedbackInteractor(AppliveryApiService appliveryApiService, Feedback feed } @Override protected BusinessObject performRequest() { - //TODO transform fee return feedbackRequest.execute(); } public static Runnable getInstance(AppliveryApiService service, Feedback feedback) { - FeedbackInteractor feedbackInteractor = new FeedbackInteractor(service, feedback); + + CurrentAppInfo currentAppInfo = new AndroidCurrentAppInfo(AppliverySdk.getApplicationContext()); + DeviceDetailsInfo deviceDetailsInfo = new AndroidDeviceDetailsInfo(); + + FeedbackInteractor feedbackInteractor = new FeedbackInteractor(service, feedback, + currentAppInfo, deviceDetailsInfo); + return feedbackInteractor; } } diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/FeedBackType.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/FeedBackType.java index 4e94243..a7ee795 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/FeedBackType.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/FeedBackType.java @@ -23,8 +23,8 @@ * Date 10/4/16. */ public enum FeedBackType implements StringValueEnum{ - FEEDBACK("FEEDBACK"), - BUG("BUG"); + FEEDBACK("feedback"), + BUG("bug"); private final String type; diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/Feedback.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/Feedback.java index 20f9185..ed9787f 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/Feedback.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/Feedback.java @@ -31,6 +31,11 @@ public interface Feedback { void setMessage(String feedbackMessage); + String getMessage(); + void setScreenCapture(ScreenCapture screenCapture); + String getBase64ScreenCapture(); + + FeedBackType getType(); } diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/FeedbackWrapper.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/FeedbackWrapper.java index 7968d60..faad5e1 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/FeedbackWrapper.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/FeedbackWrapper.java @@ -16,30 +16,67 @@ package com.applivery.applvsdklib.domain.model; +import com.applivery.applvsdklib.AppliverySdk; +import com.applivery.applvsdklib.domain.appconfig.update.CurrentAppInfo; +import com.applivery.applvsdklib.domain.feedback.DeviceDetailsInfo; + /** * Created by Sergio Martinez Rodriguez * Date 3/1/16. */ public class FeedbackWrapper { - private String packageName; - private String appVersionName; - private String osName; - private String screenShotBase64; - private String feedBackMessage; - private String vendor; - private String model; - private String type; - private String appId; - private String bugType; - private String osVersion; - - //TODO next release stuff - - public static FeedbackWrapper createWrapper(Feedback feedback) { - FeedbackWrapper feedbackWrapper = new FeedbackWrapper(); + + final private String packageName; + final private String appVersionName; + final private String osName; + final private String screenShotBase64; + final private String feedBackMessage; + final private String vendor; + final private String model; + final private String type; + final private String appId; + final private String bugType; + final private String osVersion; + + public FeedbackWrapper(String packageName, String appVersionName, String osName, + String screenShotBase64, String feedBackMessage, String vendor, String model, String type, + String appId, String bugType, String osVersion) { + + this.packageName = packageName; + this.appVersionName = appVersionName; + this.osName = osName; + this.screenShotBase64 = screenShotBase64; + this.feedBackMessage = feedBackMessage; + this.vendor = vendor; + this.model = model; + this.type = type; + this.appId = appId; + this.bugType = bugType; + this.osVersion = osVersion; + + } + + public static FeedbackWrapper createWrapper(Feedback feedback, CurrentAppInfo currentAppInfo, + DeviceDetailsInfo deviceDetailsInfo) { + + FeedbackWrapper feedbackWrapper = + new FeedbackWrapper( + currentAppInfo.getPackageName(), + String.valueOf(currentAppInfo.getVersionCode()), + deviceDetailsInfo.getOsName(), + feedback.getBase64ScreenCapture(), + feedback.getMessage(), + deviceDetailsInfo.getVendor(), + deviceDetailsInfo.getModel(), + deviceDetailsInfo.getDeviceType(), + AppliverySdk.getApplicationId(), + feedback.getType().getStringValue(), + deviceDetailsInfo.getOsversion()); + return feedbackWrapper; } + public String getPackageName() { return packageName; } diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/UserFeedback.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/UserFeedback.java index 5aa3af2..68ee6e8 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/UserFeedback.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/UserFeedback.java @@ -45,7 +45,19 @@ public class UserFeedback implements Feedback { this.feedbackMessage = feedbackMessage; } + @Override public String getMessage() { + return feedbackMessage; + } + @Override public void setScreenCapture(ScreenCapture screenCapture) { this.screenCapture = screenCapture; } + + @Override public String getBase64ScreenCapture() { + return screenCapture.getBase64(); + } + + @Override public FeedBackType getType() { + return feedBackType; + } } diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/AndroidCurrentAppInfo.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/AndroidCurrentAppInfo.java index 65d53b7..f27cffe 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/AndroidCurrentAppInfo.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/AndroidCurrentAppInfo.java @@ -42,6 +42,10 @@ public AndroidCurrentAppInfo(Context context) { } } + @Override public String getPackageName() { + return context.getPackageName(); + } + public String getVersionName() { try { PackageInfo pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/AndroidDeviceDetailsInfo.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/AndroidDeviceDetailsInfo.java new file mode 100644 index 0000000..6c32901 --- /dev/null +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/androidimplementations/AndroidDeviceDetailsInfo.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2016 Applivery + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.applivery.applvsdklib.tools.androidimplementations; + +import android.content.Context; +import android.content.res.Configuration; +import android.os.Build; +import com.applivery.applvsdklib.AppliverySdk; +import com.applivery.applvsdklib.domain.feedback.DeviceDetailsInfo; + +/** + * Created by Sergio Martinez Rodriguez + * Date 10/4/16. + */ +public class AndroidDeviceDetailsInfo implements DeviceDetailsInfo { + + private static final String ANDROID = "Android"; + private static final String TABLET = "tablet"; + private static final String MOBILE = "mobile"; + + + @Override public String getOsName() { + return ANDROID; + } + + @Override public String getVendor() { + return Build.MANUFACTURER; + } + + @Override public String getModel() { + String model = Build.MODEL; + if (model.contains(Build.MANUFACTURER+" ")){ + return model.replace(Build.MANUFACTURER+" ", ""); + } else { + return model; + } + } + + @Override public String getDeviceType() { + Context context = AppliverySdk.getApplicationContext(); + + boolean isTablet = false; + + isTablet = (context.getResources().getConfiguration().screenLayout + & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE; + + if (isTablet){ + return TABLET; + } else{ + return MOBILE; + } + } + + @Override public String getOsversion() { + return Build.VERSION.RELEASE; + } +} diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/utils/ImageUtils.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/utils/ImageUtils.java new file mode 100644 index 0000000..279bc39 --- /dev/null +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/tools/utils/ImageUtils.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2016 Applivery + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.applivery.applvsdklib.tools.utils; + +import android.graphics.Bitmap; +import android.util.Base64; +import java.io.ByteArrayOutputStream; + +/** + * Created by Sergio Martinez Rodriguez + * Date 10/4/16. + */ +public class ImageUtils { + public static String getBase64(Bitmap screenShot) { + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + screenShot.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream); + byte[] byteArray = byteArrayOutputStream .toByteArray(); + return Base64.encodeToString(byteArray, Base64.DEFAULT); + } +} diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/ui/model/ScreenCapture.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/ui/model/ScreenCapture.java index 34e9c12..0e4d3da 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/ui/model/ScreenCapture.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/ui/model/ScreenCapture.java @@ -17,6 +17,7 @@ package com.applivery.applvsdklib.ui.model; import android.graphics.Bitmap; +import com.applivery.applvsdklib.tools.utils.ImageUtils; /** * Created by Sergio Martinez Rodriguez @@ -33,4 +34,8 @@ public ScreenCapture(Bitmap screenShot) { public Bitmap getScreenShot() { return screenShot; } + + public String getBase64() { + return ImageUtils.getBase64(screenShot); + } } From 72f3a67d4f741c98510d6e6a201331ffe85d14b0 Mon Sep 17 00:00:00 2001 From: fsergio101 Date: Sun, 10 Apr 2016 17:22:52 +0200 Subject: [PATCH 4/4] feedback response management feedback response management --- .../applvsdklib/domain/BaseInteractor.java | 5 ++ .../domain/feedback/FeedbackInteractor.java | 11 ++-- .../applvsdklib/domain/model/ErrorObject.java | 6 ++ .../domain/model/UserFeedback.java | 9 ++- .../network/api/requests/FeedbackRequest.java | 7 +- .../network/api/requests/ServerRequest.java | 3 +- .../mappers/ApiFeedbackResponseMapper.java | 66 +++++++++++++++++++ .../api/responses/ApiFeedbackResponse.java | 4 +- .../views/feedback/UserFeedbackPresenter.java | 5 +- 9 files changed, 103 insertions(+), 13 deletions(-) create mode 100644 applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/mappers/ApiFeedbackResponseMapper.java diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/BaseInteractor.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/BaseInteractor.java index 51b49f5..a4c8188 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/BaseInteractor.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/BaseInteractor.java @@ -52,6 +52,11 @@ protected void receivedResponse(BusinessObject obj, Class responseClass) { @Override public void run() { Message message = new Message(); message.obj = performRequest(); + + if (message.obj == null){ + message.obj = new ErrorObject(); + } + handler.sendMessage(message); } diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/feedback/FeedbackInteractor.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/feedback/FeedbackInteractor.java index 3d5d5cf..901b95d 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/feedback/FeedbackInteractor.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/feedback/FeedbackInteractor.java @@ -29,6 +29,7 @@ import com.applivery.applvsdklib.network.api.requests.FeedbackRequest; import com.applivery.applvsdklib.tools.androidimplementations.AndroidCurrentAppInfo; import com.applivery.applvsdklib.tools.androidimplementations.AndroidDeviceDetailsInfo; +import com.applivery.applvsdklib.ui.views.feedback.UserFeedbackPresenter; /** * Created by Sergio Martinez Rodriguez @@ -41,11 +42,12 @@ public class FeedbackInteractor extends BaseInteractor { private final FeedbackWrapper feedbackWrapper; public FeedbackInteractor(AppliveryApiService appliveryApiService, Feedback feedback, - CurrentAppInfo currentAppInfo, DeviceDetailsInfo deviceDetailsInfo) { + CurrentAppInfo currentAppInfo, DeviceDetailsInfo deviceDetailsInfo, + InteractorCallback interactorCallback) { this.feedbackWrapper = FeedbackWrapper.createWrapper(feedback, currentAppInfo, deviceDetailsInfo); this.feedbackRequest = new FeedbackRequest(appliveryApiService, feedbackWrapper); - this.feedbackCallback = new FeedbackInteractorCallback(); + this.feedbackCallback = interactorCallback; } @Override protected void receivedResponse(BusinessObject result) { @@ -64,13 +66,14 @@ public FeedbackInteractor(AppliveryApiService appliveryApiService, Feedback feed return feedbackRequest.execute(); } - public static Runnable getInstance(AppliveryApiService service, Feedback feedback) { + public static Runnable getInstance(AppliveryApiService service, Feedback feedback, UserFeedbackPresenter + userFeedbackPresenter) { CurrentAppInfo currentAppInfo = new AndroidCurrentAppInfo(AppliverySdk.getApplicationContext()); DeviceDetailsInfo deviceDetailsInfo = new AndroidDeviceDetailsInfo(); FeedbackInteractor feedbackInteractor = new FeedbackInteractor(service, feedback, - currentAppInfo, deviceDetailsInfo); + currentAppInfo, deviceDetailsInfo, userFeedbackPresenter); return feedbackInteractor; } diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/ErrorObject.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/ErrorObject.java index 1eb4426..d7e5190 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/ErrorObject.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/ErrorObject.java @@ -34,6 +34,12 @@ public ErrorObject(ApiAppliveryServerErrorResponse serverResponse) { isBusinessError = serverResponse.isBusinessError(); } + public ErrorObject() { + businessCode = -99; + message = "Unknown Error"; + isBusinessError = false; + } + @Override public ErrorObject getObject() { return this; } diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/UserFeedback.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/UserFeedback.java index 68ee6e8..706a220 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/UserFeedback.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/domain/model/UserFeedback.java @@ -25,7 +25,7 @@ public class UserFeedback implements Feedback { private FeedBackType feedBackType; - private boolean screenshotAttached; + private boolean screenshotAttached = true; private String feedbackMessage; private ScreenCapture screenCapture; @@ -54,7 +54,12 @@ public class UserFeedback implements Feedback { } @Override public String getBase64ScreenCapture() { - return screenCapture.getBase64(); + if (screenCapture!=null){ + return screenCapture.getBase64(); + }else{ + return null; + } + } @Override public FeedBackType getType() { diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/FeedbackRequest.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/FeedbackRequest.java index b916f03..95cda88 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/FeedbackRequest.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/FeedbackRequest.java @@ -16,9 +16,9 @@ package com.applivery.applvsdklib.network.api.requests; +import com.applivery.applvsdklib.network.api.requests.mappers.ApiFeedbackResponseMapper; import com.applivery.applvsdklib.network.api.AppliveryApiService; import com.applivery.applvsdklib.domain.model.BusinessObject; -import com.applivery.applvsdklib.domain.model.FeedbackResult; import com.applivery.applvsdklib.domain.model.FeedbackWrapper; import com.applivery.applvsdklib.network.api.model.ApiFeedbackData; import com.applivery.applvsdklib.network.api.requests.mappers.ApiDeviceInfoRequestMapper; @@ -38,10 +38,12 @@ public class FeedbackRequest extends ServerRequest { private final AppliveryApiService apiService; private final FeedbackWrapper feedbackWrapper; private final ApiFeedbackRequestMapper apiFeedbackRequestMapper; + private final ApiFeedbackResponseMapper apiFeedbackResponseMapper; public FeedbackRequest(AppliveryApiService apiService, FeedbackWrapper feedbackWrapper) { this.apiService = apiService; this.feedbackWrapper = feedbackWrapper; + this.apiFeedbackResponseMapper = new ApiFeedbackResponseMapper(); this.apiFeedbackRequestMapper = createMappers(); } @@ -62,7 +64,8 @@ private ApiFeedbackRequestMapper createMappers() { ApiFeedbackData apiFeedbackData = apiFeedbackRequestMapper.modelToData(feedbackWrapper); Call response = apiService.sendFeedback(apiFeedbackData); ApiFeedbackResponse apiFeedbackResponse = super.performRequest(response); - return new FeedbackResult(apiFeedbackResponse.getStatus()); + BusinessObject businessObject = apiFeedbackResponseMapper.map(apiFeedbackResponse); + return businessObject; } } diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/ServerRequest.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/ServerRequest.java index 94cc146..33f15c1 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/ServerRequest.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/ServerRequest.java @@ -28,7 +28,8 @@ public abstract class ServerRequest { public final BusinessObject execute() { try { - return performRequest(); + BusinessObject businessObject = performRequest(); + return businessObject; }catch (RequestHttpException re){ return new ErrorObject(re.getServerResponse().getError()); } diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/mappers/ApiFeedbackResponseMapper.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/mappers/ApiFeedbackResponseMapper.java new file mode 100644 index 0000000..c8fc7ff --- /dev/null +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/requests/mappers/ApiFeedbackResponseMapper.java @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2016 Applivery + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.applivery.applvsdklib.network.api.requests.mappers; + +import com.applivery.applvsdklib.domain.model.BusinessObject; +import com.applivery.applvsdklib.domain.model.FeedbackResult; +import com.applivery.applvsdklib.network.api.responses.ApiFeedbackResponse; + +/** + * Created by Sergio Martinez Rodriguez + * Date 10/4/16. + */ +public class ApiFeedbackResponseMapper extends BaseMapper { + + public ApiFeedbackResponseMapper() { + } + + public BusinessObject map(ApiFeedbackResponse apiFeedbackResponse) { + return super.map(apiFeedbackResponse); + } + + @Override protected FeedbackResult mapBusinessObject(Object serverResponse) { + FeedbackResult feedbackResult = new FeedbackResult(true); + return feedbackResult; + } + + //@Override protected AppConfig mapBusinessObject(ApiAppConfigData apiAppConfigData) { + // + // AppConfig appConfig = new AppConfig(); + // + // appConfig.setBuildsCount(apiAppConfigData.getBuildsCount()); + // + // appConfig.setCreated(DateUtils.stringToDateWithFormat(apiAppConfigData.getCreated(), + // DateFormatConstants.DATE_FORMAT)); + // + // appConfig.setModified(DateUtils.stringToDateWithFormat(apiAppConfigData.getModified(), + // DateFormatConstants.DATE_FORMAT)); + // + // appConfig.setDescription(apiAppConfigData.getDescription()); + // appConfig.setId(apiAppConfigData.getId()); + // appConfig.setName(apiAppConfigData.getName()); + // appConfig.setTotalDownloads(apiAppConfigData.getTotalDownloads()); + // appConfig.setCrashesCount(apiAppConfigData.getCrashesCount()); + // appConfig.setFeedBackCount(apiAppConfigData.getFeedbackCount()); + // appConfig.setSitesCount(apiAppConfigData.getSitesCount()); + // appConfig.setSo(apiAppConfigData.getSo()); + // appConfig.setTotalDownloads(apiAppConfigData.getTotalDownloads()); + // appConfig.setSdk(sdkMapper.dataToModel(apiAppConfigData.getSdk())); + // + // return appConfig; + //} +} diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/responses/ApiFeedbackResponse.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/responses/ApiFeedbackResponse.java index 9e48969..cfedf35 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/responses/ApiFeedbackResponse.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/network/api/responses/ApiFeedbackResponse.java @@ -16,11 +16,9 @@ package com.applivery.applvsdklib.network.api.responses; -import com.applivery.applvsdklib.network.api.model.ApiFeedbackData; - /** * Created by Sergio Martinez Rodriguez * Date 2/1/16. */ -public class ApiFeedbackResponse extends ServerResponse { +public class ApiFeedbackResponse extends ServerResponse { } diff --git a/applvsdklib/src/main/java/com/applivery/applvsdklib/ui/views/feedback/UserFeedbackPresenter.java b/applvsdklib/src/main/java/com/applivery/applvsdklib/ui/views/feedback/UserFeedbackPresenter.java index a666b37..f3c991f 100644 --- a/applvsdklib/src/main/java/com/applivery/applvsdklib/ui/views/feedback/UserFeedbackPresenter.java +++ b/applvsdklib/src/main/java/com/applivery/applvsdklib/ui/views/feedback/UserFeedbackPresenter.java @@ -94,9 +94,12 @@ public void sendFeedbackInfo(String feedbackMessage) { if (feedback.mustAttachScreenshot()){ feedback.setScreenCapture(screenCapture); + }else{ + feedback.setScreenCapture(null); } - AppliverySdk.getExecutor().execute(FeedbackInteractor.getInstance(appliveryApiService, feedback)); + AppliverySdk.getExecutor().execute(FeedbackInteractor.getInstance(appliveryApiService, + feedback, this)); }