├── settings.gradle ├── app ├── src │ ├── main │ │ ├── res │ │ │ ├── values │ │ │ │ ├── strings.xml │ │ │ │ ├── colors.xml │ │ │ │ └── styles.xml │ │ │ ├── drawable-hdpi │ │ │ │ ├── ic_zoom.png │ │ │ │ └── ic_screenshot.png │ │ │ ├── drawable-mdpi │ │ │ │ ├── ic_zoom.png │ │ │ │ └── ic_screenshot.png │ │ │ ├── drawable-xhdpi │ │ │ │ ├── ic_zoom.png │ │ │ │ └── ic_screenshot.png │ │ │ ├── drawable-xxhdpi │ │ │ │ ├── ic_zoom.png │ │ │ │ └── ic_screenshot.png │ │ │ ├── drawable-xxxhdpi │ │ │ │ ├── ic_zoom.png │ │ │ │ └── ic_screenshot.png │ │ │ ├── mipmap-hdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-mdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ ├── ic_launcher.xml │ │ │ │ └── ic_launcher_round.xml │ │ │ ├── layout │ │ │ │ └── activity_main.xml │ │ │ ├── drawable-v24 │ │ │ │ └── ic_launcher_foreground.xml │ │ │ └── drawable │ │ │ │ └── ic_launcher_background.xml │ │ ├── java │ │ │ └── com │ │ │ │ └── zoomx │ │ │ │ └── example │ │ │ │ ├── model │ │ │ │ └── User.java │ │ │ │ ├── BaseApplication.java │ │ │ │ ├── retrofit │ │ │ │ ├── ApiService.java │ │ │ │ └── NetworkManager.java │ │ │ │ └── MainActivity.java │ │ └── AndroidManifest.xml │ ├── test │ │ └── java │ │ │ └── com │ │ │ └── zoomx │ │ │ └── example │ │ │ └── ExampleUnitTest.java │ └── androidTest │ │ └── java │ │ └── com │ │ └── zoomx │ │ └── example │ │ └── ExampleInstrumentedTest.java ├── proguard-rules.pro └── build.gradle ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── zoomx ├── src │ ├── main │ │ ├── res │ │ │ ├── drawable-hdpi │ │ │ │ ├── ic_screenshot.png │ │ │ │ ├── ic_view_list.png │ │ │ │ ├── ic_action_share.png │ │ │ │ ├── ic_delete_forever.png │ │ │ │ ├── ic_feature_collapse.png │ │ │ │ └── ic_feature_settings.png │ │ │ ├── drawable-mdpi │ │ │ │ ├── ic_screenshot.png │ │ │ │ ├── ic_view_list.png │ │ │ │ ├── ic_action_share.png │ │ │ │ ├── ic_delete_forever.png │ │ │ │ ├── ic_feature_collapse.png │ │ │ │ ├── ic_feature_settings.png │ │ │ │ ├── ic_file_download_black_24dp.xml │ │ │ │ └── ic_screenshot_24dp.xml │ │ │ ├── drawable-xhdpi │ │ │ │ ├── ic_screenshot.png │ │ │ │ ├── ic_view_list.png │ │ │ │ ├── ic_action_share.png │ │ │ │ ├── ic_delete_forever.png │ │ │ │ ├── ic_feature_collapse.png │ │ │ │ └── ic_feature_settings.png │ │ │ ├── drawable-xxhdpi │ │ │ │ ├── ic_view_list.png │ │ │ │ ├── ic_screenshot.png │ │ │ │ ├── ic_action_share.png │ │ │ │ ├── ic_delete_forever.png │ │ │ │ ├── ic_feature_collapse.png │ │ │ │ └── ic_feature_settings.png │ │ │ ├── drawable-xxxhdpi │ │ │ │ ├── ic_screenshot.png │ │ │ │ ├── ic_view_list.png │ │ │ │ ├── ic_delete_forever.png │ │ │ │ ├── ic_feature_collapse.png │ │ │ │ └── ic_feature_settings.png │ │ │ ├── xml │ │ │ │ ├── searchable.xml │ │ │ │ └── file_provider_paths.xml │ │ │ ├── drawable │ │ │ │ ├── menu_main_btn.xml │ │ │ │ ├── row_selector.xml │ │ │ │ ├── ic_swap_vert_black_24dp.xml │ │ │ │ ├── ic_delete_black_24dp.xml │ │ │ │ ├── ic_request_details_arrow.xml │ │ │ │ ├── ic_feature_info.xml │ │ │ │ └── ic_settings_black_24dp.xml │ │ │ ├── menu │ │ │ │ ├── menu_requests_details.xml │ │ │ │ └── menu_request_list.xml │ │ │ ├── layout │ │ │ │ ├── view_menu_close.xml │ │ │ │ ├── request_list_fragment.xml │ │ │ │ ├── view_info_section.xml │ │ │ │ ├── activity_request_details.xml │ │ │ │ ├── activity_info.xml │ │ │ │ ├── request_activity_layout.xml │ │ │ │ ├── zoomx_ui_options_checkboxes.xml │ │ │ │ ├── info_text_view.xml │ │ │ │ ├── screenshot_viewer.xml │ │ │ │ ├── info_fragment.xml │ │ │ │ ├── request_details_item_row.xml │ │ │ │ ├── activity_body.xml │ │ │ │ ├── request_item_row.xml │ │ │ │ ├── activity_settings.xml │ │ │ │ ├── view_main_actions_menu.xml │ │ │ │ └── request_details_fragment.xml │ │ │ └── values │ │ │ │ ├── colors.xml │ │ │ │ ├── styles.xml │ │ │ │ └── strings.xml │ │ ├── java │ │ │ └── com │ │ │ │ └── zoomx │ │ │ │ └── zoomx │ │ │ │ ├── util │ │ │ │ ├── ZoomxFileProvider.java │ │ │ │ ├── constants │ │ │ │ │ └── PrefConstants.kt │ │ │ │ ├── ErrorConstants.java │ │ │ │ ├── ServiceUtils.java │ │ │ │ ├── ColorUtils.java │ │ │ │ ├── FileUtils.kt │ │ │ │ ├── FormatUtil.java │ │ │ │ ├── SharedPreferenceManager.java │ │ │ │ ├── ShakeEventManager.java │ │ │ │ └── PhoneUtils.java │ │ │ │ ├── ui │ │ │ │ ├── ZoomxUIOption.java │ │ │ │ ├── notification │ │ │ │ │ ├── ClearLogsIntentService.kt │ │ │ │ │ ├── ScreenshotViewerActivity.kt │ │ │ │ │ ├── ZoomxNotification.kt │ │ │ │ │ └── ScreenShotActivity.kt │ │ │ │ ├── requestdetails │ │ │ │ │ ├── RequestDetailsViewModel.java │ │ │ │ │ ├── RequestDetailsActivity.java │ │ │ │ │ ├── RequestDetailsAdapter.java │ │ │ │ │ ├── RequestDetailsViewHolder.java │ │ │ │ │ ├── JsonViewActivity.java │ │ │ │ │ └── RequestDetailsFragment.java │ │ │ │ ├── menu │ │ │ │ │ ├── MenuCloseView.java │ │ │ │ │ ├── ZoomxMenuService.java │ │ │ │ │ └── MainActionMenu.java │ │ │ │ ├── info │ │ │ │ │ ├── InfoActivity.java │ │ │ │ │ ├── InfoSectionView.java │ │ │ │ │ └── InfoFragment.java │ │ │ │ ├── requestlist │ │ │ │ │ ├── RequestActivity.java │ │ │ │ │ ├── RequestListViewModel.java │ │ │ │ │ ├── RequestViewHolder.java │ │ │ │ │ ├── RequestAdapter.java │ │ │ │ │ └── RequestListFragment.java │ │ │ │ └── settings │ │ │ │ │ ├── SettingsManager.kt │ │ │ │ │ └── SettingActivity.kt │ │ │ │ ├── db │ │ │ │ ├── converters │ │ │ │ │ ├── DateConverter.java │ │ │ │ │ └── HeaderConverter.java │ │ │ │ ├── RequestDao.java │ │ │ │ └── AppDatabase.java │ │ │ │ ├── model │ │ │ │ ├── HeaderViewModel.java │ │ │ │ ├── InfoModel.java │ │ │ │ └── RequestEntity.java │ │ │ │ ├── networklogger │ │ │ │ ├── ZoomXLogManager.kt │ │ │ │ └── ZoomXLoggerInterceptor.java │ │ │ │ └── config │ │ │ │ ├── Config.kt │ │ │ │ └── ZoomX.java │ │ └── AndroidManifest.xml │ ├── test │ │ └── java │ │ │ └── com │ │ │ └── zoomx │ │ │ └── zoomx │ │ │ └── ExampleUnitTest.java │ └── androidTest │ │ └── java │ │ └── com │ │ └── zoomx │ │ └── zoomx │ │ └── ExampleInstrumentedTest.java ├── proguard-rules.pro └── build.gradle ├── gradle.properties ├── .gitignore ├── LICENSE ├── gradlew.bat ├── README.md └── gradlew /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app', ':zoomx' 2 | -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Zoomx 3 | 4 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_zoom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/app/src/main/res/drawable-hdpi/ic_zoom.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_zoom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/app/src/main/res/drawable-mdpi/ic_zoom.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_zoom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/app/src/main/res/drawable-xhdpi/ic_zoom.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_zoom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/app/src/main/res/drawable-xxhdpi/ic_zoom.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_zoom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/app/src/main/res/drawable-xxxhdpi/ic_zoom.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/app/src/main/res/drawable-hdpi/ic_screenshot.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/app/src/main/res/drawable-mdpi/ic_screenshot.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/app/src/main/res/drawable-xhdpi/ic_screenshot.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/app/src/main/res/drawable-xxhdpi/ic_screenshot.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/app/src/main/res/drawable-xxxhdpi/ic_screenshot.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable-hdpi/ic_screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/zoomx/src/main/res/drawable-hdpi/ic_screenshot.png -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable-hdpi/ic_view_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/zoomx/src/main/res/drawable-hdpi/ic_view_list.png -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable-mdpi/ic_screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/zoomx/src/main/res/drawable-mdpi/ic_screenshot.png -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable-mdpi/ic_view_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/zoomx/src/main/res/drawable-mdpi/ic_view_list.png -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable-xhdpi/ic_screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/zoomx/src/main/res/drawable-xhdpi/ic_screenshot.png -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable-xhdpi/ic_view_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/zoomx/src/main/res/drawable-xhdpi/ic_view_list.png -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable-xxhdpi/ic_view_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/zoomx/src/main/res/drawable-xxhdpi/ic_view_list.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable-hdpi/ic_action_share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/zoomx/src/main/res/drawable-hdpi/ic_action_share.png -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable-mdpi/ic_action_share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/zoomx/src/main/res/drawable-mdpi/ic_action_share.png -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable-xhdpi/ic_action_share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/zoomx/src/main/res/drawable-xhdpi/ic_action_share.png -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable-xxhdpi/ic_screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/zoomx/src/main/res/drawable-xxhdpi/ic_screenshot.png -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable-xxxhdpi/ic_screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/zoomx/src/main/res/drawable-xxxhdpi/ic_screenshot.png -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable-xxxhdpi/ic_view_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/zoomx/src/main/res/drawable-xxxhdpi/ic_view_list.png -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable-hdpi/ic_delete_forever.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/zoomx/src/main/res/drawable-hdpi/ic_delete_forever.png -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable-hdpi/ic_feature_collapse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/zoomx/src/main/res/drawable-hdpi/ic_feature_collapse.png -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable-hdpi/ic_feature_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/zoomx/src/main/res/drawable-hdpi/ic_feature_settings.png -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable-mdpi/ic_delete_forever.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/zoomx/src/main/res/drawable-mdpi/ic_delete_forever.png -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable-mdpi/ic_feature_collapse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/zoomx/src/main/res/drawable-mdpi/ic_feature_collapse.png -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable-mdpi/ic_feature_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/zoomx/src/main/res/drawable-mdpi/ic_feature_settings.png -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable-xhdpi/ic_delete_forever.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/zoomx/src/main/res/drawable-xhdpi/ic_delete_forever.png -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable-xxhdpi/ic_action_share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/zoomx/src/main/res/drawable-xxhdpi/ic_action_share.png -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable-xxhdpi/ic_delete_forever.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/zoomx/src/main/res/drawable-xxhdpi/ic_delete_forever.png -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable-xhdpi/ic_feature_collapse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/zoomx/src/main/res/drawable-xhdpi/ic_feature_collapse.png -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable-xhdpi/ic_feature_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/zoomx/src/main/res/drawable-xhdpi/ic_feature_settings.png -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable-xxhdpi/ic_feature_collapse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/zoomx/src/main/res/drawable-xxhdpi/ic_feature_collapse.png -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable-xxhdpi/ic_feature_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/zoomx/src/main/res/drawable-xxhdpi/ic_feature_settings.png -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable-xxxhdpi/ic_delete_forever.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/zoomx/src/main/res/drawable-xxxhdpi/ic_delete_forever.png -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable-xxxhdpi/ic_feature_collapse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/zoomx/src/main/res/drawable-xxxhdpi/ic_feature_collapse.png -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable-xxxhdpi/ic_feature_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/district0/ZoomX/HEAD/zoomx/src/main/res/drawable-xxxhdpi/ic_feature_settings.png -------------------------------------------------------------------------------- /zoomx/src/main/res/xml/searchable.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3F51B5 4 | #303F9F 5 | #FF4081 6 | 7 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Tue Apr 03 19:15:15 EET 2018 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip 7 | -------------------------------------------------------------------------------- /zoomx/src/main/java/com/zoomx/zoomx/util/ZoomxFileProvider.java: -------------------------------------------------------------------------------- 1 | package com.zoomx.zoomx.util; 2 | 3 | import android.support.v4.content.FileProvider; 4 | 5 | /** 6 | * Created by Ahmed Fathallah on 3/5/2018. 7 | */ 8 | 9 | public class ZoomxFileProvider extends FileProvider { 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable/menu_main_btn.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /zoomx/src/main/java/com/zoomx/zoomx/util/constants/PrefConstants.kt: -------------------------------------------------------------------------------- 1 | package com.zoomx.zoomx.util.constants 2 | 3 | /** 4 | * Created by Ahmed Fathallah on 1/29/2018. 5 | */ 6 | 7 | class PrefConstants { 8 | companion object { 9 | 10 | const val NETWORK_TRACKER_KEY = "networkTrackerKey" 11 | const val ZOOMX_UI_OPTION_KEY = "zoomx_ui_option" 12 | 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable/row_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable/ic_swap_vert_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /zoomx/src/main/java/com/zoomx/zoomx/ui/ZoomxUIOption.java: -------------------------------------------------------------------------------- 1 | package com.zoomx.zoomx.ui; 2 | 3 | import android.support.annotation.IntDef; 4 | 5 | /** 6 | * Created by Mohamed Ibrahim on 12/8/18. 7 | */ 8 | @IntDef({ 9 | ZoomxUIOption.DRAW_OVER_APPS, 10 | ZoomxUIOption.NOTIFICATION 11 | }) 12 | public @interface ZoomxUIOption { 13 | int NOTIFICATION = 0; 14 | int DRAW_OVER_APPS = 1; 15 | } -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable/ic_delete_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable/ic_request_details_arrow.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable-mdpi/ic_file_download_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /zoomx/src/main/res/menu/menu_requests_details.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 10 | -------------------------------------------------------------------------------- /zoomx/src/main/res/xml/file_provider_paths.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | 10 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /zoomx/src/main/res/layout/view_menu_close.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable-mdpi/ic_screenshot_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /zoomx/src/main/java/com/zoomx/zoomx/ui/notification/ClearLogsIntentService.kt: -------------------------------------------------------------------------------- 1 | package com.zoomx.zoomx.ui.notification 2 | 3 | import android.app.IntentService 4 | import android.content.Intent 5 | 6 | /** 7 | * 8 | * Created by Mohamed Ibrahim on 12/9/18. 9 | */ 10 | class ClearLogsIntentService(private val name: String = "ClearLogsIntentService") : IntentService(name) { 11 | 12 | override fun onHandleIntent(intent: Intent?) { 13 | ZoomxNotification(this).clear() 14 | } 15 | } -------------------------------------------------------------------------------- /zoomx/src/main/res/drawable/ic_feature_info.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/zoomx/example/model/User.java: -------------------------------------------------------------------------------- 1 | package com.zoomx.example.model; 2 | 3 | /** 4 | * Created by Ahmed Fathallah on 11/20/2017. 5 | */ 6 | 7 | public class User { 8 | private String login; 9 | private long id; 10 | private String url; 11 | 12 | public String getLogin() { 13 | return login; 14 | } 15 | 16 | public long getId() { 17 | return id; 18 | } 19 | 20 | public String getUrl() { 21 | return url; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/test/java/com/zoomx/example/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | package com.zoomx.example; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.junit.Assert.assertEquals; 6 | 7 | /** 8 | * Example local unit test, which will execute on the development machine (host). 9 | * 10 | * @see Testing documentation 11 | */ 12 | public class ExampleUnitTest { 13 | @Test 14 | public void addition_isCorrect() throws Exception { 15 | assertEquals(4, 2 + 2); 16 | } 17 | } -------------------------------------------------------------------------------- /zoomx/src/test/java/com/zoomx/zoomx/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | package com.zoomx.zoomx; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.junit.Assert.assertEquals; 6 | 7 | /** 8 | * Example local unit test, which will execute on the development machine (host). 9 | * 10 | * @see Testing documentation 11 | */ 12 | public class ExampleUnitTest { 13 | @Test 14 | public void addition_isCorrect() throws Exception { 15 | assertEquals(4, 2 + 2); 16 | } 17 | } -------------------------------------------------------------------------------- /zoomx/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #F5F5F5 4 | #4CAF50 5 | #9E9E9E 6 | #EEEEEE 7 | #3F51B5 8 | #303F9F 9 | #FF4081 10 | #FFFFFF 11 | #000000 12 | -------------------------------------------------------------------------------- /zoomx/src/main/java/com/zoomx/zoomx/util/ErrorConstants.java: -------------------------------------------------------------------------------- 1 | package com.zoomx.zoomx.util; 2 | 3 | import android.support.annotation.IntDef; 4 | 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | 8 | /** 9 | * Created by Ibrahim AbdelGawad on 1/11/2018. 10 | */ 11 | 12 | public class ErrorConstants { 13 | 14 | public static final int CONNECTION_ERROR = 0; 15 | 16 | @IntDef({CONNECTION_ERROR}) 17 | @Retention(RetentionPolicy.SOURCE) 18 | public @interface Errors {}; 19 | } 20 | -------------------------------------------------------------------------------- /zoomx/src/main/java/com/zoomx/zoomx/ui/requestdetails/RequestDetailsViewModel.java: -------------------------------------------------------------------------------- 1 | package com.zoomx.zoomx.ui.requestdetails; 2 | 3 | import android.arch.lifecycle.LiveData; 4 | import android.arch.lifecycle.ViewModel; 5 | 6 | import com.zoomx.zoomx.config.ZoomX; 7 | import com.zoomx.zoomx.model.RequestEntity; 8 | 9 | /** 10 | * Created by Ibrahim AbdelGawad on 12/13/2017. 11 | */ 12 | 13 | public class RequestDetailsViewModel extends ViewModel { 14 | 15 | public LiveData getRequestById(int id) { 16 | return ZoomX.getRequestDao().getRequestById(id); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/zoomx/example/BaseApplication.java: -------------------------------------------------------------------------------- 1 | package com.zoomx.example; 2 | 3 | import android.support.multidex.MultiDexApplication; 4 | 5 | import com.zoomx.zoomx.config.Config; 6 | import com.zoomx.zoomx.config.ZoomX; 7 | 8 | 9 | /** 10 | * Created by Ahmed Fathallah on 12/11/2017. 11 | */ 12 | 13 | public class BaseApplication extends MultiDexApplication { 14 | 15 | @Override 16 | public void onCreate() { 17 | super.onCreate(); 18 | ZoomX.init(new Config.Builder(this) 19 | .showMenuOnAppStart(false) 20 | .build()); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /zoomx/src/main/java/com/zoomx/zoomx/db/converters/DateConverter.java: -------------------------------------------------------------------------------- 1 | package com.zoomx.zoomx.db.converters; 2 | 3 | import android.arch.persistence.room.TypeConverter; 4 | 5 | import java.util.Date; 6 | 7 | /** 8 | * Created by Ahmed Fathallah on 12/6/2017. 9 | */ 10 | 11 | public class DateConverter { 12 | @TypeConverter 13 | public static Date toDate(Long timestamp) { 14 | return timestamp == null ? null : new Date(timestamp); 15 | } 16 | 17 | @TypeConverter 18 | public static Long toTimestamp(Date date) { 19 | return date == null ? null : date.getTime(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /zoomx/src/main/res/layout/request_list_fragment.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 14 | 15 | -------------------------------------------------------------------------------- /zoomx/src/main/java/com/zoomx/zoomx/ui/menu/MenuCloseView.java: -------------------------------------------------------------------------------- 1 | package com.zoomx.zoomx.ui.menu; 2 | 3 | import android.content.Context; 4 | import android.support.annotation.NonNull; 5 | import android.view.View; 6 | import android.widget.FrameLayout; 7 | 8 | import com.zoomx.zoomx.R; 9 | 10 | /** 11 | * Created by Ahmed Fathallah on 1/28/2018. 12 | */ 13 | 14 | public class MenuCloseView extends FrameLayout { 15 | 16 | public MenuCloseView(@NonNull Context context) { 17 | super(context); 18 | initUI(); 19 | } 20 | 21 | private void initUI() { 22 | View view = inflate(getContext(), R.layout.view_menu_close, this); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/zoomx/example/retrofit/ApiService.java: -------------------------------------------------------------------------------- 1 | package com.zoomx.example.retrofit; 2 | 3 | import com.zoomx.example.model.User; 4 | 5 | import java.util.List; 6 | 7 | import retrofit2.http.GET; 8 | import retrofit2.http.Headers; 9 | import retrofit2.http.Query; 10 | 11 | /** 12 | * Created by Ahmed Fathallah on 11/20/2017. 13 | */ 14 | 15 | public interface ApiService { 16 | @GET("/users") 17 | @Headers({ 18 | "X-Foo: Bar", 19 | "X-Ping: Pong", 20 | }) 21 | public io.reactivex.Observable> getUsers( 22 | @Query("per_page") int per_page, 23 | @Query("page") int page); 24 | 25 | 26 | } 27 | -------------------------------------------------------------------------------- /zoomx/src/main/res/layout/view_info_section.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 16 | -------------------------------------------------------------------------------- /zoomx/src/main/java/com/zoomx/zoomx/db/converters/HeaderConverter.java: -------------------------------------------------------------------------------- 1 | package com.zoomx.zoomx.db.converters; 2 | 3 | import android.arch.persistence.room.TypeConverter; 4 | 5 | import com.google.gson.Gson; 6 | import com.zoomx.zoomx.model.HeaderViewModel; 7 | 8 | /** 9 | * Created by Ahmed Fathallah on 12/6/2017. 10 | */ 11 | 12 | public class HeaderConverter { 13 | @TypeConverter 14 | public static String toString(HeaderViewModel headersModel) { 15 | return new Gson().toJson(headersModel); 16 | } 17 | 18 | @TypeConverter 19 | public static HeaderViewModel toModel(String headers) { 20 | return new Gson().fromJson(headers, HeaderViewModel.class); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /zoomx/src/main/java/com/zoomx/zoomx/util/ServiceUtils.java: -------------------------------------------------------------------------------- 1 | package com.zoomx.zoomx.util; 2 | 3 | import android.app.ActivityManager; 4 | import android.content.Context; 5 | 6 | public class ServiceUtils { 7 | public static boolean isMyServiceRunning(Class serviceClass, Context context) { 8 | ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 9 | for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { 10 | if (serviceClass.getName().equals(service.service.getClassName())) { 11 | return true; 12 | } 13 | } 14 | return false; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /zoomx/src/main/res/menu/menu_request_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 10 | 11 | 17 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | # IDE (e.g. Android Studio) users: 3 | # Gradle settings configured through the IDE *will override* 4 | # any settings specified in this file. 5 | # For more details on how to configure your build environment visit 6 | # http://www.gradle.org/docs/current/userguide/build_environment.html 7 | # Specifies the JVM arguments used for the daemon process. 8 | # The setting is particularly useful for tweaking memory settings. 9 | org.gradle.jvmargs=-Xmx1536m 10 | # When configured, Gradle will run in incubating parallel mode. 11 | # This option should only be used with decoupled projects. More details, visit 12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 13 | # org.gradle.parallel=true 14 | -------------------------------------------------------------------------------- /zoomx/src/main/java/com/zoomx/zoomx/util/ColorUtils.java: -------------------------------------------------------------------------------- 1 | package com.zoomx.zoomx.util; 2 | 3 | import android.content.Context; 4 | import android.graphics.Color; 5 | import android.support.v4.content.ContextCompat; 6 | 7 | import com.zoomx.zoomx.R; 8 | 9 | /** 10 | * Created by Ibrahim AbdelGawad on 12/12/2017. 11 | */ 12 | 13 | public class ColorUtils { 14 | 15 | public static int getCodeColor(int code, Context context) { 16 | 17 | int color; 18 | 19 | switch (code) { 20 | case 200: 21 | color = ContextCompat.getColor(context, R.color.green_500); 22 | break; 23 | 24 | default: 25 | color = Color.RED; 26 | break; 27 | } 28 | 29 | return color; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /zoomx/src/main/java/com/zoomx/zoomx/model/HeaderViewModel.java: -------------------------------------------------------------------------------- 1 | package com.zoomx.zoomx.model; 2 | 3 | import java.util.ArrayList; 4 | import java.util.HashMap; 5 | import java.util.Map; 6 | 7 | /** 8 | * Created by Ahmed Fathallah on 11/20/2017. 9 | */ 10 | public class HeaderViewModel { 11 | 12 | private ArrayList headersMap; 13 | 14 | public HeaderViewModel() { 15 | this.headersMap = new ArrayList<>(); 16 | } 17 | 18 | public HeaderViewModel(ArrayList headersMap) { 19 | this.headersMap = headersMap; 20 | } 21 | 22 | public void addHeader(String name, String value) { 23 | headersMap.add(name + ": " + value); 24 | } 25 | 26 | public ArrayList getHeadersMap() { 27 | return headersMap; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /zoomx/src/main/res/layout/activity_request_details.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 14 | 15 | 16 | 17 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/zoomx/example/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package com.zoomx.example; 2 | 3 | import android.content.Context; 4 | import android.support.test.InstrumentationRegistry; 5 | import android.support.test.runner.AndroidJUnit4; 6 | 7 | import org.junit.Test; 8 | import org.junit.runner.RunWith; 9 | 10 | import static org.junit.Assert.assertEquals; 11 | 12 | /** 13 | * Instrumented test, which will execute on an Android device. 14 | * 15 | * @see Testing documentation 16 | */ 17 | @RunWith(AndroidJUnit4.class) 18 | public class ExampleInstrumentedTest { 19 | @Test 20 | public void useAppContext() throws Exception { 21 | // Context of the app under test. 22 | Context appContext = InstrumentationRegistry.getTargetContext(); 23 | 24 | assertEquals("com.zoomx.zoomx", appContext.getPackageName()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /zoomx/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | 23 | -keep class android.support.v7.widget.SearchView { *; } 24 | -------------------------------------------------------------------------------- /zoomx/src/androidTest/java/com/zoomx/zoomx/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package com.zoomx.zoomx; 2 | 3 | import android.content.Context; 4 | import android.support.test.InstrumentationRegistry; 5 | import android.support.test.runner.AndroidJUnit4; 6 | 7 | import org.junit.Test; 8 | import org.junit.runner.RunWith; 9 | 10 | import static org.junit.Assert.assertEquals; 11 | 12 | /** 13 | * Instrumented test, which will execute on an Android device. 14 | * 15 | * @see Testing documentation 16 | */ 17 | @RunWith(AndroidJUnit4.class) 18 | public class ExampleInstrumentedTest { 19 | @Test 20 | public void useAppContext() throws Exception { 21 | // Context of the app under test. 22 | Context appContext = InstrumentationRegistry.getTargetContext(); 23 | 24 | assertEquals("com.zoomx.zoomx.test", appContext.getPackageName()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /zoomx/src/main/java/com/zoomx/zoomx/ui/info/InfoActivity.java: -------------------------------------------------------------------------------- 1 | package com.zoomx.zoomx.ui.info; 2 | 3 | import android.os.Bundle; 4 | import android.support.v7.app.AppCompatActivity; 5 | import android.support.v7.widget.Toolbar; 6 | 7 | import com.zoomx.zoomx.R; 8 | 9 | public class InfoActivity extends AppCompatActivity { 10 | @Override 11 | protected void onCreate(Bundle savedInstanceState) { 12 | super.onCreate(savedInstanceState); 13 | setContentView(R.layout.activity_info); 14 | initUI(); 15 | } 16 | 17 | private void initUI() { 18 | Toolbar toolbar = findViewById(R.id.toolbar); 19 | setSupportActionBar(toolbar); 20 | InfoFragment infoFragment = new InfoFragment(); 21 | getSupportFragmentManager() 22 | .beginTransaction() 23 | .add(R.id.container, infoFragment) 24 | .commit(); 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /zoomx/src/main/res/layout/activity_info.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 16 | 17 | 21 | 22 | -------------------------------------------------------------------------------- /zoomx/src/main/res/layout/request_activity_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 15 | 16 | 17 | 18 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /zoomx/src/main/res/layout/zoomx_ui_options_checkboxes.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 15 | 16 | 22 | 23 | -------------------------------------------------------------------------------- /zoomx/src/main/java/com/zoomx/zoomx/ui/requestlist/RequestActivity.java: -------------------------------------------------------------------------------- 1 | package com.zoomx.zoomx.ui.requestlist; 2 | 3 | import android.os.Bundle; 4 | import android.support.annotation.Nullable; 5 | import android.support.v7.app.AppCompatActivity; 6 | import android.support.v7.widget.Toolbar; 7 | 8 | import com.zoomx.zoomx.R; 9 | 10 | /** 11 | * Created by Ibrahim AbdelGawad on 12/3/2017. 12 | */ 13 | 14 | public class RequestActivity extends AppCompatActivity { 15 | 16 | @Override 17 | protected void onCreate(@Nullable Bundle savedInstanceState) { 18 | super.onCreate(savedInstanceState); 19 | setContentView(R.layout.request_activity_layout); 20 | Toolbar toolbar = findViewById(R.id.toolbar); 21 | setSupportActionBar(toolbar); 22 | getSupportFragmentManager() 23 | .beginTransaction() 24 | .add(R.id.container, new RequestListFragment()) 25 | .commit(); 26 | } 27 | } 28 | 29 | -------------------------------------------------------------------------------- /zoomx/src/main/res/layout/info_text_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 18 | 19 | 25 | 26 | -------------------------------------------------------------------------------- /zoomx/src/main/java/com/zoomx/zoomx/db/RequestDao.java: -------------------------------------------------------------------------------- 1 | package com.zoomx.zoomx.db; 2 | 3 | import android.arch.lifecycle.LiveData; 4 | import android.arch.persistence.room.Dao; 5 | import android.arch.persistence.room.Insert; 6 | import android.arch.persistence.room.OnConflictStrategy; 7 | import android.arch.persistence.room.Query; 8 | 9 | import com.zoomx.zoomx.model.RequestEntity; 10 | 11 | import java.util.List; 12 | 13 | /** 14 | * Created by Ahmed Fathallah on 12/6/2017. 15 | */ 16 | 17 | @Dao 18 | public interface RequestDao { 19 | 20 | @Insert(onConflict = OnConflictStrategy.REPLACE) 21 | void insertRequest(RequestEntity requestEntity); 22 | 23 | @Query("SELECT * FROM requests ORDER BY startDate DESC") 24 | LiveData> loadRequests(); 25 | 26 | @Query("DELETE FROM requests") 27 | int clearRequestsData(); 28 | 29 | @Query("SELECT * FROM requests WHERE id = :id") 30 | LiveData getRequestById(int id); 31 | 32 | } 33 | -------------------------------------------------------------------------------- /zoomx/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 19 | -------------------------------------------------------------------------------- /zoomx/src/main/java/com/zoomx/zoomx/util/FileUtils.kt: -------------------------------------------------------------------------------- 1 | package com.zoomx.zoomx.util 2 | 3 | import java.io.File 4 | import java.io.FileInputStream 5 | import java.io.FileOutputStream 6 | import java.io.IOException 7 | import java.nio.channels.FileChannel 8 | 9 | @Throws(IOException::class) 10 | fun copyFile(sourceFile: File, destFile: File) { 11 | if (!destFile.parentFile.exists()) 12 | destFile.parentFile.mkdirs() 13 | 14 | if (!destFile.exists()) { 15 | destFile.createNewFile() 16 | } 17 | 18 | var source: FileChannel? = null 19 | var destination: FileChannel? = null 20 | 21 | try { 22 | source = FileInputStream(sourceFile).channel 23 | destination = FileOutputStream(destFile).channel 24 | destination!!.transferFrom(source, 0, source!!.size()) 25 | } finally { 26 | if (source != null) { 27 | source!!.close() 28 | } 29 | if (destination != null) { 30 | destination!!.close() 31 | } 32 | } 33 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Built application files 2 | *.apk 3 | *.ap_ 4 | 5 | # Files for the ART/Dalvik VM 6 | *.dex 7 | 8 | # Java class files 9 | *.class 10 | 11 | # Generated files 12 | bin/ 13 | gen/ 14 | out/ 15 | 16 | # Gradle files 17 | .gradle/ 18 | build/ 19 | 20 | # Local configuration file (sdk path, etc) 21 | local.properties 22 | 23 | # Proguard folder generated by Eclipse 24 | proguard/ 25 | 26 | # Log Files 27 | *.log 28 | 29 | # Android Studio Navigation editor temp files 30 | .navigation/ 31 | 32 | # Android Studio captures folder 33 | captures/ 34 | 35 | # Intellij 36 | *.iml 37 | .idea/workspace.xml 38 | .idea/tasks.xml 39 | .idea/gradle.xml 40 | .idea/dictionaries 41 | .idea/libraries 42 | 43 | # Keystore files 44 | *.jks 45 | 46 | # External native build folder generated in Android Studio 2.2 and later 47 | .externalNativeBuild 48 | 49 | # Google Services (e.g. APIs or Firebase) 50 | google-services.json 51 | 52 | # Freeline 53 | freeline.py 54 | freeline/ 55 | freeline_project_description.json 56 | /.idea/ 57 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /zoomx/src/main/res/layout/screenshot_viewer.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 14 |