Repository: Odoo-mobile/crm
Branch: master
Commit: b25516b8f745
Files: 345
Total size: 1.3 MB
Directory structure:
gitextract_1ybjx6vk/
├── .classpath
├── README.md
├── app/
│ ├── .gitignore
│ ├── app-release.apk
│ ├── build.gradle
│ ├── crm-app-release.apk
│ ├── libs/
│ │ └── swipe_library.jar
│ ├── manifest-merger-release-report.txt
│ ├── proguard-rules.pro
│ └── src/
│ └── main/
│ ├── AndroidManifest.xml
│ ├── java/
│ │ ├── com/
│ │ │ └── odoo/
│ │ │ ├── App.java
│ │ │ ├── OdooActivity.java
│ │ │ ├── SettingsActivity.java
│ │ │ ├── addons/
│ │ │ │ ├── calendar/
│ │ │ │ │ ├── CalendarDashboard.java
│ │ │ │ │ ├── EventDetail.java
│ │ │ │ │ ├── models/
│ │ │ │ │ │ └── CalendarEvent.java
│ │ │ │ │ ├── providers/
│ │ │ │ │ │ └── CalendarSyncProvider.java
│ │ │ │ │ ├── services/
│ │ │ │ │ │ └── CalendarSyncService.java
│ │ │ │ │ └── utils/
│ │ │ │ │ ├── CalendarUtils.java
│ │ │ │ │ ├── EventColorDialog.java
│ │ │ │ │ ├── ReminderDialog.java
│ │ │ │ │ └── TodayIcon.java
│ │ │ │ ├── crm/
│ │ │ │ │ ├── CRMDetail.java
│ │ │ │ │ ├── CRMLeads.java
│ │ │ │ │ ├── CRMOpportunities.java
│ │ │ │ │ ├── CRMOpportunitiesPager.java
│ │ │ │ │ ├── ConvertToOpportunityWizard.java
│ │ │ │ │ ├── ConvertToQuotation.java
│ │ │ │ │ ├── models/
│ │ │ │ │ │ ├── CRMCaseCateg.java
│ │ │ │ │ │ ├── CRMCaseStage.java
│ │ │ │ │ │ └── CRMLead.java
│ │ │ │ │ ├── providers/
│ │ │ │ │ │ └── CRMLeadProvider.java
│ │ │ │ │ └── services/
│ │ │ │ │ └── CRMLeadSyncService.java
│ │ │ │ ├── customers/
│ │ │ │ │ ├── CustomerDetails.java
│ │ │ │ │ ├── Customers.java
│ │ │ │ │ ├── providers/
│ │ │ │ │ │ └── CustomersSyncProvider.java
│ │ │ │ │ ├── services/
│ │ │ │ │ │ └── CustomerSyncService.java
│ │ │ │ │ └── utils/
│ │ │ │ │ └── ShareUtil.java
│ │ │ │ ├── phonecall/
│ │ │ │ │ ├── PhoneCallDetail.java
│ │ │ │ │ ├── PhoneCalls.java
│ │ │ │ │ ├── features/
│ │ │ │ │ │ ├── CallerWindow.java
│ │ │ │ │ │ ├── CustomerFinder.java
│ │ │ │ │ │ ├── IOnCustomerFindListener.java
│ │ │ │ │ │ └── receivers/
│ │ │ │ │ │ └── PhoneStateReceiver.java
│ │ │ │ │ ├── models/
│ │ │ │ │ │ ├── CRMPhoneCalls.java
│ │ │ │ │ │ └── CRMPhoneCallsCategory.java
│ │ │ │ │ ├── providers/
│ │ │ │ │ │ └── PhoneCallProvider.java
│ │ │ │ │ └── services/
│ │ │ │ │ └── PhoneCallSyncService.java
│ │ │ │ └── sale/
│ │ │ │ ├── AddProductLineWizard.java
│ │ │ │ ├── Sales.java
│ │ │ │ ├── SalesDetail.java
│ │ │ │ ├── models/
│ │ │ │ │ ├── AccountPaymentTerm.java
│ │ │ │ │ ├── ProductProduct.java
│ │ │ │ │ ├── SaleOrder.java
│ │ │ │ │ └── SalesOrderLine.java
│ │ │ │ ├── providers/
│ │ │ │ │ └── SaleOrderProvider.java
│ │ │ │ └── services/
│ │ │ │ └── SaleOrderSyncService.java
│ │ │ ├── base/
│ │ │ │ └── addons/
│ │ │ │ ├── BaseModels.java
│ │ │ │ ├── ir/
│ │ │ │ │ ├── IrAttachment.java
│ │ │ │ │ ├── IrModel.java
│ │ │ │ │ ├── feature/
│ │ │ │ │ │ └── OFileManager.java
│ │ │ │ │ └── providers/
│ │ │ │ │ └── IrModelProvider.java
│ │ │ │ ├── mail/
│ │ │ │ │ ├── MailMessage.java
│ │ │ │ │ ├── MailMessageSubType.java
│ │ │ │ │ └── widget/
│ │ │ │ │ ├── MailChatterCompose.java
│ │ │ │ │ ├── MailChatterView.java
│ │ │ │ │ ├── MailDetailDialog.java
│ │ │ │ │ └── MessageObserver.java
│ │ │ │ └── res/
│ │ │ │ ├── ResCompany.java
│ │ │ │ ├── ResCountry.java
│ │ │ │ ├── ResCurrency.java
│ │ │ │ ├── ResPartner.java
│ │ │ │ └── ResUsers.java
│ │ │ ├── config/
│ │ │ │ ├── Addons.java
│ │ │ │ ├── BaseConfig.java
│ │ │ │ └── IntroSliderItems.java
│ │ │ ├── core/
│ │ │ │ ├── account/
│ │ │ │ │ ├── About.java
│ │ │ │ │ ├── AppIntro.java
│ │ │ │ │ ├── BaseSettings.java
│ │ │ │ │ ├── ManageAccounts.java
│ │ │ │ │ ├── OdooAccountQuickManage.java
│ │ │ │ │ ├── OdooLogin.java
│ │ │ │ │ ├── OdooUserAskPassword.java
│ │ │ │ │ └── Profile.java
│ │ │ │ ├── auth/
│ │ │ │ │ ├── OdooAccountManager.java
│ │ │ │ │ ├── OdooAuthService.java
│ │ │ │ │ └── OdooAuthenticator.java
│ │ │ │ ├── orm/
│ │ │ │ │ ├── ODataRow.java
│ │ │ │ │ ├── OM2MRecord.java
│ │ │ │ │ ├── OM2ORecord.java
│ │ │ │ │ ├── OModel.java
│ │ │ │ │ ├── OModelRegistry.java
│ │ │ │ │ ├── OO2MRecord.java
│ │ │ │ │ ├── OSQLHelper.java
│ │ │ │ │ ├── OSQLite.java
│ │ │ │ │ ├── OValues.java
│ │ │ │ │ ├── ServerDataHelper.java
│ │ │ │ │ ├── annotation/
│ │ │ │ │ │ └── Odoo.java
│ │ │ │ │ ├── fields/
│ │ │ │ │ │ ├── OColumn.java
│ │ │ │ │ │ └── types/
│ │ │ │ │ │ ├── OBlob.java
│ │ │ │ │ │ ├── OBoolean.java
│ │ │ │ │ │ ├── ODate.java
│ │ │ │ │ │ ├── ODateTime.java
│ │ │ │ │ │ ├── OFloat.java
│ │ │ │ │ │ ├── OHtml.java
│ │ │ │ │ │ ├── OInteger.java
│ │ │ │ │ │ ├── OSelection.java
│ │ │ │ │ │ ├── OText.java
│ │ │ │ │ │ ├── OTimestamp.java
│ │ │ │ │ │ ├── OTypeHelper.java
│ │ │ │ │ │ └── OVarchar.java
│ │ │ │ │ └── provider/
│ │ │ │ │ └── BaseModelProvider.java
│ │ │ │ ├── service/
│ │ │ │ │ ├── ISyncFinishListener.java
│ │ │ │ │ ├── ISyncServiceListener.java
│ │ │ │ │ ├── OSyncAdapter.java
│ │ │ │ │ ├── OSyncDataUtils.java
│ │ │ │ │ ├── OSyncService.java
│ │ │ │ │ └── receivers/
│ │ │ │ │ └── ISyncFinishReceiver.java
│ │ │ │ ├── support/
│ │ │ │ │ ├── OUser.java
│ │ │ │ │ ├── OdooFields.java
│ │ │ │ │ ├── OdooInstancesSelectorDialog.java
│ │ │ │ │ ├── OdooLoginHelper.java
│ │ │ │ │ ├── OdooServerTester.java
│ │ │ │ │ ├── OdooUserLoginSelectorDialog.java
│ │ │ │ │ ├── addons/
│ │ │ │ │ │ ├── AddonsHelper.java
│ │ │ │ │ │ ├── OAddon.java
│ │ │ │ │ │ └── fragment/
│ │ │ │ │ │ ├── BaseFragment.java
│ │ │ │ │ │ ├── IBaseFragment.java
│ │ │ │ │ │ ├── IOnSearchViewChangeListener.java
│ │ │ │ │ │ └── ISyncStatusObserverListener.java
│ │ │ │ │ ├── drawer/
│ │ │ │ │ │ └── ODrawerItem.java
│ │ │ │ │ ├── list/
│ │ │ │ │ │ ├── IOnItemClickListener.java
│ │ │ │ │ │ ├── OCursorListAdapter.java
│ │ │ │ │ │ └── OListAdapter.java
│ │ │ │ │ └── sync/
│ │ │ │ │ └── SyncUtils.java
│ │ │ │ └── utils/
│ │ │ │ ├── BitmapUtils.java
│ │ │ │ ├── IntentUtils.java
│ │ │ │ ├── JSONUtils.java
│ │ │ │ ├── OActionBarUtils.java
│ │ │ │ ├── OAlert.java
│ │ │ │ ├── OAlertDialog.java
│ │ │ │ ├── OControls.java
│ │ │ │ ├── OCursorUtils.java
│ │ │ │ ├── ODateUtils.java
│ │ │ │ ├── OFragmentUtils.java
│ │ │ │ ├── OListUtils.java
│ │ │ │ ├── OPreferenceManager.java
│ │ │ │ ├── OResource.java
│ │ │ │ ├── OStorageUtils.java
│ │ │ │ ├── OStringColorUtil.java
│ │ │ │ ├── StringUtils.java
│ │ │ │ ├── controls/
│ │ │ │ │ └── ExpandableHeightGridView.java
│ │ │ │ ├── dialog/
│ │ │ │ │ └── OChoiceDialog.java
│ │ │ │ ├── drawer/
│ │ │ │ │ ├── DrawerUtils.java
│ │ │ │ │ └── ODrawerScrollView.java
│ │ │ │ ├── logger/
│ │ │ │ │ └── OLog.java
│ │ │ │ ├── notification/
│ │ │ │ │ └── ONotificationBuilder.java
│ │ │ │ ├── reminder/
│ │ │ │ │ ├── ReminderActionReceiver.java
│ │ │ │ │ ├── ReminderReceiver.java
│ │ │ │ │ └── ReminderUtils.java
│ │ │ │ └── sys/
│ │ │ │ ├── IOnActivityResultListener.java
│ │ │ │ ├── IOnBackPressListener.java
│ │ │ │ └── OCacheUtils.java
│ │ │ ├── datas/
│ │ │ │ └── OConstants.java
│ │ │ ├── news/
│ │ │ │ ├── News.java
│ │ │ │ ├── NewsDetail.java
│ │ │ │ ├── OdooNewsReceiver.java
│ │ │ │ └── models/
│ │ │ │ └── OdooNews.java
│ │ │ └── server/
│ │ │ └── notifications/
│ │ │ └── OdooServerNotificationReceiver.java
│ │ └── odoo/
│ │ └── controls/
│ │ ├── BezelImageView.java
│ │ ├── DateTimePicker.java
│ │ ├── ExpandableListControl.java
│ │ ├── ExpandableListOperationListener.java
│ │ ├── IOControlData.java
│ │ ├── IOnChangeCallback.java
│ │ ├── IOnDomainFilterCallbacks.java
│ │ ├── IOnQuickRecordCreateListener.java
│ │ ├── OBlobField.java
│ │ ├── OBooleanField.java
│ │ ├── OControlHelper.java
│ │ ├── ODateTimeField.java
│ │ ├── OEditTextField.java
│ │ ├── OField.java
│ │ ├── OForm.java
│ │ ├── OSelectionField.java
│ │ ├── SearchableItemActivity.java
│ │ └── fab/
│ │ ├── DirectionScrollListener.java
│ │ └── FloatingActionButton.java
│ └── res/
│ ├── drawable/
│ │ ├── circle_mask.xml
│ │ ├── circle_mask_gray.xml
│ │ ├── circle_mask_primary.xml
│ │ ├── circle_mask_secondary.xml
│ │ ├── drawer_background_cover.xml
│ │ ├── icon_bg_oval_blue.xml
│ │ ├── icon_bg_oval_green.xml
│ │ ├── icon_bg_oval_orange.xml
│ │ ├── icon_bg_oval_red.xml
│ │ ├── icon_bg_oval_violet.xml
│ │ ├── login_signup_button.xml
│ │ ├── login_signup_button_clicked.xml
│ │ ├── login_signup_button_normal.xml
│ │ ├── login_signup_control_bg.xml
│ │ └── tag_background.xml
│ ├── layout/
│ │ ├── activity_app_intro.xml
│ │ ├── base_about.xml
│ │ ├── base_account_ask_pass.xml
│ │ ├── base_account_item.xml
│ │ ├── base_account_quick_manage.xml
│ │ ├── base_attachment_item.xml
│ │ ├── base_control_searchable_layout.xml
│ │ ├── base_control_template.xml
│ │ ├── base_drawer.xml
│ │ ├── base_drawer_account_item.xml
│ │ ├── base_drawer_group_layout.xml
│ │ ├── base_drawer_menu_item.xml
│ │ ├── base_instance_item.xml
│ │ ├── base_intro_slider_view.xml
│ │ ├── base_login.xml
│ │ ├── base_mail_chatter.xml
│ │ ├── base_mail_chatter_item.xml
│ │ ├── base_mail_chatter_message_compose.xml
│ │ ├── base_mail_chatter_message_detail.xml
│ │ ├── base_manage_accounts.xml
│ │ ├── base_no_items_view.xml
│ │ ├── base_no_items_view.xml~
│ │ ├── base_profile.xml
│ │ ├── base_setting_activity.xml
│ │ ├── base_simple_list_item_1.xml
│ │ ├── base_simple_list_item_1_selected.xml
│ │ ├── base_toolbar.xml
│ │ ├── calendar_dashboard.xml
│ │ ├── calendar_dashboard_item_separator.xml
│ │ ├── calendar_dashboard_item_view.xml
│ │ ├── calendar_dashboard_items.xml
│ │ ├── calendar_event_detail_form.xml
│ │ ├── common_listview.xml
│ │ ├── crm_caller_window_layout.xml
│ │ ├── crm_convert_to_opportunity.xml
│ │ ├── crm_convert_to_opportunity_item.xml
│ │ ├── crm_convert_to_quotation.xml
│ │ ├── crm_detail.xml
│ │ ├── crm_item.xml
│ │ ├── crm_opportunity_pagger.xml
│ │ ├── crm_phonecall_detail.xml
│ │ ├── customer_detail.xml
│ │ ├── customer_filter_container.xml
│ │ ├── customer_row_item.xml
│ │ ├── event_color_chooser_item.xml
│ │ ├── event_color_grid.xml
│ │ ├── listview_data_loading_progress.xml
│ │ ├── news_detail.xml
│ │ ├── news_list.xml
│ │ ├── odoo_activity.xml
│ │ ├── odoo_news.xml
│ │ ├── phonecall_item.xml
│ │ ├── reminder_custom_dialog_view.xml
│ │ ├── reminder_item_view.xml
│ │ ├── sale_add_item.xml
│ │ ├── sale_detail.xml
│ │ ├── sale_order_item.xml
│ │ ├── sale_order_line_item.xml
│ │ └── sale_product_line_item.xml
│ ├── menu/
│ │ ├── menu_about.xml
│ │ ├── menu_base_login.xml
│ │ ├── menu_calendar_dashboard.xml
│ │ ├── menu_calendar_detail.xml
│ │ ├── menu_customer_detail.xml
│ │ ├── menu_dashboard_events.xml
│ │ ├── menu_dashboard_opportunity.xml
│ │ ├── menu_dashboard_phonecalls.xml
│ │ ├── menu_lead_detail.xml
│ │ ├── menu_lead_list_sheet.xml
│ │ ├── menu_leads.xml
│ │ ├── menu_opp_list_sheet.xml
│ │ ├── menu_partners.xml
│ │ ├── menu_phonecall_detail.xml
│ │ ├── menu_phonecalls.xml
│ │ ├── menu_quotation_cancel_sheet.xml
│ │ ├── menu_quotation_sheet.xml
│ │ ├── menu_sale_add_item.xml
│ │ ├── menu_sale_detail.xml
│ │ ├── menu_sales_order.xml
│ │ ├── menu_sheet_customer.xml
│ │ └── menu_so_sheet.xml
│ ├── values/
│ │ ├── attrs.xml
│ │ ├── base-strings.xml
│ │ ├── bool.xml
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── fonts.xml
│ │ ├── strings.xml
│ │ ├── strings.xml~
│ │ ├── styles.xml
│ │ └── theme-values.xml
│ ├── values-v19/
│ │ └── bool.xml
│ ├── values-v21/
│ │ ├── colors.xml
│ │ ├── styles.xml
│ │ └── theme-values.xml
│ ├── values-w820dp/
│ │ └── dimens.xml
│ └── xml/
│ ├── authenticator.xml
│ ├── base_preference.xml
│ ├── calendar_sync_adapter.xml
│ ├── crm_sync_adapter.xml
│ ├── customer_sync_adapter.xml
│ ├── phonecall_sync_adapter.xml
│ └── sale_sync_adapter.xml
├── bottom-sheet-lib/
│ ├── bottom-sheet-lib.aar
│ ├── bottom-sheet-lib.iml
│ └── build.gradle
├── build.gradle
├── calendar-lib/
│ ├── build.gradle
│ ├── calendar-lib.aar
│ └── calendar-lib.iml
├── gradle/
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── intro-slider-lib/
│ ├── app.iml
│ ├── build.gradle
│ └── src/
│ └── main/
│ ├── AndroidManifest.xml
│ ├── java/
│ │ └── com/
│ │ └── odoo/
│ │ ├── widget/
│ │ │ └── slider/
│ │ │ └── navigator/
│ │ │ └── PagerNavigatorAdapter.java
│ │ └── widgets/
│ │ └── slider/
│ │ ├── SliderHelper.java
│ │ ├── SliderItem.java
│ │ ├── SliderPagerAdapter.java
│ │ └── SliderView.java
│ └── res/
│ ├── drawable/
│ │ └── intro_slider_dot_bg.xml
│ ├── layout/
│ │ ├── default_ui.xml
│ │ └── slider_default_view.xml
│ ├── values/
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ ├── values-v11/
│ │ └── styles.xml
│ └── values-v14/
│ └── styles.xml
├── local.properties
├── master-crm-studio-dpr.iml
├── odoo-rpc-v2/
│ ├── build.gradle
│ └── odoo-rpc-v2.aar
├── parallax-effect-lib/
│ ├── build.gradle
│ └── parallax-effect-lib.aar
├── settings.gradle
└── snackbar-lib/
├── build.gradle
├── snackbar-lib.aar
└── snackbar-lib.iml
================================================
FILE CONTENTS
================================================
================================================
FILE: .classpath
================================================
================================================
FILE: README.md
================================================
Odoo Mobile Framework v2.0
==========================
Android Studio Project
Odoo is a powerful open source framework. With help of this framework we can rapidly develop almost any application.
World is contracting with the growth of mobile phone technology. As the number of users is increasing day by day, facilities are also increasing. Now a days mobiles are not used just for making calls but they have innumerable uses and can be used as a Camera , Music player, Tablet PC, T.V. , Web browser etc. And with the new technologies, new software and operating systems are required.
One of the most widely used mobile OS these days is ANDROID. Android is a software bunch comprising not only operating system but also middleware and key applications.
Odoo Mobile framework is an open source mobile application development framework with Odoo integration. With the help of mobile framework we can rapidly develop almost all Odoo supported application as faster as we can develop in Odoo Framework.
This framework contains its own ORM to handle mobile’s local database. So you do not have to worry about data comming from Odoo Server. It has pre-developed services and providers to make your application data synchronized with Odoo.
================================================
FILE: app/.gitignore
================================================
/build
================================================
FILE: app/build.gradle
================================================
apply plugin: 'com.android.application'
android {
signingConfigs {
}
compileSdkVersion 22
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "com.odoo.crm"
minSdkVersion 14
targetSdkVersion 22
versionCode 7
versionName "1.0.7"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile files('libs/swipe_library.jar')
compile 'com.android.support:appcompat-v7:22.2.0'
compile 'com.android.support:cardview-v7:22.0.0'
compile 'com.google.android.gms:play-services:7.5.0'
compile project(':intro-slider-lib')
compile project(':parallax-effect-lib')
compile project(':odoo-rpc-v2')
compile project(':calendar-lib')
compile project(':bottom-sheet-lib')
compile project(':snackbar-lib')
}
================================================
FILE: app/manifest-merger-release-report.txt
================================================
-- Merging decision tree log ---
manifest
ADDED from AndroidManifest.xml:2:1
xmlns:android
ADDED from AndroidManifest.xml:2:11
package
ADDED from AndroidManifest.xml:3:5
INJECTED from AndroidManifest.xml:0:0
INJECTED from AndroidManifest.xml:0:0
android:versionName
INJECTED from AndroidManifest.xml:0:0
INJECTED from AndroidManifest.xml:0:0
android:versionCode
INJECTED from AndroidManifest.xml:0:0
INJECTED from AndroidManifest.xml:0:0
uses-permission#android.permission.INTERNET
ADDED from AndroidManifest.xml:5:5
MERGED from com.google.android.gms:play-services-ads:7.5.0:20:5
MERGED from com.google.android.gms:play-services-analytics:7.5.0:21:5
MERGED from com.google.android.gms:play-services-analytics:7.5.0:21:5
MERGED from com.google.android.gms:play-services-appinvite:7.5.0:19:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:21:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:21:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:21:5
MERGED from com.google.android.gms:play-services-wallet:7.5.0:20:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:21:5
MERGED from master-crm:odoo-rpc-v2:unspecified:11:5
android:name
ADDED from AndroidManifest.xml:5:22
uses-permission#android.permission.VIBRATE
ADDED from AndroidManifest.xml:6:5
MERGED from master-crm:odoo-rpc-v2:unspecified:14:5
android:name
ADDED from AndroidManifest.xml:6:22
uses-permission#android.permission.ACCESS_WIFI_STATE
ADDED from AndroidManifest.xml:7:5
MERGED from master-crm:odoo-rpc-v2:unspecified:15:5
android:name
ADDED from AndroidManifest.xml:7:22
uses-permission#android.permission.ACCESS_NETWORK_STATE
ADDED from AndroidManifest.xml:8:5
MERGED from com.google.android.gms:play-services-ads:7.5.0:21:5
MERGED from com.google.android.gms:play-services-analytics:7.5.0:22:5
MERGED from com.google.android.gms:play-services-analytics:7.5.0:22:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:20:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:20:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:20:5
MERGED from com.google.android.gms:play-services-nearby:7.5.0:19:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:20:5
MERGED from master-crm:odoo-rpc-v2:unspecified:16:5
android:name
ADDED from AndroidManifest.xml:8:22
uses-permission#android.permission.GET_TASKS
ADDED from AndroidManifest.xml:9:5
android:name
ADDED from AndroidManifest.xml:9:22
uses-permission#android.permission.AUTHENTICATE_ACCOUNTS
ADDED from AndroidManifest.xml:10:5
android:name
ADDED from AndroidManifest.xml:10:22
uses-permission#android.permission.GET_ACCOUNTS
ADDED from AndroidManifest.xml:11:5
MERGED from com.google.android.gms:play-services-wallet:7.5.0:21:5
android:name
ADDED from AndroidManifest.xml:11:22
uses-permission#android.permission.USE_CREDENTIALS
ADDED from AndroidManifest.xml:12:5
MERGED from com.google.android.gms:play-services-wallet:7.5.0:22:5
android:name
ADDED from AndroidManifest.xml:12:22
uses-permission#android.permission.MANAGE_ACCOUNTS
ADDED from AndroidManifest.xml:13:5
android:name
ADDED from AndroidManifest.xml:13:22
uses-permission#android.permission.READ_SYNC_SETTINGS
ADDED from AndroidManifest.xml:14:5
android:name
ADDED from AndroidManifest.xml:14:22
uses-permission#android.permission.READ_SYNC_STATS
ADDED from AndroidManifest.xml:15:5
android:name
ADDED from AndroidManifest.xml:15:22
uses-permission#android.permission.WRITE_SYNC_SETTINGS
ADDED from AndroidManifest.xml:16:5
android:name
ADDED from AndroidManifest.xml:16:22
uses-permission#android.permission.WAKE_LOCK
ADDED from AndroidManifest.xml:17:5
MERGED from master-crm:odoo-rpc-v2:unspecified:17:5
android:name
ADDED from AndroidManifest.xml:17:22
uses-permission#com.google.android.c2dm.permission.RECEIVE
ADDED from AndroidManifest.xml:18:5
MERGED from master-crm:odoo-rpc-v2:unspecified:13:5
android:name
ADDED from AndroidManifest.xml:18:22
uses-permission#android.permission.READ_PHONE_STATE
ADDED from AndroidManifest.xml:19:5
MERGED from master-crm:odoo-rpc-v2:unspecified:12:5
android:name
ADDED from AndroidManifest.xml:19:22
uses-permission#android.permission.SYSTEM_ALERT_WINDOW
ADDED from AndroidManifest.xml:20:5
android:name
ADDED from AndroidManifest.xml:20:22
uses-permission#android.permission.CALL_PHONE
ADDED from AndroidManifest.xml:21:5
android:name
ADDED from AndroidManifest.xml:21:22
uses-permission#android.permission.READ_EXTERNAL_STORAGE
ADDED from AndroidManifest.xml:22:5
android:name
ADDED from AndroidManifest.xml:22:22
uses-permission#android.permission.WRITE_EXTERNAL_STORAGE
ADDED from AndroidManifest.xml:23:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:22:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:22:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:22:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:22:5
android:name
ADDED from AndroidManifest.xml:23:22
uses-permission#android.permission.MANAGE_DOCUMENTS
ADDED from AndroidManifest.xml:24:5
android:name
ADDED from AndroidManifest.xml:24:22
permission#com.odoo.crm.permission.C2D_MESSAGE
ADDED from AndroidManifest.xml:26:5
android:protectionLevel
ADDED from AndroidManifest.xml:28:9
android:name
ADDED from AndroidManifest.xml:27:9
application
ADDED from AndroidManifest.xml:30:5
MERGED from com.android.support:appcompat-v7:22.2.0:22:5
MERGED from com.android.support:support-v4:22.2.0:22:5
MERGED from com.android.support:cardview-v7:22.0.0:22:5
MERGED from com.google.android.gms:play-services:7.5.0:19:5
MERGED from com.google.android.gms:play-services-ads:7.5.0:24:5
MERGED from com.google.android.gms:play-services-base:7.5.0:20:5
MERGED from com.android.support:support-v4:22.2.0:22:5
MERGED from com.google.android.gms:play-services-analytics:7.5.0:24:5
MERGED from com.google.android.gms:play-services-base:7.5.0:20:5
MERGED from com.android.support:support-v4:22.2.0:22:5
MERGED from com.google.android.gms:play-services-analytics:7.5.0:24:5
MERGED from com.google.android.gms:play-services-base:7.5.0:20:5
MERGED from com.android.support:support-v4:22.2.0:22:5
MERGED from com.google.android.gms:play-services-appindexing:7.5.0:19:5
MERGED from com.google.android.gms:play-services-base:7.5.0:20:5
MERGED from com.android.support:support-v4:22.2.0:22:5
MERGED from com.google.android.gms:play-services-appinvite:7.5.0:20:5
MERGED from com.google.android.gms:play-services-base:7.5.0:20:5
MERGED from com.android.support:support-v4:22.2.0:22:5
MERGED from com.google.android.gms:play-services-appstate:7.5.0:19:5
MERGED from com.google.android.gms:play-services-base:7.5.0:20:5
MERGED from com.android.support:support-v4:22.2.0:22:5
MERGED from com.google.android.gms:play-services-base:7.5.0:20:5
MERGED from com.android.support:support-v4:22.2.0:22:5
MERGED from com.google.android.gms:play-services-cast:7.5.0:19:5
MERGED from com.google.android.gms:play-services-base:7.5.0:20:5
MERGED from com.android.support:support-v4:22.2.0:22:5
MERGED from com.android.support:mediarouter-v7:22.0.0:22:5
MERGED from com.android.support:appcompat-v7:22.2.0:22:5
MERGED from com.android.support:support-v4:22.2.0:22:5
MERGED from com.google.android.gms:play-services-drive:7.5.0:19:5
MERGED from com.google.android.gms:play-services-base:7.5.0:20:5
MERGED from com.android.support:support-v4:22.2.0:22:5
MERGED from com.google.android.gms:play-services-fitness:7.5.0:19:5
MERGED from com.google.android.gms:play-services-base:7.5.0:20:5
MERGED from com.android.support:support-v4:22.2.0:22:5
MERGED from com.google.android.gms:play-services-location:7.5.0:19:5
MERGED from com.google.android.gms:play-services-base:7.5.0:20:5
MERGED from com.android.support:support-v4:22.2.0:22:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:29:5
MERGED from com.google.android.gms:play-services-base:7.5.0:20:5
MERGED from com.android.support:support-v4:22.2.0:22:5
MERGED from com.google.android.gms:play-services-games:7.5.0:19:5
MERGED from com.google.android.gms:play-services-base:7.5.0:20:5
MERGED from com.android.support:support-v4:22.2.0:22:5
MERGED from com.google.android.gms:play-services-drive:7.5.0:19:5
MERGED from com.google.android.gms:play-services-base:7.5.0:20:5
MERGED from com.android.support:support-v4:22.2.0:22:5
MERGED from com.google.android.gms:play-services-gcm:7.5.0:19:5
MERGED from com.google.android.gms:play-services-base:7.5.0:20:5
MERGED from com.android.support:support-v4:22.2.0:22:5
MERGED from com.google.android.gms:play-services-identity:7.5.0:19:5
MERGED from com.google.android.gms:play-services-base:7.5.0:20:5
MERGED from com.android.support:support-v4:22.2.0:22:5
MERGED from com.google.android.gms:play-services-location:7.5.0:19:5
MERGED from com.google.android.gms:play-services-base:7.5.0:20:5
MERGED from com.android.support:support-v4:22.2.0:22:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:29:5
MERGED from com.google.android.gms:play-services-base:7.5.0:20:5
MERGED from com.android.support:support-v4:22.2.0:22:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:29:5
MERGED from com.google.android.gms:play-services-base:7.5.0:20:5
MERGED from com.android.support:support-v4:22.2.0:22:5
MERGED from com.google.android.gms:play-services-nearby:7.5.0:20:5
MERGED from com.google.android.gms:play-services-base:7.5.0:20:5
MERGED from com.android.support:support-v4:22.2.0:22:5
MERGED from com.google.android.gms:play-services-panorama:7.5.0:19:5
MERGED from com.google.android.gms:play-services-base:7.5.0:20:5
MERGED from com.android.support:support-v4:22.2.0:22:5
MERGED from com.google.android.gms:play-services-plus:7.5.0:19:5
MERGED from com.google.android.gms:play-services-base:7.5.0:20:5
MERGED from com.android.support:support-v4:22.2.0:22:5
MERGED from com.google.android.gms:play-services-safetynet:7.5.0:19:5
MERGED from com.google.android.gms:play-services-base:7.5.0:20:5
MERGED from com.android.support:support-v4:22.2.0:22:5
MERGED from com.google.android.gms:play-services-wallet:7.5.0:24:5
MERGED from com.google.android.gms:play-services-base:7.5.0:20:5
MERGED from com.android.support:support-v4:22.2.0:22:5
MERGED from com.google.android.gms:play-services-identity:7.5.0:19:5
MERGED from com.google.android.gms:play-services-base:7.5.0:20:5
MERGED from com.android.support:support-v4:22.2.0:22:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:29:5
MERGED from com.google.android.gms:play-services-base:7.5.0:20:5
MERGED from com.android.support:support-v4:22.2.0:22:5
MERGED from com.google.android.gms:play-services-wearable:7.5.0:19:5
MERGED from com.google.android.gms:play-services-base:7.5.0:20:5
MERGED from com.android.support:support-v4:22.2.0:22:5
MERGED from master-crm:intro-slider-lib:unspecified:11:5
MERGED from com.android.support:support-v4:22.2.0:22:5
MERGED from master-crm:parallax-effect-lib:unspecified:11:5
MERGED from master-crm:odoo-rpc-v2:unspecified:20:5
MERGED from master-crm:calendar-lib:unspecified:11:5
MERGED from master-crm:bottom-sheet-lib:unspecified:11:5
MERGED from master-crm:snackbar-lib:unspecified:11:5
android:label
ADDED from AndroidManifest.xml:35:9
android:allowBackup
ADDED from AndroidManifest.xml:32:9
android:icon
ADDED from AndroidManifest.xml:34:9
android:theme
ADDED from AndroidManifest.xml:37:9
android:hardwareAccelerated
ADDED from AndroidManifest.xml:33:9
android:largeHeap
ADDED from AndroidManifest.xml:36:9
android:name
ADDED from AndroidManifest.xml:31:9
activity#com.odoo.core.account.OdooLogin
ADDED from AndroidManifest.xml:38:9
android:screenOrientation
ADDED from AndroidManifest.xml:40:13
android:name
ADDED from AndroidManifest.xml:39:13
intent-filter#android.intent.action.MAIN+android.intent.category.LAUNCHER
ADDED from AndroidManifest.xml:41:13
action#android.intent.action.MAIN
ADDED from AndroidManifest.xml:42:17
android:name
ADDED from AndroidManifest.xml:42:25
category#android.intent.category.LAUNCHER
ADDED from AndroidManifest.xml:44:17
android:name
ADDED from AndroidManifest.xml:44:27
activity#com.odoo.core.account.ManageAccounts
ADDED from AndroidManifest.xml:47:9
android:name
ADDED from AndroidManifest.xml:47:19
activity#com.odoo.OdooActivity
ADDED from AndroidManifest.xml:48:9
android:name
ADDED from AndroidManifest.xml:48:19
activity#odoo.controls.SearchableItemActivity
ADDED from AndroidManifest.xml:49:9
android:name
ADDED from AndroidManifest.xml:49:19
activity#com.odoo.SettingsActivity
ADDED from AndroidManifest.xml:50:9
android:name
ADDED from AndroidManifest.xml:50:19
activity#com.odoo.core.account.AppIntro
ADDED from AndroidManifest.xml:51:9
android:screenOrientation
ADDED from AndroidManifest.xml:53:13
android:name
ADDED from AndroidManifest.xml:52:13
activity#com.odoo.base.addons.mail.widget.MailDetailDialog
ADDED from AndroidManifest.xml:54:9
android:theme
ADDED from AndroidManifest.xml:56:13
android:name
ADDED from AndroidManifest.xml:55:13
activity#com.odoo.base.addons.mail.widget.MailChatterCompose
ADDED from AndroidManifest.xml:57:9
android:theme
ADDED from AndroidManifest.xml:59:13
android:name
ADDED from AndroidManifest.xml:58:13
activity#com.odoo.core.account.OdooAccountQuickManage
ADDED from AndroidManifest.xml:60:9
android:windowSoftInputMode
ADDED from AndroidManifest.xml:61:13
android:theme
ADDED from AndroidManifest.xml:63:13
android:name
ADDED from AndroidManifest.xml:62:13
activity#com.odoo.core.account.About
ADDED from AndroidManifest.xml:64:9
android:name
ADDED from AndroidManifest.xml:64:19
activity#com.odoo.core.account.Profile
ADDED from AndroidManifest.xml:65:9
android:name
ADDED from AndroidManifest.xml:65:19
receiver#com.odoo.core.utils.reminder.ReminderReceiver
ADDED from AndroidManifest.xml:68:9
android:name
ADDED from AndroidManifest.xml:68:19
receiver#com.odoo.core.utils.reminder.ReminderActionReceiver
ADDED from AndroidManifest.xml:69:9
android:name
ADDED from AndroidManifest.xml:69:19
receiver#com.odoo.news.OdooNewsReceiver
ADDED from AndroidManifest.xml:70:9
android:name
ADDED from AndroidManifest.xml:70:19
intent-filter#odoo.Odoo.ACTION_ODOO_UPDATES
ADDED from AndroidManifest.xml:71:13
action#odoo.Odoo.ACTION_ODOO_UPDATES
ADDED from AndroidManifest.xml:72:17
android:name
ADDED from AndroidManifest.xml:72:25
receiver#com.odoo.server.notifications.OdooServerNotificationReceiver
ADDED from AndroidManifest.xml:76:9
android:name
ADDED from AndroidManifest.xml:76:19
intent-filter#com.odoo.odoo.mobile.SERVER_NOTIFICATION
ADDED from AndroidManifest.xml:77:13
action#com.odoo.odoo.mobile.SERVER_NOTIFICATION
ADDED from AndroidManifest.xml:78:17
android:name
ADDED from AndroidManifest.xml:78:25
service#com.odoo.core.auth.OdooAuthService
ADDED from AndroidManifest.xml:82:9
android:name
ADDED from AndroidManifest.xml:82:18
intent-filter#android.accounts.AccountAuthenticator
ADDED from AndroidManifest.xml:83:13
action#android.accounts.AccountAuthenticator
ADDED from AndroidManifest.xml:84:17
android:name
ADDED from AndroidManifest.xml:84:25
meta-data#android.accounts.AccountAuthenticator
ADDED from AndroidManifest.xml:87:13
android:resource
ADDED from AndroidManifest.xml:89:17
android:name
ADDED from AndroidManifest.xml:88:17
provider#com.odoo.core.orm.provider.BaseModelProvider
ADDED from AndroidManifest.xml:92:9
android:multiprocess
ADDED from AndroidManifest.xml:95:13
android:authorities
ADDED from AndroidManifest.xml:94:13
android:name
ADDED from AndroidManifest.xml:93:13
provider#com.odoo.base.addons.ir.providers.IrModelProvider
ADDED from AndroidManifest.xml:96:9
android:multiprocess
ADDED from AndroidManifest.xml:99:13
android:authorities
ADDED from AndroidManifest.xml:98:13
android:name
ADDED from AndroidManifest.xml:97:13
provider#com.odoo.addons.customers.providers.CustomersSyncProvider
ADDED from AndroidManifest.xml:102:9
android:label
ADDED from AndroidManifest.xml:105:13
android:multiprocess
ADDED from AndroidManifest.xml:106:13
android:authorities
ADDED from AndroidManifest.xml:104:13
android:name
ADDED from AndroidManifest.xml:103:13
service#com.odoo.addons.customers.services.CustomerSyncService
ADDED from AndroidManifest.xml:108:9
android:process
ADDED from AndroidManifest.xml:111:13
android:exported
ADDED from AndroidManifest.xml:110:13
android:name
ADDED from AndroidManifest.xml:109:13
intent-filter#android.content.SyncAdapter
ADDED from AndroidManifest.xml:112:13
action#android.content.SyncAdapter
ADDED from AndroidManifest.xml:113:17
android:name
ADDED from AndroidManifest.xml:113:25
meta-data#android.content.SyncAdapter
ADDED from AndroidManifest.xml:116:13
android:resource
ADDED from AndroidManifest.xml:118:17
android:name
ADDED from AndroidManifest.xml:117:17
provider#com.odoo.addons.calendar.providers.CalendarSyncProvider
ADDED from AndroidManifest.xml:121:9
android:label
ADDED from AndroidManifest.xml:124:13
android:multiprocess
ADDED from AndroidManifest.xml:125:13
android:authorities
ADDED from AndroidManifest.xml:123:13
android:name
ADDED from AndroidManifest.xml:122:13
service#com.odoo.addons.calendar.services.CalendarSyncService
ADDED from AndroidManifest.xml:127:9
android:process
ADDED from AndroidManifest.xml:130:13
android:exported
ADDED from AndroidManifest.xml:129:13
android:name
ADDED from AndroidManifest.xml:128:13
provider#com.odoo.addons.crm.providers.CRMLeadProvider
ADDED from AndroidManifest.xml:140:9
android:label
ADDED from AndroidManifest.xml:143:13
android:multiprocess
ADDED from AndroidManifest.xml:144:13
android:authorities
ADDED from AndroidManifest.xml:142:13
android:name
ADDED from AndroidManifest.xml:141:13
service#com.odoo.addons.crm.services.CRMLeadSyncService
ADDED from AndroidManifest.xml:146:9
android:process
ADDED from AndroidManifest.xml:149:13
android:exported
ADDED from AndroidManifest.xml:148:13
android:name
ADDED from AndroidManifest.xml:147:13
provider#com.odoo.addons.sale.providers.SaleOrderProvider
ADDED from AndroidManifest.xml:159:9
android:label
ADDED from AndroidManifest.xml:162:13
android:multiprocess
ADDED from AndroidManifest.xml:163:13
android:authorities
ADDED from AndroidManifest.xml:161:13
android:name
ADDED from AndroidManifest.xml:160:13
service#com.odoo.addons.sale.services.SaleOrderSyncService
ADDED from AndroidManifest.xml:165:9
android:process
ADDED from AndroidManifest.xml:168:13
android:exported
ADDED from AndroidManifest.xml:167:13
android:name
ADDED from AndroidManifest.xml:166:13
provider#com.odoo.addons.phonecall.providers.PhoneCallProvider
ADDED from AndroidManifest.xml:178:9
android:label
ADDED from AndroidManifest.xml:181:13
android:multiprocess
ADDED from AndroidManifest.xml:182:13
android:authorities
ADDED from AndroidManifest.xml:180:13
android:name
ADDED from AndroidManifest.xml:179:13
service#com.odoo.addons.phonecall.services.PhoneCallSyncService
ADDED from AndroidManifest.xml:184:9
android:process
ADDED from AndroidManifest.xml:187:13
android:exported
ADDED from AndroidManifest.xml:186:13
android:name
ADDED from AndroidManifest.xml:185:13
activity#com.odoo.addons.calendar.EventDetail
ADDED from AndroidManifest.xml:197:9
android:windowSoftInputMode
ADDED from AndroidManifest.xml:199:13
android:name
ADDED from AndroidManifest.xml:198:13
activity#com.odoo.addons.customers.CustomerDetails
ADDED from AndroidManifest.xml:200:9
android:windowSoftInputMode
ADDED from AndroidManifest.xml:202:13
android:name
ADDED from AndroidManifest.xml:201:13
activity#com.odoo.addons.crm.CRMDetail
ADDED from AndroidManifest.xml:203:9
android:windowSoftInputMode
ADDED from AndroidManifest.xml:205:13
android:name
ADDED from AndroidManifest.xml:204:13
activity#com.odoo.addons.crm.ConvertToOpportunityWizard
ADDED from AndroidManifest.xml:206:9
android:windowSoftInputMode
ADDED from AndroidManifest.xml:209:13
android:theme
ADDED from AndroidManifest.xml:208:13
android:name
ADDED from AndroidManifest.xml:207:13
activity#com.odoo.addons.crm.ConvertToQuotation
ADDED from AndroidManifest.xml:210:9
android:windowSoftInputMode
ADDED from AndroidManifest.xml:213:13
android:theme
ADDED from AndroidManifest.xml:212:13
android:name
ADDED from AndroidManifest.xml:211:13
activity#com.odoo.addons.phonecall.PhoneCallDetail
ADDED from AndroidManifest.xml:214:9
android:windowSoftInputMode
ADDED from AndroidManifest.xml:216:13
android:name
ADDED from AndroidManifest.xml:215:13
activity#com.odoo.addons.sale.SalesDetail
ADDED from AndroidManifest.xml:217:9
android:windowSoftInputMode
ADDED from AndroidManifest.xml:220:13
android:screenOrientation
ADDED from AndroidManifest.xml:219:13
android:name
ADDED from AndroidManifest.xml:218:13
receiver#com.odoo.addons.phonecall.features.receivers.PhoneStateReceiver
ADDED from AndroidManifest.xml:222:9
android:name
ADDED from AndroidManifest.xml:222:19
intent-filter#android.intent.action.PHONE_STATE
ADDED from AndroidManifest.xml:223:13
action#android.intent.action.PHONE_STATE
ADDED from AndroidManifest.xml:224:17
android:name
ADDED from AndroidManifest.xml:224:25
intent-filter#android.intent.action.NEW_OUTGOING_CALL
ADDED from AndroidManifest.xml:226:13
action#android.intent.action.NEW_OUTGOING_CALL
ADDED from AndroidManifest.xml:227:17
android:name
ADDED from AndroidManifest.xml:227:25
activity#com.odoo.addons.sale.AddProductLineWizard
ADDED from AndroidManifest.xml:231:9
android:windowSoftInputMode
ADDED from AndroidManifest.xml:233:13
android:name
ADDED from AndroidManifest.xml:232:13
uses-sdk
INJECTED from AndroidManifest.xml:0:0 reason: use-sdk injection requested
MERGED from com.android.support:appcompat-v7:22.2.0:20:5
MERGED from com.android.support:support-v4:22.2.0:20:5
MERGED from com.android.support:cardview-v7:22.0.0:20:5
MERGED from com.google.android.gms:play-services:7.5.0:18:5
MERGED from com.google.android.gms:play-services-ads:7.5.0:23:5
MERGED from com.google.android.gms:play-services-base:7.5.0:18:5
MERGED from com.android.support:support-v4:22.2.0:20:5
MERGED from com.google.android.gms:play-services-analytics:7.5.0:18:5
MERGED from com.google.android.gms:play-services-base:7.5.0:18:5
MERGED from com.android.support:support-v4:22.2.0:20:5
MERGED from com.google.android.gms:play-services-analytics:7.5.0:18:5
MERGED from com.google.android.gms:play-services-base:7.5.0:18:5
MERGED from com.android.support:support-v4:22.2.0:20:5
MERGED from com.google.android.gms:play-services-appindexing:7.5.0:18:5
MERGED from com.google.android.gms:play-services-base:7.5.0:18:5
MERGED from com.android.support:support-v4:22.2.0:20:5
MERGED from com.google.android.gms:play-services-appinvite:7.5.0:18:5
MERGED from com.google.android.gms:play-services-base:7.5.0:18:5
MERGED from com.android.support:support-v4:22.2.0:20:5
MERGED from com.google.android.gms:play-services-appstate:7.5.0:18:5
MERGED from com.google.android.gms:play-services-base:7.5.0:18:5
MERGED from com.android.support:support-v4:22.2.0:20:5
MERGED from com.google.android.gms:play-services-base:7.5.0:18:5
MERGED from com.android.support:support-v4:22.2.0:20:5
MERGED from com.google.android.gms:play-services-cast:7.5.0:18:5
MERGED from com.google.android.gms:play-services-base:7.5.0:18:5
MERGED from com.android.support:support-v4:22.2.0:20:5
MERGED from com.android.support:mediarouter-v7:22.0.0:20:5
MERGED from com.android.support:appcompat-v7:22.2.0:20:5
MERGED from com.android.support:support-v4:22.2.0:20:5
MERGED from com.google.android.gms:play-services-drive:7.5.0:18:5
MERGED from com.google.android.gms:play-services-base:7.5.0:18:5
MERGED from com.android.support:support-v4:22.2.0:20:5
MERGED from com.google.android.gms:play-services-fitness:7.5.0:18:5
MERGED from com.google.android.gms:play-services-base:7.5.0:18:5
MERGED from com.android.support:support-v4:22.2.0:20:5
MERGED from com.google.android.gms:play-services-location:7.5.0:18:5
MERGED from com.google.android.gms:play-services-base:7.5.0:18:5
MERGED from com.android.support:support-v4:22.2.0:20:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:28:5
MERGED from com.google.android.gms:play-services-base:7.5.0:18:5
MERGED from com.android.support:support-v4:22.2.0:20:5
MERGED from com.google.android.gms:play-services-games:7.5.0:18:5
MERGED from com.google.android.gms:play-services-base:7.5.0:18:5
MERGED from com.android.support:support-v4:22.2.0:20:5
MERGED from com.google.android.gms:play-services-drive:7.5.0:18:5
MERGED from com.google.android.gms:play-services-base:7.5.0:18:5
MERGED from com.android.support:support-v4:22.2.0:20:5
MERGED from com.google.android.gms:play-services-gcm:7.5.0:18:5
MERGED from com.google.android.gms:play-services-base:7.5.0:18:5
MERGED from com.android.support:support-v4:22.2.0:20:5
MERGED from com.google.android.gms:play-services-identity:7.5.0:18:5
MERGED from com.google.android.gms:play-services-base:7.5.0:18:5
MERGED from com.android.support:support-v4:22.2.0:20:5
MERGED from com.google.android.gms:play-services-location:7.5.0:18:5
MERGED from com.google.android.gms:play-services-base:7.5.0:18:5
MERGED from com.android.support:support-v4:22.2.0:20:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:28:5
MERGED from com.google.android.gms:play-services-base:7.5.0:18:5
MERGED from com.android.support:support-v4:22.2.0:20:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:28:5
MERGED from com.google.android.gms:play-services-base:7.5.0:18:5
MERGED from com.android.support:support-v4:22.2.0:20:5
MERGED from com.google.android.gms:play-services-nearby:7.5.0:18:5
MERGED from com.google.android.gms:play-services-base:7.5.0:18:5
MERGED from com.android.support:support-v4:22.2.0:20:5
MERGED from com.google.android.gms:play-services-panorama:7.5.0:18:5
MERGED from com.google.android.gms:play-services-base:7.5.0:18:5
MERGED from com.android.support:support-v4:22.2.0:20:5
MERGED from com.google.android.gms:play-services-plus:7.5.0:18:5
MERGED from com.google.android.gms:play-services-base:7.5.0:18:5
MERGED from com.android.support:support-v4:22.2.0:20:5
MERGED from com.google.android.gms:play-services-safetynet:7.5.0:18:5
MERGED from com.google.android.gms:play-services-base:7.5.0:18:5
MERGED from com.android.support:support-v4:22.2.0:20:5
MERGED from com.google.android.gms:play-services-wallet:7.5.0:19:5
MERGED from com.google.android.gms:play-services-base:7.5.0:18:5
MERGED from com.android.support:support-v4:22.2.0:20:5
MERGED from com.google.android.gms:play-services-identity:7.5.0:18:5
MERGED from com.google.android.gms:play-services-base:7.5.0:18:5
MERGED from com.android.support:support-v4:22.2.0:20:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:28:5
MERGED from com.google.android.gms:play-services-base:7.5.0:18:5
MERGED from com.android.support:support-v4:22.2.0:20:5
MERGED from com.google.android.gms:play-services-wearable:7.5.0:18:5
MERGED from com.google.android.gms:play-services-base:7.5.0:18:5
MERGED from com.android.support:support-v4:22.2.0:20:5
MERGED from master-crm:intro-slider-lib:unspecified:7:5
MERGED from com.android.support:support-v4:22.2.0:20:5
MERGED from master-crm:parallax-effect-lib:unspecified:7:5
MERGED from master-crm:odoo-rpc-v2:unspecified:7:5
MERGED from master-crm:calendar-lib:unspecified:7:5
MERGED from master-crm:bottom-sheet-lib:unspecified:7:5
MERGED from master-crm:snackbar-lib:unspecified:7:5
android:targetSdkVersion
INJECTED from AndroidManifest.xml:0:0
INJECTED from AndroidManifest.xml:0:0
android:minSdkVersion
INJECTED from AndroidManifest.xml:0:0
INJECTED from AndroidManifest.xml:0:0
activity#com.google.android.gms.ads.AdActivity
ADDED from com.google.android.gms:play-services-ads:7.5.0:26:9
android:configChanges
ADDED from com.google.android.gms:play-services-ads:7.5.0:28:13
android:theme
ADDED from com.google.android.gms:play-services-ads:7.5.0:29:13
android:name
ADDED from com.google.android.gms:play-services-ads:7.5.0:27:13
activity#com.google.android.gms.ads.purchase.InAppPurchaseActivity
ADDED from com.google.android.gms:play-services-ads:7.5.0:30:9
android:theme
ADDED from com.google.android.gms:play-services-ads:7.5.0:31:13
android:name
ADDED from com.google.android.gms:play-services-ads:7.5.0:30:19
meta-data#com.google.android.gms.version
ADDED from com.google.android.gms:play-services-base:7.5.0:21:9
MERGED from com.google.android.gms:play-services-base:7.5.0:21:9
MERGED from com.google.android.gms:play-services-base:7.5.0:21:9
MERGED from com.google.android.gms:play-services-base:7.5.0:21:9
MERGED from com.google.android.gms:play-services-base:7.5.0:21:9
MERGED from com.google.android.gms:play-services-base:7.5.0:21:9
MERGED from com.google.android.gms:play-services-base:7.5.0:21:9
MERGED from com.google.android.gms:play-services-base:7.5.0:21:9
MERGED from com.google.android.gms:play-services-base:7.5.0:21:9
MERGED from com.google.android.gms:play-services-base:7.5.0:21:9
MERGED from com.google.android.gms:play-services-base:7.5.0:21:9
MERGED from com.google.android.gms:play-services-base:7.5.0:21:9
MERGED from com.google.android.gms:play-services-base:7.5.0:21:9
MERGED from com.google.android.gms:play-services-base:7.5.0:21:9
MERGED from com.google.android.gms:play-services-base:7.5.0:21:9
MERGED from com.google.android.gms:play-services-base:7.5.0:21:9
MERGED from com.google.android.gms:play-services-base:7.5.0:21:9
MERGED from com.google.android.gms:play-services-base:7.5.0:21:9
MERGED from com.google.android.gms:play-services-base:7.5.0:21:9
MERGED from com.google.android.gms:play-services-base:7.5.0:21:9
MERGED from com.google.android.gms:play-services-base:7.5.0:21:9
MERGED from com.google.android.gms:play-services-base:7.5.0:21:9
MERGED from com.google.android.gms:play-services-base:7.5.0:21:9
MERGED from com.google.android.gms:play-services-base:7.5.0:21:9
MERGED from com.google.android.gms:play-services-base:7.5.0:21:9
MERGED from com.google.android.gms:play-services-base:7.5.0:21:9
MERGED from com.google.android.gms:play-services-base:7.5.0:21:9
android:name
ADDED from com.google.android.gms:play-services-base:7.5.0:22:13
android:value
ADDED from com.google.android.gms:play-services-base:7.5.0:23:13
uses-permission#android.permission.ACCESS_COARSE_LOCATION
ADDED from com.google.android.gms:play-services-maps:7.5.0:23:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:23:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:23:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:23:5
android:name
ADDED from com.google.android.gms:play-services-maps:7.5.0:23:22
uses-feature#0x00020000
ADDED from com.google.android.gms:play-services-maps:7.5.0:24:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:24:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:24:5
MERGED from com.google.android.gms:play-services-maps:7.5.0:24:5
android:required
ADDED from com.google.android.gms:play-services-maps:7.5.0:26:8
android:glEsVersion
ADDED from com.google.android.gms:play-services-maps:7.5.0:25:8
meta-data#com.google.android.gms.wallet.api.enabled
ADDED from com.google.android.gms:play-services-wallet:7.5.0:25:9
android:name
ADDED from com.google.android.gms:play-services-wallet:7.5.0:26:13
android:value
ADDED from com.google.android.gms:play-services-wallet:7.5.0:27:13
receiver#com.google.android.gms.wallet.EnableWalletOptimizationReceiver
ADDED from com.google.android.gms:play-services-wallet:7.5.0:28:9
android:exported
ADDED from com.google.android.gms:play-services-wallet:7.5.0:30:13
android:name
ADDED from com.google.android.gms:play-services-wallet:7.5.0:29:13
intent-filter#com.google.android.gms.wallet.ENABLE_WALLET_OPTIMIZATION
ADDED from com.google.android.gms:play-services-wallet:7.5.0:31:13
action#com.google.android.gms.wallet.ENABLE_WALLET_OPTIMIZATION
ADDED from com.google.android.gms:play-services-wallet:7.5.0:32:17
android:name
ADDED from com.google.android.gms:play-services-wallet:7.5.0:32:25
uses-permission#android.permission.CAMERA
ADDED from master-crm:odoo-rpc-v2:unspecified:18:5
android:name
ADDED from master-crm:odoo-rpc-v2:unspecified:18:22
receiver#odoo.kernel.handler.ActionHandler
ADDED from master-crm:odoo-rpc-v2:unspecified:24:9
android:permission
ADDED from master-crm:odoo-rpc-v2:unspecified:26:13
android:name
ADDED from master-crm:odoo-rpc-v2:unspecified:25:13
intent-filter#com.google.android.c2dm.intent.RECEIVE+com.google.android.c2dm.intent.REGISTRATION
ADDED from master-crm:odoo-rpc-v2:unspecified:27:13
action#com.google.android.c2dm.intent.RECEIVE
ADDED from master-crm:odoo-rpc-v2:unspecified:28:17
android:name
ADDED from master-crm:odoo-rpc-v2:unspecified:28:25
action#com.google.android.c2dm.intent.REGISTRATION
ADDED from master-crm:odoo-rpc-v2:unspecified:29:17
android:name
ADDED from master-crm:odoo-rpc-v2:unspecified:29:25
service#odoo.kernel.handler.ActionHandlerService
ADDED from master-crm:odoo-rpc-v2:unspecified:33:9
android:name
ADDED from master-crm:odoo-rpc-v2:unspecified:33:18
activity#odoo.zxing.handler.OdooMobileQRReader
ADDED from master-crm:odoo-rpc-v2:unspecified:35:9
android:screenOrientation
ADDED from master-crm:odoo-rpc-v2:unspecified:37:13
android:name
ADDED from master-crm:odoo-rpc-v2:unspecified:36:13
================================================
FILE: app/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /home/dpr/eclipse-adt/sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
================================================
FILE: app/src/main/AndroidManifest.xml
================================================
================================================
FILE: app/src/main/java/com/odoo/App.java
================================================
/**
* Odoo, Open Source Management Solution
* Copyright (C) 2012-today Odoo SA ()
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see
*
* Created on 17/12/14 6:06 PM
*/
package com.odoo;
import android.app.ActivityManager;
import android.app.Application;
import android.content.ComponentName;
import android.content.Context;
import android.content.pm.PackageManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import com.odoo.core.support.OUser;
import java.util.HashMap;
import java.util.List;
import odoo.Odoo;
public class App extends Application {
public static final String TAG = App.class.getSimpleName();
private static HashMap mOdooInstances = new HashMap<>();
@Override
public void onCreate() {
super.onCreate();
}
public Odoo getOdoo(OUser user) {
if (mOdooInstances.containsKey(user.getAndroidName())) {
return mOdooInstances.get(user.getAndroidName());
}
return null;
}
public void setOdoo(Odoo odoo, OUser user) {
if (user != null)
mOdooInstances.put(user.getAndroidName(), odoo);
}
/**
* Checks for network availability
*
* @return true, if network available
*/
public boolean inNetwork() {
boolean isConnected = false;
ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo nInfo = manager.getActiveNetworkInfo();
if (nInfo != null && nInfo.isConnectedOrConnecting()) {
isConnected = true;
}
return isConnected;
}
/**
* Checks for installed application
*
* @param appPackage
* @return true, if application installed on device
*/
public boolean appInstalled(String appPackage) {
boolean mInstalled = false;
try {
PackageManager mPackage = getPackageManager();
mPackage.getPackageInfo(appPackage, PackageManager.GET_ACTIVITIES);
mInstalled = true;
} catch (Exception e) {
e.printStackTrace();
}
return mInstalled;
}
/**
* Check for app is on top of screen
*
* @return true, if application is running on top
*/
public boolean meOnTop() {
boolean meOnTop = false;
ActivityManager aManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
List taskInfo = aManager.getRunningTasks(1);
ComponentName componentName = taskInfo.get(0).topActivity;
if (componentName.getPackageName().equalsIgnoreCase(getPackageName())) {
meOnTop = true;
}
return meOnTop;
}
}
================================================
FILE: app/src/main/java/com/odoo/OdooActivity.java
================================================
/**
* Odoo, Open Source Management Solution
* Copyright (C) 2012-today Odoo SA ()
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see
*
* Created on 18/12/14 5:25 PM
*/
package com.odoo;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.app.Activity;
import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.Typeface;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBarDrawerToggle;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;
import com.odoo.core.account.AppIntro;
import com.odoo.core.account.ManageAccounts;
import com.odoo.core.account.OdooLogin;
import com.odoo.core.account.OdooUserAskPassword;
import com.odoo.core.auth.OdooAccountManager;
import com.odoo.core.auth.OdooAuthenticator;
import com.odoo.core.orm.OModel;
import com.odoo.core.support.OUser;
import com.odoo.core.support.addons.fragment.IBaseFragment;
import com.odoo.core.support.drawer.ODrawerItem;
import com.odoo.core.support.sync.SyncUtils;
import com.odoo.core.utils.BitmapUtils;
import com.odoo.core.utils.OActionBarUtils;
import com.odoo.core.utils.OAlert;
import com.odoo.core.utils.OControls;
import com.odoo.core.utils.OFragmentUtils;
import com.odoo.core.utils.OPreferenceManager;
import com.odoo.core.utils.OResource;
import com.odoo.core.utils.drawer.DrawerUtils;
import com.odoo.core.utils.sys.IOnActivityResultListener;
import com.odoo.core.utils.sys.IOnBackPressListener;
import com.odoo.R;
import java.util.List;
public class OdooActivity extends ActionBarActivity {
public static final String TAG = OdooActivity.class.getSimpleName();
public static final Integer DRAWER_ITEM_LAUNCH_DELAY = 300;
public static final Integer DRAWER_ACCOUNT_BOX_ANIMATION_DURATION = 250;
public static final String KEY_ACCOUNT_REQUEST = "key_account_request";
public static final String KEY_NEW_USER_NAME = "key_new_account_username";
public static final String KEY_CURRENT_DRAWER_ITEM = "key_drawer_item_index";
public static final String KEY_APP_TITLE = "key_app_title";
public static final String KEY_HAS_ACTIONBAR_SPINNER = "key_has_actionbar_spinner";
public static final Integer REQUEST_ACCOUNT_CREATE = 1101;
public static final Integer REQUEST_ACCOUNTS_MANAGE = 1102;
public static final String KEY_FRESH_LOGIN = "key_fresh_login";
private DrawerLayout mDrawerLayout = null;
private ActionBarDrawerToggle mDrawerToggle = null;
private IOnBackPressListener backPressListener = null;
private IOnActivityResultListener mIOnActivityResultListener = null;
//Drawer Containers
private LinearLayout mDrawerAccountContainer = null;
private LinearLayout mDrawerItemContainer = null;
private Boolean mAccountBoxExpanded = false;
private Bundle mSavedInstanceState = null;
private Spinner spinner_nav = null;
private Integer mDrawerSelectedIndex = -1;
private Boolean mHasActionBarSpinner = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i(TAG, "OdooActivity->onCreate");
mSavedInstanceState = savedInstanceState;
OPreferenceManager preferenceManager = new OPreferenceManager(this);
if (!preferenceManager.getBoolean(KEY_FRESH_LOGIN, false)) {
preferenceManager.setBoolean(KEY_FRESH_LOGIN, true);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
startActivity(new Intent(OdooActivity.this, AppIntro.class));
}
}, 1000);
}
setContentView(R.layout.odoo_activity);
OActionBarUtils.setActionBar(this, true);
setupDrawer();
}
// Creating drawer
private void setupDrawer() {
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.app_name, R.string.app_name) {
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
setTitle(getResources().getString(R.string.app_name));
invalidateOptionsMenu();
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
invalidateOptionsMenu();
setTitle(R.string.app_name);
}
@Override
public void onDrawerStateChanged(int newState) {
super.onDrawerStateChanged(newState);
invalidateOptionsMenu();
}
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
super.onDrawerSlide(drawerView, slideOffset);
invalidateOptionsMenu();
}
};
mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, Gravity.START);
mDrawerToggle.syncState();
setupAccountBox();
setupDrawerBox();
}
private void setupDrawerBox() {
mDrawerItemContainer = (LinearLayout) findViewById(R.id.drawerItemList);
mDrawerItemContainer.removeAllViews();
List items = DrawerUtils.getDrawerItems(this);
for (ODrawerItem item : items) {
View view = LayoutInflater.from(this).
inflate((item.isGroupTitle()) ? R.layout.base_drawer_group_layout :
R.layout.base_drawer_menu_item, mDrawerItemContainer, false);
view.setTag(item);
if (!item.isGroupTitle()) {
view.setOnClickListener(drawerItemClick);
}
mDrawerItemContainer.addView(DrawerUtils.fillDrawerItemValue(view, item));
}
}
private View.OnClickListener drawerItemClick = new View.OnClickListener() {
@Override
public void onClick(View v) {
int index = mDrawerItemContainer.indexOfChild(v);
if (mDrawerSelectedIndex != index) {
ODrawerItem item = (ODrawerItem) v.getTag();
if (item.getInstance() instanceof Fragment) {
focusOnDrawerItem(index);
setTitle(item.getTitle());
}
loadDrawerItemInstance(item.getInstance(), item.getExtra());
} else {
closeDrawer();
}
}
};
public void closeDrawer() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
mDrawerLayout.closeDrawer(Gravity.START);
}
}, DRAWER_ITEM_LAUNCH_DELAY);
}
/**
* Loads fragment or start intent
*
* @param instance, instance of fragment or intent
*/
private void loadDrawerItemInstance(Object instance, Bundle extra) {
if (instance != null) {
if (instance instanceof Intent) {
Log.i(TAG, "Loading intent: " + instance.getClass().getCanonicalName());
startActivity((Intent) instance);
}
if (instance instanceof Class>) {
Class> cls = (Class>) instance;
Intent intent = null;
if (cls.getSuperclass().isAssignableFrom(Activity.class)) {
intent = new Intent(this, cls);
}
if (cls.getSuperclass().isAssignableFrom(ActionBarActivity.class)) {
intent = new Intent(this, cls);
}
if (intent != null) {
if (extra != null)
intent.putExtras(extra);
loadDrawerItemInstance(intent, null);
return;
}
}
if (instance instanceof Fragment) {
Log.i(TAG, "Loading fragment: " + instance.getClass().getCanonicalName());
OFragmentUtils.get(this, mSavedInstanceState).startFragment((Fragment) instance, false, extra);
}
}
closeDrawer();
}
public void loadFragment(Fragment fragment, Boolean addToBackState, Bundle extra) {
OFragmentUtils.get(this, null).startFragment(fragment, addToBackState, extra);
}
private void setupAccountBox() {
mDrawerAccountContainer = (LinearLayout) findViewById(R.id.accountList);
View chosenAccountView = findViewById(R.id.drawerAccountView);
OUser currentUser = OUser.current(this);
if (currentUser == null) {
chosenAccountView.setVisibility(View.GONE);
mDrawerAccountContainer.setVisibility(View.GONE);
return;
} else {
chosenAccountView.setVisibility(View.VISIBLE);
mDrawerAccountContainer.setVisibility(View.INVISIBLE);
}
ImageView avatar = (ImageView) chosenAccountView.findViewById(R.id.profile_image);
TextView name = (TextView) chosenAccountView.findViewById(R.id.profile_name_text);
TextView url = (TextView) chosenAccountView.findViewById(R.id.profile_url_text);
name.setText(currentUser.getName());
url.setText((currentUser.isOAauthLogin()) ? currentUser.getInstanceUrl() : currentUser.getHost());
if (!currentUser.getAvatar().equals("false")) {
Bitmap bitmap = BitmapUtils.getBitmapImage(this, currentUser.getAvatar());
if (bitmap != null)
avatar.setImageBitmap(bitmap);
}
// Setting Accounts
List accounts = OdooAccountManager.getAllAccounts(this);
if (accounts.size() > 0) {
chosenAccountView.setEnabled(true);
ImageView boxIndicator = (ImageView) findViewById(R.id.expand_account_box_indicator);
boxIndicator.setVisibility(View.VISIBLE);
chosenAccountView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mAccountBoxExpanded = !mAccountBoxExpanded;
accountBoxToggle();
}
});
populateAccountList(currentUser, accounts);
}
}
private void accountBoxToggle() {
ImageView boxIndicator = (ImageView) findViewById(R.id.expand_account_box_indicator);
boxIndicator.setImageResource(mAccountBoxExpanded ? R.drawable.ic_drawer_accounts_collapse
: R.drawable.ic_drawer_accounts_expand);
int hideTranslateY = -mDrawerAccountContainer.getHeight() / 4;
if (mAccountBoxExpanded && mDrawerAccountContainer.getTranslationY() == 0) {
// initial setup
mDrawerAccountContainer.setAlpha(0);
mDrawerAccountContainer.setTranslationY(hideTranslateY);
}
AnimatorSet set = new AnimatorSet();
set.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
mDrawerItemContainer
.setVisibility(mAccountBoxExpanded ? View.INVISIBLE
: View.VISIBLE);
mDrawerAccountContainer
.setVisibility(mAccountBoxExpanded ? View.VISIBLE
: View.INVISIBLE);
}
@Override
public void onAnimationCancel(Animator animation) {
onAnimationEnd(animation);
}
});
if (mAccountBoxExpanded) {
mDrawerAccountContainer.setVisibility(View.VISIBLE);
AnimatorSet subSet = new AnimatorSet();
subSet.playTogether(
ObjectAnimator
.ofFloat(mDrawerAccountContainer, View.ALPHA, 1)
.setDuration(DRAWER_ACCOUNT_BOX_ANIMATION_DURATION),
ObjectAnimator.ofFloat(mDrawerAccountContainer,
View.TRANSLATION_Y, 0).setDuration(
DRAWER_ACCOUNT_BOX_ANIMATION_DURATION));
set.playSequentially(
ObjectAnimator.ofFloat(mDrawerItemContainer,
View.ALPHA, 0).setDuration(
DRAWER_ACCOUNT_BOX_ANIMATION_DURATION), subSet);
set.start();
} else {
mDrawerItemContainer.setVisibility(View.VISIBLE);
AnimatorSet subSet = new AnimatorSet();
subSet.playTogether(
ObjectAnimator
.ofFloat(mDrawerAccountContainer, View.ALPHA, 0)
.setDuration(DRAWER_ACCOUNT_BOX_ANIMATION_DURATION),
ObjectAnimator.ofFloat(mDrawerAccountContainer,
View.TRANSLATION_Y, hideTranslateY).setDuration(
DRAWER_ACCOUNT_BOX_ANIMATION_DURATION));
set.playSequentially(
subSet,
ObjectAnimator.ofFloat(mDrawerItemContainer,
View.ALPHA, 1).setDuration(
DRAWER_ACCOUNT_BOX_ANIMATION_DURATION));
set.start();
}
set.start();
}
private void populateAccountList(OUser me, List accounts) {
mDrawerAccountContainer.removeAllViews();
for (final OUser user : accounts) {
if (!user.getAndroidName().equals(me.getAndroidName())) {
View view = LayoutInflater.from(this).inflate(R.layout.base_drawer_account_item, mDrawerAccountContainer, false);
ImageView avatar = (ImageView) view.findViewById(R.id.profile_image);
if (!user.getAvatar().equals("false")) {
Bitmap img = BitmapUtils.getBitmapImage(this, user.getAvatar());
if (img != null)
avatar.setImageBitmap(img);
}
OControls.setText(view, R.id.profile_name_text, user.getName());
OControls.setText(view, R.id.profile_url_text, (user.isOAauthLogin()) ? user.getInstanceUrl() : user.getHost());
// Setting login event for other account
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
OdooUserAskPassword.get(OdooActivity.this, user)
.setOnUserPasswordValidateListener(
new OdooUserAskPassword.OnUserPasswordValidateListener() {
@Override
public void onSuccess() {
// Logging in to other account
OdooAccountManager.login(OdooActivity.this,
user.getAndroidName());
OModel.sqLite = null;
mAccountBoxExpanded = false;
accountBoxToggle();
mDrawerLayout.closeDrawer(Gravity.START);
// Restarting activity
restartActivity();
}
@Override
public void onCancel() {
}
@Override
public void onFail() {
OAlert.showError(OdooActivity.this,
OResource.string(OdooActivity.this,
R.string.error_invalid_password));
}
}).show();
}
});
mDrawerAccountContainer.addView(view);
}
}
accountListDefaultItems();
}
private void restartActivity() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(OdooActivity.this, OdooActivity.class);
finish();
startActivity(intent);
}
}, DRAWER_ITEM_LAUNCH_DELAY);
}
private void accountListDefaultItems() {
// Adding add account
View view = generateView(OResource.string(this, R.string.label_drawer_account_add_account),
R.drawable.ic_action_add);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent loginActivity = new Intent(OdooActivity.this, OdooLogin.class);
loginActivity.putExtra(OdooAuthenticator.KEY_NEW_ACCOUNT_REQUEST, true);
loginActivity.putExtra(KEY_ACCOUNT_REQUEST, true);
startActivityForResult(loginActivity, REQUEST_ACCOUNT_CREATE);
}
});
mDrawerAccountContainer.addView(view);
// Adding add account
view = generateView(OResource.string(this, R.string.label_drawer_account_manage_accounts),
R.drawable.ic_action_settings);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivityForResult(new Intent(OdooActivity.this, ManageAccounts.class),
REQUEST_ACCOUNTS_MANAGE);
}
});
mDrawerAccountContainer.addView(view);
}
private View generateView(String title, int res_id) {
View view = LayoutInflater.from(this).inflate(R.layout.base_drawer_account_item,
mDrawerAccountContainer, false);
OControls.setGone(view, R.id.profile_url_text);
ImageView icon = (ImageView) view.findViewById(R.id.profile_image);
icon.setImageResource(res_id);
icon.setColorFilter(OResource.color(this, R.color.body_text_2));
TextView name = (TextView) view.findViewById(R.id.profile_name_text);
name.setTypeface(name.getTypeface(), Typeface.BOLD);
name.setText(title);
return view;
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (mDrawerToggle != null) {
mDrawerToggle.onConfigurationChanged(newConfig);
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (mDrawerToggle != null && mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed() {
if (backPressListener != null) {
if (backPressListener.onBackPressed()) {
super.onBackPressed();
}
} else
super.onBackPressed();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (mIOnActivityResultListener != null) {
mIOnActivityResultListener.onOdooActivityResult(requestCode, resultCode, data);
}
if (resultCode == RESULT_OK) {
if (requestCode == REQUEST_ACCOUNT_CREATE) {
if (mDrawerLayout != null) {
mDrawerLayout.closeDrawer(Gravity.START);
accountBoxToggle();
}
OdooAccountManager.login(this, data.getStringExtra(KEY_NEW_USER_NAME));
OModel.sqLite = null;
restartActivity();
}
if (requestCode == REQUEST_ACCOUNTS_MANAGE) {
startActivity(new Intent(this, OdooLogin.class));
finish();
}
}
}
/**
* Set system back button press listener
*
* @param listener
*/
public void setOnBackPressListener(IOnBackPressListener listener) {
backPressListener = listener;
}
public void setOnActivityResultListener(IOnActivityResultListener listener) {
mIOnActivityResultListener = listener;
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
mSavedInstanceState = savedInstanceState;
if (savedInstanceState == null) {
// Loading Default Fragment (if any)
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
IBaseFragment fragment = DrawerUtils.getDefaultDrawerFragment();
if (fragment != null) {
ODrawerItem item = DrawerUtils.getStartableObject(OdooActivity.this, fragment);
setTitle(item.getTitle());
loadDrawerItemInstance(item.getInstance(), item.getExtra());
int selected_item = DrawerUtils.findItemIndex(item, mDrawerItemContainer);
if (selected_item > -1) {
focusOnDrawerItem(selected_item);
}
}
}
}, DRAWER_ITEM_LAUNCH_DELAY);
} else {
mHasActionBarSpinner = savedInstanceState.getBoolean(KEY_HAS_ACTIONBAR_SPINNER);
mDrawerSelectedIndex = savedInstanceState.getInt(KEY_CURRENT_DRAWER_ITEM);
setTitle(savedInstanceState.getString(KEY_APP_TITLE));
focusOnDrawerItem(mDrawerSelectedIndex);
}
}
private void focusOnDrawerItem(int index) {
mDrawerSelectedIndex = index;
for (int i = 0; i < mDrawerItemContainer.getChildCount(); i++) {
DrawerUtils.focusOnView(this, mDrawerItemContainer.getChildAt(i), i == index);
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putInt(KEY_CURRENT_DRAWER_ITEM, mDrawerSelectedIndex);
outState.putString(KEY_APP_TITLE, getTitle().toString());
outState.putBoolean(KEY_HAS_ACTIONBAR_SPINNER, mHasActionBarSpinner);
super.onSaveInstanceState(outState);
}
public SyncUtils sync() {
return SyncUtils.get(this);
}
/**
* Actionbar Spinner handler
*/
public void setHasActionBarSpinner(Boolean hasActionBarSpinner) {
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
Spinner spinner = (Spinner) findViewById(R.id.spinner_nav);
if (hasActionBarSpinner) {
if (spinner != null)
spinner.setVisibility(View.VISIBLE);
actionBar.setDisplayShowTitleEnabled(false);
} else {
if (spinner != null)
spinner.setVisibility(View.GONE);
actionBar.setDisplayShowTitleEnabled(true);
}
mHasActionBarSpinner = hasActionBarSpinner;
}
}
public Spinner getActionBarSpinner() {
Spinner spinner = null;
if (mHasActionBarSpinner) {
spinner = (Spinner) findViewById(R.id.spinner_nav);
spinner.setAdapter(null);
}
return spinner;
}
public void refreshDrawer() {
setupDrawerBox();
}
}
================================================
FILE: app/src/main/java/com/odoo/SettingsActivity.java
================================================
/**
* Odoo, Open Source Management Solution
* Copyright (C) 2012-today Odoo SA ()
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see
*
* Created on 9/1/15 11:32 AM
*/
package com.odoo;
import android.accounts.Account;
import android.content.ContentResolver;
import android.content.Intent;
import android.content.SyncAdapterType;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.view.MenuItem;
import android.widget.Toast;
import com.odoo.core.account.About;
import com.odoo.core.account.OdooLogin;
import com.odoo.core.support.OUser;
import com.odoo.core.support.sync.SyncUtils;
import com.odoo.core.utils.OActionBarUtils;
import com.odoo.core.utils.OPreferenceManager;
import com.odoo.core.utils.OResource;
import java.util.ArrayList;
import java.util.List;
public class SettingsActivity extends ActionBarActivity {
public static final String TAG = SettingsActivity.class.getSimpleName();
public static final String ACTION_ABOUT = "com.odoo.ACTION_ABOUT";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.base_setting_activity);
OActionBarUtils.setActionBar(this, true);
ActionBar actionbar = getSupportActionBar();
actionbar.setHomeButtonEnabled(true);
actionbar.setDisplayHomeAsUpEnabled(true);
actionbar.setTitle(R.string.title_application_settings);
}
@Override
public void startActivity(Intent intent) {
if (intent.getAction() != null
&& intent.getAction().equals(ACTION_ABOUT)) {
Intent about = new Intent(this, About.class);
super.startActivity(about);
return;
}
super.startActivity(intent);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
finish();
}
return super.onOptionsItemSelected(item);
}
@Override
public void onDetachedFromWindow() {
super.onDetachedFromWindow();
settingUpdated();
}
private void settingUpdated() {
OUser user = OUser.current(this);
if (user == null) {
Intent loginActivity = new Intent(this, OdooLogin.class);
loginActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(loginActivity);
finish();
} else {
Account mAccount = user.getAccount();
OPreferenceManager mPref = new OPreferenceManager(this);
int sync_interval = mPref.getInt("sync_interval", 1440);
List default_authorities = new ArrayList<>();
default_authorities.add("com.android.calendar");
default_authorities.add("com.android.contacts");
SyncAdapterType[] list = ContentResolver.getSyncAdapterTypes();
for (SyncAdapterType lst : list) {
if (lst.authority.contains("com.odoo")
&& lst.authority.contains("providers")) {
default_authorities.add(lst.authority);
}
}
for (String authority : default_authorities) {
boolean isSyncActive = ContentResolver.getSyncAutomatically(
mAccount, authority);
if (isSyncActive) {
SyncUtils.get(this).setSyncPeriodic(authority, sync_interval, 60, 1);
}
}
Toast.makeText(this, OResource.string(this, R.string.toast_setting_saved),
Toast.LENGTH_LONG).show();
}
}
}
================================================
FILE: app/src/main/java/com/odoo/addons/calendar/CalendarDashboard.java
================================================
/**
* Odoo, Open Source Management Solution
* Copyright (C) 2012-today Odoo SA ()
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see
*
* Created on 9/1/15 10:34 AM
*/
package com.odoo.addons.calendar;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Color;
import android.graphics.drawable.GradientDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.support.v4.widget.SwipeRefreshLayout;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import com.odoo.R;
import com.odoo.addons.calendar.models.CalendarEvent;
import com.odoo.addons.calendar.utils.CalendarUtils;
import com.odoo.addons.calendar.utils.TodayIcon;
import com.odoo.addons.crm.CRMDetail;
import com.odoo.addons.crm.CRMLeads;
import com.odoo.addons.crm.ConvertToQuotation;
import com.odoo.addons.crm.models.CRMLead;
import com.odoo.addons.phonecall.PhoneCallDetail;
import com.odoo.addons.phonecall.models.CRMPhoneCalls;
import com.odoo.addons.sale.models.SaleOrder;
import com.odoo.base.addons.res.ResCurrency;
import com.odoo.base.addons.res.ResPartner;
import com.odoo.libs.calendar.SysCal;
import com.odoo.libs.calendar.view.OdooCalendar;
import com.odoo.core.orm.ODataRow;
import com.odoo.core.orm.OValues;
import com.odoo.core.orm.fields.OColumn;
import com.odoo.core.support.addons.fragment.BaseFragment;
import com.odoo.core.support.addons.fragment.IOnSearchViewChangeListener;
import com.odoo.core.support.addons.fragment.ISyncStatusObserverListener;
import com.odoo.core.support.drawer.ODrawerItem;
import com.odoo.core.support.list.IOnItemClickListener;
import com.odoo.core.support.list.OCursorListAdapter;
import com.odoo.core.support.list.OListAdapter;
import com.odoo.core.support.sync.SyncUtils;
import com.odoo.core.utils.IntentUtils;
import com.odoo.core.utils.OControls;
import com.odoo.core.utils.OCursorUtils;
import com.odoo.core.utils.ODateUtils;
import com.odoo.core.utils.OResource;
import com.odoo.core.utils.StringUtils;
import com.odoo.core.utils.dialog.OChoiceDialog;
import com.odoo.core.utils.sys.IOnActivityResultListener;
import com.odoo.core.utils.sys.IOnBackPressListener;
import com.odoo.widgets.bottomsheet.BottomSheet;
import com.odoo.widgets.bottomsheet.BottomSheetListeners;
import com.odoo.widgets.snackbar.SnackBar;
import com.odoo.widgets.snackbar.SnackbarBuilder;
import com.odoo.widgets.snackbar.listeners.EventListener;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class CalendarDashboard extends BaseFragment implements View.OnClickListener,
BottomSheetListeners.OnSheetItemClickListener, IOnBackPressListener,
OdooCalendar.OdooCalendarDateSelectListener, LoaderManager.LoaderCallbacks,
OCursorListAdapter.OnViewBindListener, SwipeRefreshLayout.OnRefreshListener,
ISyncStatusObserverListener, BottomSheetListeners.OnSheetActionClickListener,
BottomSheetListeners.OnSheetMenuCreateListener, EventListener,
IOnSearchViewChangeListener, IOnItemClickListener, OCursorListAdapter.OnViewCreateListener,
AdapterView.OnItemSelectedListener, IOnActivityResultListener, OCursorListAdapter.BeforeBindUpdateData {
public static final String TAG = CalendarDashboard.class.getSimpleName();
public static final String KEY = "key_calendar_dashboard";
public static final String KEY_DATE = "key_date";
public static final int REQUEST_CONVERT_TO_QUOTATION_WIZARD = 229;
private BottomSheet mSheet = null;
private OdooCalendar odooCalendar;
private View calendarView = null;
private ListView dashboardListView;
private View mView;
private String mFilterDate;
private OCursorListAdapter mAdapter;
private boolean syncRequested = false;
private String mFilter = null;
private String wonLost = "won";
private CRMLead crmLead;
private ODataRow convertRequestRecord;
private Spinner navSpinner;
private OListAdapter navSpinnerAdapter;
private FilterType mFilterType = FilterType.All;
private enum SheetType {
Event, PhoneCall, Opportunity
}
private enum FilterType {
All(R.string.label_all), Meetings(R.string.label_meetings),
Opportunities(R.string.label_opportunity), PhoneCalls(R.string.label_phone_calls);
int str_id = 0;
FilterType(int type) {
str_id = type;
}
public String getString(Context context) {
return OResource.string(context, str_id);
}
}
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
setHasOptionsMenu(true);
return inflater.inflate(R.layout.calendar_dashboard, container, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mView = view;
setHasFloatingButton(view, R.id.fabButton, null, this);
parent().setOnBackPressListener(this);
parent().setHasActionBarSpinner(true);
parent().setOnActivityResultListener(this);
navSpinner = parent().getActionBarSpinner();
initActionSpinner();
odooCalendar = (OdooCalendar) view.findViewById(R.id.dashboard_calendar);
crmLead = new CRMLead(getActivity(), null);
odooCalendar.setOdooCalendarDateSelectListener(this);
}
private void initActionSpinner() {
List