├── .gitignore
├── LICENSE
├── README.md
├── build.gradle
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── samples
├── Fresco-License.txt
├── bannerSample
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ └── com
│ │ │ └── inmobi
│ │ │ └── banner
│ │ │ ├── PlacementId.java
│ │ │ ├── sample
│ │ │ ├── BannerAdsActivity.java
│ │ │ ├── BannerBase.java
│ │ │ ├── BannerXmlActivity.java
│ │ │ └── NewsFeedAdapter.java
│ │ │ └── utility
│ │ │ ├── Constants.java
│ │ │ ├── DataFetcher.java
│ │ │ └── NewsSnippet.java
│ │ └── res
│ │ ├── drawable
│ │ ├── bg_parent_rounded_corner.xml
│ │ └── icon.png
│ │ ├── layout
│ │ ├── activity_banner_ads.xml
│ │ ├── activity_banner_xml.xml
│ │ ├── banner_base.xml
│ │ └── news_headline_view.xml
│ │ ├── mipmap-hdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-mdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-xhdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-xxhdpi
│ │ └── ic_launcher.png
│ │ ├── values-w820dp
│ │ └── dimens.xml
│ │ ├── values
│ │ ├── attr.xml
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ │ └── xml
│ │ └── network_security_config.xml
├── customABSample
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ └── com
│ │ │ └── inmobi
│ │ │ └── customabsample
│ │ │ ├── BannerCustomABActivity.java
│ │ │ ├── CustomABActivity.java
│ │ │ ├── InterstitialCustomABActivity.java
│ │ │ ├── PlacementId.java
│ │ │ └── customevent
│ │ │ ├── CustomEventBanner.java
│ │ │ ├── CustomEventBannerListener.java
│ │ │ ├── CustomEventInterstitial.java
│ │ │ ├── CustomEventInterstitialListener.java
│ │ │ ├── InMobiBannerCustomEvent.java
│ │ │ └── InMobiInterstitialCustomEvent.java
│ │ └── res
│ │ ├── drawable
│ │ └── icon.png
│ │ ├── layout
│ │ ├── activity_banner_custom_a_b.xml
│ │ ├── activity_custom_a_b.xml
│ │ └── activity_interstitial_custom_a_b.xml
│ │ ├── values
│ │ ├── colors.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ │ └── xml
│ │ └── network_security_config.xml
├── interstitialSample
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ └── com
│ │ │ └── inmobi
│ │ │ └── interstitial
│ │ │ └── sample
│ │ │ ├── InterstitialAdsActivity.java
│ │ │ └── PlacementId.java
│ │ └── res
│ │ ├── anim
│ │ ├── left_out.xml
│ │ └── right_in.xml
│ │ ├── drawable
│ │ ├── bg_parent_rounded_corner.xml
│ │ └── icon.png
│ │ ├── layout
│ │ └── activity_interstitial_ads.xml
│ │ ├── mipmap-hdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-mdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-xhdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-xxhdpi
│ │ └── ic_launcher.png
│ │ ├── values-w820dp
│ │ └── dimens.xml
│ │ ├── values
│ │ ├── attr.xml
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ │ └── xml
│ │ └── network_security_config.xml
└── nativeSample
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ └── com
│ │ └── inmobi
│ │ └── nativead
│ │ ├── PlacementId.java
│ │ ├── sample
│ │ ├── FragmentAdapter.java
│ │ ├── NativeAdsActivity.java
│ │ ├── listview
│ │ │ ├── AdFeedItem.java
│ │ │ ├── FeedItemAdapter.java
│ │ │ └── ListViewFeedFragment.java
│ │ ├── recyclerview
│ │ │ ├── AdFeedItem.java
│ │ │ ├── FeedsAdapter.java
│ │ │ └── RecyclerFeedFragment.java
│ │ └── singlestrand
│ │ │ └── SingleNativeAdFragment.java
│ │ └── utility
│ │ ├── FeedData.java
│ │ ├── NonSwipeableViewPager.java
│ │ └── SwipeRefreshLayoutWrapper.java
│ └── res
│ ├── drawable-hdpi
│ └── linkedin_bottom.png
│ ├── drawable
│ ├── bg_parent_rounded_corner.xml
│ ├── dharmesh.jpg
│ ├── dharmesh_big.png
│ ├── ic_menu_refresh.png
│ ├── icon.png
│ ├── jeff.jpg
│ ├── jeff_big.png
│ ├── linkedin_bottom.png
│ ├── nazia.jpg
│ ├── nazia_big.png
│ ├── neha_jha.jpg
│ ├── neha_jha_big.png
│ ├── piyush.jpg
│ └── piyush_big.png
│ ├── layout
│ ├── activity_native_ads.xml
│ ├── fragment_custom_integration.xml
│ ├── fragment_recycler_feed.xml
│ ├── layout_ad.xml
│ ├── listitem.xml
│ └── recycler_card_layout.xml
│ ├── values
│ ├── attr.xml
│ ├── colors.xml
│ ├── dimens.xml
│ ├── strings.xml
│ └── styles.xml
│ └── xml
│ └── network_security_config.xml
├── sdk
├── ChangeLog.md
└── licenses
│ ├── License.txt
│ ├── OMLicense.txt
│ └── Picasso-License.txt
└── settings.gradle
/.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*
39 |
40 | # Keystore files
41 | *.jks
42 | *.DS_Store*
43 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "{}"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright {yyyy} {name of copyright owner}
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
202 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | InMobi SDK for Android
2 | ======================
3 |
4 | Modified: 16 February, 2023
5 |
6 | SDK Version: 10.5.4
7 |
8 | Thanks for monetizing with InMobi!
9 | If you haven't already, [sign up](https://www.inmobi.com/user/index?locale=en_us#signup) for an account to start monetizing your app!
10 |
11 | ## Download
12 | The InMobi SDK for Android is available via:
13 |
14 | **mavenCentral AAR**
15 |
16 | The InMobi SDK is available as a AAR via mavenCentral; to use it, add the following to your `build.gradle`
17 |
18 | ```
19 | repositories {
20 | mavenCentral()
21 | }
22 | dependencies {
23 | implementation 'com.inmobi.monetization:inmobi-ads-kotlin:10.5.3'
24 | }
25 | ```
26 |
27 | **Download from the support portal**
28 |
29 | To download the latest SDK as a AAR, please visit [http://inmobi.com/sdk](https://inmobi.com/sdk).
30 |
31 | **To continue integrating with the InMobi SDK, please see the [Integration Guidelines](https://support.inmobi.com/monetize/android-guidelines/) for Android.**
32 |
33 | ## New in this version
34 | • Gradle 7.0 support
35 | • Bug fixes
36 |
37 | ## Requirements
38 | - Android 4.0.1 (API level 15) and higher
39 | - androidx.browser
40 | - androidx.appcompat
41 | - androidx.recyclerview
42 | - Picasso Library (picasso-2.8.jar)
43 | - **Recommended** Google Play Services 18.0.1
44 |
45 | ## License
46 | To view the license for the InMobi SDK, see [here](https://github.com/InMobi/sdk-sample-code-android/blob/master/sdk/licenses/License.txt). To view the terms of service, visit [https://inmobi.com/terms-of-service](http://inmobi.com/terms-of-service/).
47 | The code for the sample apps is provided under the Apache 2.0 License.
48 |
49 |
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 |
3 | buildscript {
4 | repositories {
5 | jcenter()
6 | google()
7 | }
8 | dependencies {
9 | classpath 'com.android.tools.build:gradle:4.0.1'
10 | // NOTE: Do not place your application dependencies here; they belong
11 | // in the individual module build.gradle files
12 | }
13 | }
14 |
15 |
16 | ext {
17 | androidMinSdkVersion = 15
18 | androidTargetSdkVersion = 31
19 | androidCompileSdkVersion = 31
20 |
21 | appVersionCode = 1
22 | appVersionName = "1.0.0"
23 |
24 | inmobiSdkVersion = "10.5.4"
25 | fresco = "0.12.0"
26 | picasso = "2.8"
27 | browser = "1.3.0"
28 | recyclerview = "1.1.0"
29 |
30 | playservicesadsidentifier = "18.0.1"
31 | playserviceslocation = "19.0.1"
32 |
33 | playservicesappset = "16.0.2"
34 | playservicestask= "18.0.2"
35 | }
36 |
37 | allprojects {
38 | repositories {
39 | jcenter()
40 | google()
41 | }
42 | gradle.projectsEvaluated {
43 | tasks.withType(JavaCompile) {
44 | options.compilerArgs << "-Werror" << "-Xlint:unchecked" << "-Xlint:deprecation"
45 | }
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 |
3 | # IDE (e.g. Android Studio) users:
4 | # Gradle settings configured through the IDE *will override*
5 | # any settings specified in this file.
6 |
7 | # For more details on how to configure your build environment visit
8 | # http://www.gradle.org/docs/current/userguide/build_environment.html
9 |
10 | # Specifies the JVM arguments used for the daemon process.
11 | # The setting is particularly useful for tweaking memory settings.
12 | # Default value: -Xmx10248m -XX:MaxPermSize=256m
13 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
14 |
15 | # When configured, Gradle will run in incubating parallel mode.
16 | # This option should only be used with decoupled projects. More details, visit
17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
18 | # org.gradle.parallel=true
19 | android.enableJetifier=true
20 | android.useAndroidX=true
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InMobi/sdk-sample-code-android/b0596a74b36fb7eb70d2a97fbdcdcba656f4c483/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Wed Aug 26 14:37:55 IST 2020
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-6.1.1-all.zip
7 |
--------------------------------------------------------------------------------
/gradlew:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | ##############################################################################
4 | ##
5 | ## Gradle start up script for UN*X
6 | ##
7 | ##############################################################################
8 |
9 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
10 | DEFAULT_JVM_OPTS=""
11 |
12 | APP_NAME="Gradle"
13 | APP_BASE_NAME=`basename "$0"`
14 |
15 | # Use the maximum available, or set MAX_FD != -1 to use that value.
16 | MAX_FD="maximum"
17 |
18 | warn ( ) {
19 | echo "$*"
20 | }
21 |
22 | die ( ) {
23 | echo
24 | echo "$*"
25 | echo
26 | exit 1
27 | }
28 |
29 | # OS specific support (must be 'true' or 'false').
30 | cygwin=false
31 | msys=false
32 | darwin=false
33 | case "`uname`" in
34 | CYGWIN* )
35 | cygwin=true
36 | ;;
37 | Darwin* )
38 | darwin=true
39 | ;;
40 | MINGW* )
41 | msys=true
42 | ;;
43 | esac
44 |
45 | # For Cygwin, ensure paths are in UNIX format before anything is touched.
46 | if $cygwin ; then
47 | [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
48 | fi
49 |
50 | # Attempt to set APP_HOME
51 | # Resolve links: $0 may be a link
52 | PRG="$0"
53 | # Need this for relative symlinks.
54 | while [ -h "$PRG" ] ; do
55 | ls=`ls -ld "$PRG"`
56 | link=`expr "$ls" : '.*-> \(.*\)$'`
57 | if expr "$link" : '/.*' > /dev/null; then
58 | PRG="$link"
59 | else
60 | PRG=`dirname "$PRG"`"/$link"
61 | fi
62 | done
63 | SAVED="`pwd`"
64 | cd "`dirname \"$PRG\"`/" >&-
65 | APP_HOME="`pwd -P`"
66 | cd "$SAVED" >&-
67 |
68 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
69 |
70 | # Determine the Java command to use to start the JVM.
71 | if [ -n "$JAVA_HOME" ] ; then
72 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
73 | # IBM's JDK on AIX uses strange locations for the executables
74 | JAVACMD="$JAVA_HOME/jre/sh/java"
75 | else
76 | JAVACMD="$JAVA_HOME/bin/java"
77 | fi
78 | if [ ! -x "$JAVACMD" ] ; then
79 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
80 |
81 | Please set the JAVA_HOME variable in your environment to match the
82 | location of your Java installation."
83 | fi
84 | else
85 | JAVACMD="java"
86 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
87 |
88 | Please set the JAVA_HOME variable in your environment to match the
89 | location of your Java installation."
90 | fi
91 |
92 | # Increase the maximum file descriptors if we can.
93 | if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
94 | MAX_FD_LIMIT=`ulimit -H -n`
95 | if [ $? -eq 0 ] ; then
96 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
97 | MAX_FD="$MAX_FD_LIMIT"
98 | fi
99 | ulimit -n $MAX_FD
100 | if [ $? -ne 0 ] ; then
101 | warn "Could not set maximum file descriptor limit: $MAX_FD"
102 | fi
103 | else
104 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
105 | fi
106 | fi
107 |
108 | # For Darwin, add options to specify how the application appears in the dock
109 | if $darwin; then
110 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
111 | fi
112 |
113 | # For Cygwin, switch paths to Windows format before running java
114 | if $cygwin ; then
115 | APP_HOME=`cygpath --path --mixed "$APP_HOME"`
116 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
117 |
118 | # We build the pattern for arguments to be converted via cygpath
119 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
120 | SEP=""
121 | for dir in $ROOTDIRSRAW ; do
122 | ROOTDIRS="$ROOTDIRS$SEP$dir"
123 | SEP="|"
124 | done
125 | OURCYGPATTERN="(^($ROOTDIRS))"
126 | # Add a user-defined pattern to the cygpath arguments
127 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then
128 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
129 | fi
130 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
131 | i=0
132 | for arg in "$@" ; do
133 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
134 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
135 |
136 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
137 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
138 | else
139 | eval `echo args$i`="\"$arg\""
140 | fi
141 | i=$((i+1))
142 | done
143 | case $i in
144 | (0) set -- ;;
145 | (1) set -- "$args0" ;;
146 | (2) set -- "$args0" "$args1" ;;
147 | (3) set -- "$args0" "$args1" "$args2" ;;
148 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
149 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
150 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
151 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
152 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
153 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
154 | esac
155 | fi
156 |
157 | # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
158 | function splitJvmOpts() {
159 | JVM_OPTS=("$@")
160 | }
161 | eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
162 | JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
163 |
164 | exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
165 |
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
12 | set DEFAULT_JVM_OPTS=
13 |
14 | set DIRNAME=%~dp0
15 | if "%DIRNAME%" == "" set DIRNAME=.
16 | set APP_BASE_NAME=%~n0
17 | set APP_HOME=%DIRNAME%
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windowz variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 | if "%@eval[2+2]" == "4" goto 4NT_args
53 |
54 | :win9xME_args
55 | @rem Slurp the command line arguments.
56 | set CMD_LINE_ARGS=
57 | set _SKIP=2
58 |
59 | :win9xME_args_slurp
60 | if "x%~1" == "x" goto execute
61 |
62 | set CMD_LINE_ARGS=%*
63 | goto execute
64 |
65 | :4NT_args
66 | @rem Get arguments from the 4NT Shell from JP Software
67 | set CMD_LINE_ARGS=%$
68 |
69 | :execute
70 | @rem Setup the command line
71 |
72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
73 |
74 | @rem Execute Gradle
75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
76 |
77 | :end
78 | @rem End local scope for the variables with windows NT shell
79 | if "%ERRORLEVEL%"=="0" goto mainEnd
80 |
81 | :fail
82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
83 | rem the _cmd.exe /c_ return code!
84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
85 | exit /b 1
86 |
87 | :mainEnd
88 | if "%OS%"=="Windows_NT" endlocal
89 |
90 | :omega
91 |
--------------------------------------------------------------------------------
/samples/Fresco-License.txt:
--------------------------------------------------------------------------------
1 | BSD License
2 |
3 | For Fresco software
4 |
5 | Copyright (c) 2015-present, Facebook, Inc. All rights reserved.
6 |
7 | Redistribution and use in source and binary forms, with or without modification,
8 | are permitted provided that the following conditions are met:
9 |
10 | * Redistributions of source code must retain the above copyright notice, this
11 | list of conditions and the following disclaimer.
12 |
13 | * Redistributions in binary form must reproduce the above copyright notice,
14 | this list of conditions and the following disclaimer in the documentation
15 | and/or other materials provided with the distribution.
16 |
17 | * Neither the name Facebook nor the names of its contributors may be used to
18 | endorse or promote products derived from this software without specific
19 | prior written permission.
20 |
21 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
22 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
25 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
28 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--------------------------------------------------------------------------------
/samples/bannerSample/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | android {
4 | compileSdkVersion androidCompileSdkVersion
5 |
6 | defaultConfig {
7 | applicationId 'com.inmobi.banner.sample'
8 | minSdkVersion androidMinSdkVersion
9 | targetSdkVersion androidTargetSdkVersion
10 | versionCode appVersionCode
11 | versionName appVersionName
12 | multiDexEnabled true
13 | }
14 | buildTypes {
15 | release {
16 | minifyEnabled false
17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
18 | }
19 |
20 | debug {
21 | minifyEnabled false
22 | }
23 | }
24 | compileOptions {
25 | sourceCompatibility JavaVersion.VERSION_1_8
26 | targetCompatibility JavaVersion.VERSION_1_8
27 | }
28 | lintOptions {
29 | abortOnError false
30 | }
31 | dexOptions {
32 | javaMaxHeapSize "4g"
33 | }
34 | }
35 |
36 | dependencies {
37 | implementation fileTree(dir: 'libs', include: ['*.aar'])
38 | implementation 'androidx.appcompat:appcompat:1.0.0'
39 | implementation 'androidx.annotation:annotation:1.0.0'
40 | implementation 'androidx.legacy:legacy-support-v4:1.0.0'
41 | implementation 'androidx.browser:browser:1.0.0'
42 | implementation 'androidx.multidex:multidex:2.0.0'
43 |
44 |
45 | implementation "com.inmobi.monetization:inmobi-ads-kotlin:$inmobiSdkVersion"
46 | implementation "com.google.android.gms:play-services-ads-identifier:$playservicesadsidentifier"
47 | implementation "com.google.android.gms:play-services-location:$playserviceslocation"
48 | implementation "com.facebook.fresco:fresco:$fresco"
49 | implementation "com.squareup.picasso:picasso:$picasso"
50 | implementation "androidx.browser:browser:$browser"
51 | implementation "com.google.android.gms:play-services-appset:$playservicesappset"
52 | implementation "com.google.android.gms:play-services-tasks:$playservicestask"
53 |
54 | }
55 |
--------------------------------------------------------------------------------
/samples/bannerSample/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in /Library/sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
19 | -keepattributes SourceFile,LineNumberTable,InnerClasses
20 | -keep class com.inmobi.** { *; }
21 | -dontwarn com.inmobi.**
22 | -keep class com.google.android.gms.common.api.GoogleApiClient { public *; }
23 | -keep class com.google.android.gms.common.api.GoogleApiClient$* {public *;}
24 | -keep class com.google.android.gms.location.LocationServices {public *;}
25 | -keep class com.google.android.gms.location.FusedLocationProviderApi {public *;}
26 | -keep class com.google.android.gms.location.ActivityRecognition {public *;}
27 | -keep class com.google.android.gms.location.ActivityRecognitionApi {public *;}
28 | -keep class com.google.android.gms.location.ActivityRecognitionResult {public *;}
29 | -keep class com.google.android.gms.location.DetectedActivity {public *;}
30 | -keep class com.google.android.gms.ads.identifier.AdvertisingIdClient{
31 | public *;
32 | }
33 | -keep class com.google.android.gms.ads.identifier.AdvertisingIdClient$Info{
34 | public *;
35 | }
36 | -dontwarn com.google.android.gms.**
37 | # skip the Picasso library classes
38 | -keep class com.squareup.picasso.** {*;}
39 | -dontwarn com.squareup.picasso.**
40 | # skip Moat classes
41 | -keep class com.moat.** {*;}
42 | -dontwarn com.moat.**
43 |
--------------------------------------------------------------------------------
/samples/bannerSample/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
19 |
20 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
33 |
34 |
35 |
39 |
40 |
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/samples/bannerSample/src/main/java/com/inmobi/banner/PlacementId.java:
--------------------------------------------------------------------------------
1 | package com.inmobi.banner;
2 |
3 | public interface PlacementId {
4 | long YOUR_PLACEMENT_ID = 1473189489298L;
5 | }
6 |
--------------------------------------------------------------------------------
/samples/bannerSample/src/main/java/com/inmobi/banner/sample/BannerAdsActivity.java:
--------------------------------------------------------------------------------
1 | package com.inmobi.banner.sample;
2 |
3 | import android.app.AlertDialog;
4 | import android.content.DialogInterface;
5 | import android.os.Bundle;
6 | import android.os.Handler;
7 | import androidx.annotation.NonNull;
8 | import androidx.annotation.Nullable;
9 | import androidx.appcompat.app.AppCompatActivity;
10 |
11 | import android.os.Looper;
12 | import android.util.Log;
13 | import android.view.View;
14 | import android.widget.AdapterView;
15 | import android.widget.ListView;
16 | import android.widget.RelativeLayout;
17 |
18 | import com.facebook.drawee.backends.pipeline.Fresco;
19 | import com.inmobi.ads.AdMetaInfo;
20 | import com.inmobi.ads.InMobiAdRequestStatus;
21 | import com.inmobi.ads.InMobiBanner;
22 | import com.inmobi.ads.listeners.BannerAdEventListener;
23 | import com.inmobi.banner.PlacementId;
24 | import com.inmobi.banner.utility.Constants;
25 | import com.inmobi.banner.utility.DataFetcher;
26 | import com.inmobi.banner.utility.NewsSnippet;
27 |
28 | import org.json.JSONArray;
29 | import org.json.JSONException;
30 | import org.json.JSONObject;
31 |
32 | import java.util.ArrayList;
33 | import java.util.List;
34 | import java.util.Map;
35 |
36 | import static com.inmobi.banner.utility.Constants.BANNER_HEIGHT;
37 | import static com.inmobi.banner.utility.Constants.BANNER_WIDTH;
38 | import static com.inmobi.banner.utility.Constants.FALLBACK_IMAGE_URL;
39 |
40 | public class BannerAdsActivity extends AppCompatActivity {
41 |
42 | private static final String TAG = BannerAdsActivity.class.getSimpleName();
43 |
44 | private InMobiBanner mBannerAd;
45 | private ListView mNewsListView;
46 |
47 | @NonNull
48 | private final Handler mHandler = new Handler(Looper.getMainLooper());
49 | private List mItemList = new ArrayList<>();
50 | private NewsFeedAdapter mAdapter;
51 |
52 | interface OnHeadlineSelectedListener {
53 | void onArticleSelected(int position);
54 | }
55 |
56 | private OnHeadlineSelectedListener mCallback = new OnHeadlineSelectedListener() {
57 | @Override
58 | public void onArticleSelected(int position) {
59 | }
60 | };
61 |
62 | @Override
63 | protected void onCreate(Bundle savedInstanceState) {
64 | super.onCreate(savedInstanceState);
65 | Fresco.initialize(this);
66 | setContentView(R.layout.activity_banner_ads);
67 |
68 | setupListView();
69 | getHeadlines();
70 | setupBannerAd();
71 | }
72 |
73 | private void setupBannerAd() {
74 | mBannerAd = new InMobiBanner(BannerAdsActivity.this, PlacementId.YOUR_PLACEMENT_ID);
75 | RelativeLayout adContainer = (RelativeLayout) findViewById(R.id.ad_container);
76 | mBannerAd.setAnimationType(InMobiBanner.AnimationType.ROTATE_HORIZONTAL_AXIS);
77 | mBannerAd.setListener(new BannerAdEventListener() {
78 | @Override
79 | public void onAdLoadSucceeded(@NonNull InMobiBanner inMobiBanner,
80 | @NonNull AdMetaInfo adMetaInfo) {
81 | Log.d(TAG, "onAdLoadSucceeded with bid " + adMetaInfo.getBid());
82 | }
83 |
84 | @Override
85 | public void onAdLoadFailed(@NonNull InMobiBanner inMobiBanner, @NonNull InMobiAdRequestStatus inMobiAdRequestStatus) {
86 | Log.d(TAG, "Banner ad failed to load with error: " +
87 | inMobiAdRequestStatus.getMessage());
88 | }
89 |
90 | @Override
91 | public void onAdClicked(@NonNull InMobiBanner inMobiBanner, @NonNull Map map) {
92 | Log.d(TAG, "onAdClicked");
93 | }
94 |
95 | @Override
96 | public void onAdDisplayed(@NonNull InMobiBanner inMobiBanner) {
97 | Log.d(TAG, "onAdDisplayed");
98 | }
99 |
100 | @Override
101 | public void onAdDismissed(@NonNull InMobiBanner inMobiBanner) {
102 | Log.d(TAG, "onAdDismissed");
103 | }
104 |
105 | @Override
106 | public void onUserLeftApplication(@NonNull InMobiBanner inMobiBanner) {
107 | Log.d(TAG, "onUserLeftApplication");
108 | }
109 |
110 | @Override
111 | public void onRewardsUnlocked(@NonNull InMobiBanner inMobiBanner, @NonNull Map map) {
112 | Log.d(TAG, "onRewardsUnlocked");
113 | }
114 |
115 | @Override
116 | public void onAdImpression(@NonNull InMobiBanner inMobiBanner) {
117 | Log.d(TAG, "onAdImpression");
118 | }
119 | });
120 | setBannerLayoutParams();
121 | adContainer.addView(mBannerAd);
122 | mBannerAd.load();
123 | }
124 |
125 | private void setBannerLayoutParams() {
126 | int width = toPixelUnits(BANNER_WIDTH);
127 | int height = toPixelUnits(BANNER_HEIGHT);
128 | RelativeLayout.LayoutParams bannerLayoutParams = new RelativeLayout.LayoutParams(width, height);
129 | bannerLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
130 | bannerLayoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
131 | mBannerAd.setLayoutParams(bannerLayoutParams);
132 | }
133 |
134 | private int toPixelUnits(int dipUnit) {
135 | float density = getResources().getDisplayMetrics().density;
136 | return Math.round(dipUnit * density);
137 | }
138 |
139 | private void setupListView() {
140 | mNewsListView = (ListView) findViewById(R.id.lvNewsContainer);
141 | mAdapter = new NewsFeedAdapter(this, mItemList);
142 | mNewsListView.setAdapter(mAdapter);
143 | mNewsListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
144 | @Override
145 | public boolean onItemLongClick(AdapterView> adapterView, final View view, final int position, final long id) {
146 | AlertDialog.Builder confirmationDialog = new AlertDialog.Builder(BannerAdsActivity.this);
147 | confirmationDialog.setTitle("Delete Item?");
148 | confirmationDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
149 | @Override
150 | public void onClick(DialogInterface dialog, int which) {
151 | NewsSnippet newsSnippet = mItemList.get(position);
152 | mItemList.remove(newsSnippet);
153 | mAdapter.notifyDataSetChanged();
154 | }
155 | });
156 | confirmationDialog.setNegativeButton("No", new DialogInterface.OnClickListener() {
157 | @Override
158 | public void onClick(DialogInterface dialog, int which) {
159 | dialog.cancel();
160 | }
161 | });
162 |
163 | confirmationDialog.show();
164 | return true;
165 | }
166 | });
167 |
168 | mNewsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
169 | @Override
170 | public void onItemClick(AdapterView> adapterView, View view, int position, long l) {
171 | mCallback.onArticleSelected(position);
172 | mNewsListView.setItemChecked(position, true);
173 | mAdapter.notifyDataSetChanged();
174 | }
175 | });
176 | }
177 |
178 | private void getHeadlines() {
179 | new DataFetcher().getFeed(Constants.FEED_URL, new DataFetcher.OnFetchCompletedListener() {
180 | @Override
181 | public void onFetchCompleted(@Nullable final String data, @Nullable final String message) {
182 | if (null != data) {
183 | mHandler.post(new Runnable() {
184 | @Override
185 | public void run() {
186 | loadHeadlines(data);
187 | }
188 | });
189 | }
190 | }
191 | });
192 | }
193 |
194 | private void loadHeadlines(String data) {
195 | try {
196 | JSONArray feed = new JSONObject(data).
197 | getJSONArray(Constants.FeedJsonKeys.FEED_LIST);
198 | for (int i = 0; i < feed.length(); i++) {
199 | JSONObject item = feed.getJSONObject(i);
200 | Log.v(TAG, item.toString());
201 | NewsSnippet feedEntry = new NewsSnippet();
202 | try {
203 | feedEntry.title = item.getString(Constants.FeedJsonKeys.CONTENT_TITLE);
204 | JSONObject enclosureObject = item.getJSONObject(Constants.FeedJsonKeys.CONTENT_ENCLOSURE);
205 | if (!enclosureObject.isNull(Constants.FeedJsonKeys.CONTENT_LINK)) {
206 | feedEntry.imageUrl = item.getJSONObject(Constants.FeedJsonKeys.CONTENT_ENCLOSURE).
207 | getString(Constants.FeedJsonKeys.CONTENT_LINK);
208 | } else {
209 | feedEntry.imageUrl = FALLBACK_IMAGE_URL;
210 | }
211 | feedEntry.landingUrl = item.getString(Constants.FeedJsonKeys.CONTENT_LINK);
212 | feedEntry.content = item.getString(Constants.FeedJsonKeys.FEED_CONTENT);
213 | feedEntry.isSponsored = false;
214 | mItemList.add(feedEntry);
215 | } catch (JSONException e) {
216 | Log.d(TAG, e.toString());
217 | }
218 | }
219 | mAdapter.notifyDataSetChanged();
220 | } catch (JSONException e) {
221 | Log.d(TAG, "JSONException for loadHeadlines", e);
222 | }
223 | }
224 | }
225 |
--------------------------------------------------------------------------------
/samples/bannerSample/src/main/java/com/inmobi/banner/sample/BannerBase.java:
--------------------------------------------------------------------------------
1 | package com.inmobi.banner.sample;
2 |
3 | import android.content.Intent;
4 | import android.os.Bundle;
5 | import androidx.annotation.Nullable;
6 | import androidx.appcompat.app.AppCompatActivity;
7 |
8 | import android.util.Log;
9 | import android.view.View;
10 | import android.widget.Button;
11 | import android.widget.Toast;
12 |
13 | import com.inmobi.sdk.InMobiSdk;
14 | import com.inmobi.sdk.SdkInitializationListener;
15 |
16 | import org.json.JSONException;
17 | import org.json.JSONObject;
18 |
19 | public class BannerBase extends AppCompatActivity {
20 |
21 | private static final String TAG = BannerBase.class.getName();
22 | private Button normalIntegration;
23 | private Button xmlIntegration;
24 | @Override
25 | protected void onCreate(@Nullable Bundle savedInstanceState) {
26 | super.onCreate(savedInstanceState);
27 | InMobiSdk.setLogLevel(InMobiSdk.LogLevel.DEBUG);
28 | JSONObject consent = new JSONObject();
29 | try {
30 | // Provide correct consent value to sdk which is obtained by User
31 | consent.put(InMobiSdk.IM_GDPR_CONSENT_AVAILABLE, true);
32 | } catch (JSONException e) {
33 | e.printStackTrace();
34 | }
35 |
36 | InMobiSdk.init(this, "1234567890qwerty0987654321qwerty12345", consent, new SdkInitializationListener() {
37 | @Override
38 | public void onInitializationComplete(@Nullable Error error) {
39 | if (error == null) {
40 | Log.d(TAG, "InMobi SDK Initialization Success");
41 | sdkInitSuccess();
42 | } else {
43 | Log.e(TAG, "InMobi SDK Initialization failed: " + error.getMessage());
44 | sdkInitFailed();
45 | }
46 | }
47 | });
48 |
49 | setContentView(R.layout.banner_base);
50 | xmlIntegration = (Button) findViewById(R.id.xmlSample);
51 | normalIntegration = (Button) findViewById(R.id.normalBanner);
52 | }
53 |
54 | private void sdkInitSuccess() {
55 | xmlIntegration.setOnClickListener(new View.OnClickListener() {
56 | @Override
57 | public void onClick(View v) {
58 | startActivity(new Intent(BannerBase.this, BannerXmlActivity.class));
59 | }
60 | });
61 | normalIntegration.setOnClickListener(new View.OnClickListener() {
62 | @Override
63 | public void onClick(View v) {
64 | startActivity(new Intent(BannerBase.this, BannerAdsActivity.class));
65 |
66 | }
67 | });
68 | }
69 |
70 | private void sdkInitFailed() {
71 | xmlIntegration.setOnClickListener(new View.OnClickListener() {
72 | @Override
73 | public void onClick(View v) {
74 | Toast.makeText(BannerBase.this, "InMobi SDK is not initialized." +
75 | "Check logs for more information", Toast.LENGTH_LONG).show();
76 | }
77 | });
78 | normalIntegration.setOnClickListener(new View.OnClickListener() {
79 | @Override
80 | public void onClick(View v) {
81 | Toast.makeText(BannerBase.this, "InMobi SDK is not initialized." +
82 | "Check logs for more information", Toast.LENGTH_LONG).show();
83 | }
84 | });
85 | }
86 | }
87 |
--------------------------------------------------------------------------------
/samples/bannerSample/src/main/java/com/inmobi/banner/sample/BannerXmlActivity.java:
--------------------------------------------------------------------------------
1 | package com.inmobi.banner.sample;
2 |
3 | import com.inmobi.ads.InMobiBanner;
4 |
5 | import android.os.Bundle;
6 | import androidx.appcompat.app.AppCompatActivity;
7 |
8 | public class BannerXmlActivity extends AppCompatActivity {
9 |
10 | private InMobiBanner mBanner;
11 |
12 | @Override
13 | protected void onCreate(Bundle savedInstanceState) {
14 | super.onCreate(savedInstanceState);
15 | setContentView(R.layout.activity_banner_xml);
16 | mBanner = (InMobiBanner) findViewById(R.id.banner);
17 | mBanner.load();
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/samples/bannerSample/src/main/java/com/inmobi/banner/sample/NewsFeedAdapter.java:
--------------------------------------------------------------------------------
1 | package com.inmobi.banner.sample;
2 |
3 | import com.inmobi.banner.utility.NewsSnippet;
4 |
5 | import android.content.Context;
6 | import android.net.Uri;
7 | import androidx.annotation.NonNull;
8 | import android.view.LayoutInflater;
9 | import android.view.View;
10 | import android.view.ViewGroup;
11 | import android.widget.ArrayAdapter;
12 | import android.widget.TextView;
13 | import com.facebook.drawee.view.SimpleDraweeView;
14 |
15 | import java.util.List;
16 |
17 | class NewsFeedAdapter extends ArrayAdapter {
18 |
19 | private LayoutInflater mInflater;
20 | private List mItems;
21 |
22 | NewsFeedAdapter(Context context, List items) {
23 | super(context, R.layout.news_headline_view, items);
24 | mInflater = LayoutInflater.from(context);
25 | mItems = items;
26 | }
27 |
28 | @NonNull
29 | @Override
30 | public View getView(int position, View convertView, @NonNull ViewGroup parent) {
31 | View rowView = convertView;
32 | ViewHolder viewHolder;
33 | if (null == rowView || null == convertView.getTag()) {
34 | rowView = mInflater.inflate(R.layout.news_headline_view, parent, false);
35 | viewHolder = new ViewHolder();
36 | viewHolder.headline = (TextView) rowView.findViewById(R.id.caption);
37 | viewHolder.content = (TextView) rowView.findViewById(R.id.content);
38 | viewHolder.icon = (SimpleDraweeView) rowView.findViewById(R.id.photo);
39 | rowView.setTag(viewHolder);
40 | } else {
41 | viewHolder = (ViewHolder) rowView.getTag();
42 | }
43 |
44 | NewsSnippet newsSnippet = mItems.get(position);
45 | viewHolder.headline.setText(newsSnippet.title);
46 | viewHolder.content.setText(newsSnippet.content);
47 | viewHolder.icon.setImageURI(Uri.parse(newsSnippet.imageUrl));
48 | return rowView;
49 | }
50 |
51 |
52 | private static class ViewHolder {
53 | TextView headline;
54 | TextView content;
55 | SimpleDraweeView icon;
56 | }
57 | }
--------------------------------------------------------------------------------
/samples/bannerSample/src/main/java/com/inmobi/banner/utility/Constants.java:
--------------------------------------------------------------------------------
1 | package com.inmobi.banner.utility;
2 |
3 | /**
4 | * Created by rahul.raja on 1/23/17.
5 | */
6 |
7 | public class Constants {
8 |
9 | public static final String FEED_URL = "https://api.rss2json.com/v1/api.json?rss_url=http://rss.nytimes.com/services/xml/rss/nyt/World.xml";
10 | public static final String FALLBACK_IMAGE_URL = "https://s3-ap-southeast-1.amazonaws.com/inmobi-surpriseme/notification/notif2.jpg";
11 |
12 | public interface FeedJsonKeys {
13 | String FEED_LIST = "items";
14 | String CONTENT_TITLE = "title";
15 | String CONTENT_ENCLOSURE = "enclosure";
16 | String CONTENT_LINK = "link";
17 | String FEED_CONTENT = "content";
18 | }
19 |
20 | public static final int BANNER_WIDTH = 320;
21 | public static final int BANNER_HEIGHT = 50;
22 |
23 | }
24 |
--------------------------------------------------------------------------------
/samples/bannerSample/src/main/java/com/inmobi/banner/utility/DataFetcher.java:
--------------------------------------------------------------------------------
1 | package com.inmobi.banner.utility;
2 |
3 | import android.util.Log;
4 |
5 | import java.io.BufferedInputStream;
6 | import java.io.BufferedReader;
7 | import java.io.IOException;
8 | import java.io.InputStream;
9 | import java.io.InputStreamReader;
10 | import java.net.HttpURLConnection;
11 | import java.net.URL;
12 |
13 | public class DataFetcher {
14 |
15 | private static final String LOG_TAG = DataFetcher.class.getSimpleName();
16 |
17 | public interface OnFetchCompletedListener {
18 | void onFetchCompleted(String data, String message);
19 | }
20 |
21 | private String readStream(InputStream in) throws IOException {
22 | BufferedReader reader = new BufferedReader(new InputStreamReader(in));
23 | StringBuilder result = new StringBuilder();
24 | String line;
25 | while ((line = reader.readLine()) != null) {
26 | result.append(line);
27 | }
28 | return result.toString();
29 | }
30 |
31 | public void getFeed(final String urlString, final OnFetchCompletedListener onFetchCompletedListener) {
32 | new Thread(new Runnable() {
33 | @Override
34 | public void run() {
35 | URL url;
36 | try {
37 | url = new URL(urlString);
38 | HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
39 | InputStream in = new BufferedInputStream(urlConnection.getInputStream());
40 | final String data = readStream(in);
41 |
42 | urlConnection.disconnect();
43 | onFetchCompletedListener.onFetchCompleted(data, "");
44 | } catch (IOException e) {
45 | e.printStackTrace();
46 | Log.e(LOG_TAG, "Some error occurred while loading feed" + e.toString());
47 | onFetchCompletedListener.onFetchCompleted(null, e.getMessage());
48 | }
49 | }
50 | }).start();
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/samples/bannerSample/src/main/java/com/inmobi/banner/utility/NewsSnippet.java:
--------------------------------------------------------------------------------
1 | package com.inmobi.banner.utility;
2 |
3 | public final class NewsSnippet {
4 | public String title;
5 | public String imageUrl;
6 | public String content;
7 | public String landingUrl;
8 | public boolean isSponsored;
9 | }
--------------------------------------------------------------------------------
/samples/bannerSample/src/main/res/drawable/bg_parent_rounded_corner.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/samples/bannerSample/src/main/res/drawable/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InMobi/sdk-sample-code-android/b0596a74b36fb7eb70d2a97fbdcdcba656f4c483/samples/bannerSample/src/main/res/drawable/icon.png
--------------------------------------------------------------------------------
/samples/bannerSample/src/main/res/layout/activity_banner_ads.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
11 |
12 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/samples/bannerSample/src/main/res/layout/activity_banner_xml.xml:
--------------------------------------------------------------------------------
1 |
12 |
13 |
17 |
18 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/samples/bannerSample/src/main/res/layout/banner_base.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
14 |
15 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/samples/bannerSample/src/main/res/layout/news_headline_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
21 |
22 |
28 |
29 |
41 |
42 |
64 |
65 |
66 |
67 |
68 |
--------------------------------------------------------------------------------
/samples/bannerSample/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InMobi/sdk-sample-code-android/b0596a74b36fb7eb70d2a97fbdcdcba656f4c483/samples/bannerSample/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/samples/bannerSample/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InMobi/sdk-sample-code-android/b0596a74b36fb7eb70d2a97fbdcdcba656f4c483/samples/bannerSample/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/samples/bannerSample/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InMobi/sdk-sample-code-android/b0596a74b36fb7eb70d2a97fbdcdcba656f4c483/samples/bannerSample/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/samples/bannerSample/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InMobi/sdk-sample-code-android/b0596a74b36fb7eb70d2a97fbdcdcba656f4c483/samples/bannerSample/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/samples/bannerSample/src/main/res/values-w820dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 64dp
6 |
7 |
--------------------------------------------------------------------------------
/samples/bannerSample/src/main/res/values/attr.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/samples/bannerSample/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #ffffff
4 | #d3d6db
5 | #ffffff
6 | #c2c3c8
7 | #0a80d1
8 | #808080
9 | #d3d3d3
10 |
11 |
--------------------------------------------------------------------------------
/samples/bannerSample/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 16dp
4 | 16dp
5 |
6 | 10dp
7 | 20dp
8 | 15dp
9 | 48dp
10 | 10dp
11 | 15dp
12 | 13dp
13 | 15dp
14 | 13dp
15 | 3dp
16 | 1dp
17 |
18 |
--------------------------------------------------------------------------------
/samples/bannerSample/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | InMobi Banner Sample
4 | Banner Ad through XML layout
5 | BannerActivity
6 | Banner Ads
7 | XML Banner Ad 320 x 50
8 | Banner Ad 320 x 50
9 | Banner Ad 300 x 250
10 | Banner Ad 468 x 60
11 | Banner Ad 728 x 90
12 | Title
13 | BannerAdsActivity
14 | XML INTEGRATION
15 | BANNER SAMPLE
16 | PREFETCH BANNER
17 |
18 |
19 |
--------------------------------------------------------------------------------
/samples/bannerSample/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
11 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/samples/bannerSample/src/main/res/xml/network_security_config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/samples/customABSample/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | android {
4 | compileSdkVersion androidCompileSdkVersion
5 | buildToolsVersion "29.0.2"
6 |
7 | defaultConfig {
8 | applicationId "com.inmobi.customabsample"
9 | minSdkVersion 19
10 | targetSdkVersion androidTargetSdkVersion
11 | versionCode 1
12 | versionName "1.0"
13 |
14 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
15 | }
16 |
17 | buildTypes {
18 | release {
19 | minifyEnabled false
20 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
21 | }
22 | }
23 | compileOptions {
24 | sourceCompatibility JavaVersion.VERSION_1_8
25 | targetCompatibility JavaVersion.VERSION_1_8
26 | }
27 |
28 | }
29 |
30 | dependencies {
31 | implementation fileTree(dir: 'libs', include: ['*.jar'])
32 |
33 |
34 | implementation 'androidx.appcompat:appcompat:1.1.0'
35 | implementation 'androidx.annotation:annotation:1.1.0'
36 | implementation 'androidx.legacy:legacy-support-v4:1.0.0'
37 | implementation 'androidx.multidex:multidex:2.0.0'
38 | implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
39 |
40 | implementation "com.inmobi.monetization:inmobi-ads-kotlin:$inmobiSdkVersion"
41 | implementation "com.google.android.gms:play-services-ads-identifier:$playservicesadsidentifier"
42 | implementation "com.google.android.gms:play-services-location:$playserviceslocation"
43 | implementation "androidx.recyclerview:recyclerview:$recyclerview"
44 | implementation "com.squareup.picasso:picasso:$picasso"
45 | implementation "androidx.browser:browser:$browser"
46 | implementation "com.google.android.gms:play-services-appset:$playservicesappset"
47 | implementation "com.google.android.gms:play-services-tasks:$playservicestask"
48 |
49 | }
50 |
--------------------------------------------------------------------------------
/samples/customABSample/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 | -keepattributes SourceFile,LineNumberTable
23 | -keep class com.inmobi.** { *; }
24 | -keep public class com.google.android.gms.**
25 | -dontwarn com.google.android.gms.**
26 | -dontwarn com.squareup.picasso.**
27 | -keep class com.google.android.gms.ads.identifier.AdvertisingIdClient{
28 | public *;
29 | }
30 | -keep class com.google.android.gms.ads.identifier.AdvertisingIdClient$Info{
31 | public *;
32 | }
33 | # skip the Picasso library classes
34 | -keep class com.squareup.picasso.** {*;}
35 | -dontwarn com.squareup.okhttp.**
36 | # skip Moat classes
37 | -keep class com.moat.** {*;}
38 | -dontwarn com.moat.**
39 | # skip IAB classes
40 | -keep class com.iab.** {*;}
41 | -dontwarn com.iab.**
--------------------------------------------------------------------------------
/samples/customABSample/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
12 |
13 |
14 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/samples/customABSample/src/main/java/com/inmobi/customabsample/BannerCustomABActivity.java:
--------------------------------------------------------------------------------
1 | package com.inmobi.customabsample;
2 |
3 | import androidx.annotation.NonNull;
4 | import androidx.appcompat.app.AppCompatActivity;
5 |
6 | import android.os.Bundle;
7 | import android.util.Log;
8 | import android.view.View;
9 | import android.widget.Button;
10 | import android.widget.RelativeLayout;
11 |
12 | import com.inmobi.ads.AdMetaInfo;
13 | import com.inmobi.ads.InMobiAdRequestStatus;
14 | import com.inmobi.ads.InMobiBanner;
15 | import com.inmobi.ads.listeners.BannerAdEventListener;
16 | import com.inmobi.customabsample.customevent.CustomEventBannerListener;
17 | import com.inmobi.customabsample.customevent.InMobiBannerCustomEvent;
18 |
19 | public class BannerCustomABActivity extends AppCompatActivity implements View.OnClickListener {
20 |
21 | private static final String TAG = BannerCustomABActivity.class.getSimpleName();
22 | private InMobiBanner mInMobiBanner;
23 |
24 | private RelativeLayout adcontainer;
25 | public static final int BANNER_WIDTH = 320;
26 | public static final int BANNER_HEIGHT = 50;
27 |
28 | private Button load;
29 |
30 | @Override
31 | protected void onCreate(Bundle savedInstanceState) {
32 | super.onCreate(savedInstanceState);
33 | setContentView(R.layout.activity_banner_custom_a_b);
34 | load = findViewById(R.id.load);
35 | adcontainer = findViewById(R.id.ad_container);
36 | load.setOnClickListener(this);
37 | }
38 |
39 | private void setupBannerAd() {
40 | mInMobiBanner = new InMobiBanner(this, PlacementId.YOUR_BANNER_PLACEMENT_ID);
41 | mInMobiBanner.setBannerSize(BANNER_WIDTH, BANNER_HEIGHT);
42 | mInMobiBanner.setEnableAutoRefresh(false);
43 | mInMobiBanner.setListener(new BannerAdEventListener() {
44 | @Override
45 | public void onAdFetchFailed(@NonNull InMobiBanner inMobiBanner, @NonNull InMobiAdRequestStatus inMobiAdRequestStatus) {
46 | Log.d(TAG, "InMobi failed to fetch bid");
47 | }
48 |
49 | @Override
50 | public void onAdFetchSuccessful(@NonNull InMobiBanner inMobiBanner, @NonNull AdMetaInfo adMetaInfo) {
51 | Log.d(TAG, "InMobi successfully fetched an ad with bid " + adMetaInfo.getBid());
52 | InMobiBannerCustomEvent customEvent = new InMobiBannerCustomEvent();
53 | customEvent.setInMobiBanner(inMobiBanner);
54 | customEvent.loadAd(new CustomEventBannerListener() {
55 | @Override
56 | public void onAdLoadSuccess(View view) {
57 | Log.d(TAG, "onAdLoadSuccess");
58 | adcontainer.addView(view);
59 | }
60 |
61 | @Override
62 | public void onAdLoadFailed() {
63 | Log.d(TAG, "onAdLoadFailed");
64 | }
65 | });
66 | }
67 | });
68 | }
69 |
70 | @Override
71 | public void onClick(View v) {
72 | int id = v.getId();
73 | switch (id) {
74 | case R.id.load:
75 | setupBannerAd();
76 | adcontainer.removeAllViews();
77 | mInMobiBanner.getPreloadManager().preload();
78 | break;
79 | }
80 | }
81 | }
82 |
--------------------------------------------------------------------------------
/samples/customABSample/src/main/java/com/inmobi/customabsample/CustomABActivity.java:
--------------------------------------------------------------------------------
1 | package com.inmobi.customabsample;
2 |
3 | import androidx.annotation.Nullable;
4 | import androidx.appcompat.app.AppCompatActivity;
5 |
6 | import android.content.Intent;
7 | import android.os.Bundle;
8 | import android.util.Log;
9 | import android.view.View;
10 | import android.widget.Button;
11 | import android.widget.Toast;
12 |
13 | import com.inmobi.sdk.InMobiSdk;
14 | import com.inmobi.sdk.SdkInitializationListener;
15 |
16 | import org.json.JSONException;
17 | import org.json.JSONObject;
18 |
19 | public class CustomABActivity extends AppCompatActivity implements View.OnClickListener {
20 |
21 | private static final String TAG = CustomABActivity.class.getName();
22 | private Button mBannerIntegration;
23 | private Button mInterstitialIntegration;
24 | private @SDKState String sdkInitStatus;
25 |
26 | public @interface SDKState {
27 | String SDK_INITIALIZING = "SDK_INITIALIZING";
28 | String SDK_INITIALIZED = "SDK_INITIALIZED";
29 | String SDK_INITIALIZE_FAILED = "SDK_INITIALIZATION_FAILED";
30 | }
31 |
32 | @Override
33 | protected void onCreate(Bundle savedInstanceState) {
34 | super.onCreate(savedInstanceState);
35 |
36 | InMobiSdk.setLogLevel(InMobiSdk.LogLevel.DEBUG);
37 | JSONObject consent = new JSONObject();
38 | try {
39 | // Provide correct consent value to sdk which is obtained by User
40 | consent.put(InMobiSdk.IM_GDPR_CONSENT_AVAILABLE, true);
41 | } catch (JSONException e) {
42 | e.printStackTrace();
43 | }
44 |
45 | sdkInitStatus = SDKState.SDK_INITIALIZING;
46 | InMobiSdk.init(this, "1234567890qwerty0987654321qwerty12345", consent, new SdkInitializationListener() {
47 | @Override
48 | public void onInitializationComplete(@Nullable Error error) {
49 | if (error == null) {
50 | Log.d(TAG, "InMobi SDK Initialization Success");
51 | sdkInitStatus = SDKState.SDK_INITIALIZED;
52 | } else {
53 | Log.e(TAG, "InMobi SDK Initialization failed: " + error.getMessage());
54 | sdkInitStatus = SDKState.SDK_INITIALIZE_FAILED;
55 | }
56 | }
57 | });
58 | InMobiSdk.setLogLevel(InMobiSdk.LogLevel.DEBUG);
59 |
60 | setContentView(R.layout.activity_custom_a_b);
61 | mBannerIntegration = (Button) findViewById(R.id.bannerSample);
62 | mBannerIntegration.setOnClickListener(this);
63 | mInterstitialIntegration = (Button) findViewById(R.id.interstitialSample);
64 | mInterstitialIntegration.setOnClickListener(this);
65 |
66 | }
67 |
68 | @Override
69 | public void onClick(View v) {
70 | int id = v.getId();
71 | switch (id) {
72 | case R.id.bannerSample:
73 | switch(sdkInitStatus) {
74 | case SDKState.SDK_INITIALIZE_FAILED:
75 | Toast.makeText(CustomABActivity.this, "InMobi SDK is not initialized." +
76 | "Check logs for more information", Toast.LENGTH_LONG).show();
77 | break;
78 | case SDKState.SDK_INITIALIZED:
79 | startActivity(new Intent(CustomABActivity.this, BannerCustomABActivity.class));
80 | break;
81 | case SDKState.SDK_INITIALIZING:
82 |
83 | break;
84 | }
85 | break;
86 | case R.id.interstitialSample:
87 | switch(sdkInitStatus) {
88 | case SDKState.SDK_INITIALIZE_FAILED:
89 | Toast.makeText(CustomABActivity.this, "InMobi SDK is not initialized." +
90 | "Check logs for more information", Toast.LENGTH_LONG).show();
91 | break;
92 | case SDKState.SDK_INITIALIZED:
93 | startActivity(new Intent(CustomABActivity.this, InterstitialCustomABActivity.class));
94 | break;
95 | case SDKState.SDK_INITIALIZING:
96 | Toast.makeText(CustomABActivity.this, "Please wait for InMobi SDK" +
97 | "to complete the initialization process", Toast.LENGTH_LONG).show();
98 | break;
99 | }
100 | break;
101 | }
102 | }
103 | }
104 |
--------------------------------------------------------------------------------
/samples/customABSample/src/main/java/com/inmobi/customabsample/InterstitialCustomABActivity.java:
--------------------------------------------------------------------------------
1 | package com.inmobi.customabsample;
2 |
3 | import androidx.annotation.NonNull;
4 | import androidx.appcompat.app.AppCompatActivity;
5 |
6 | import android.os.Bundle;
7 | import android.util.Log;
8 | import android.view.View;
9 | import android.widget.Button;
10 |
11 | import com.inmobi.ads.AdMetaInfo;
12 | import com.inmobi.ads.InMobiAdRequestStatus;
13 | import com.inmobi.ads.InMobiInterstitial;
14 | import com.inmobi.ads.listeners.InterstitialAdEventListener;
15 | import com.inmobi.customabsample.customevent.CustomEventInterstitialListener;
16 | import com.inmobi.customabsample.customevent.InMobiInterstitialCustomEvent;
17 |
18 | import java.util.Map;
19 |
20 | public class InterstitialCustomABActivity extends AppCompatActivity implements View.OnClickListener {
21 |
22 | private InMobiInterstitial mInterstitialAd;
23 |
24 | private Button mLoadAdButton;
25 | private Button mShowAdButton;
26 |
27 | private final String TAG = InterstitialCustomABActivity.class.getSimpleName();
28 | private InMobiInterstitialCustomEvent customEvent;
29 |
30 | @Override
31 | protected void onCreate(Bundle savedInstanceState) {
32 | super.onCreate(savedInstanceState);
33 | setContentView(R.layout.activity_interstitial_custom_a_b);
34 | mLoadAdButton = findViewById(R.id.load);
35 | mShowAdButton = findViewById(R.id.show);
36 | mLoadAdButton.setOnClickListener(this);
37 | mShowAdButton.setOnClickListener(this);
38 | }
39 |
40 | private void setupInterstitial() {
41 | mInterstitialAd = new InMobiInterstitial(InterstitialCustomABActivity.this, PlacementId.YOUR_INTERSTITIAL_PLACEMENT_ID,
42 | new InterstitialAdEventListener() {
43 |
44 | @Override
45 | public void onAdFetchSuccessful(@NonNull InMobiInterstitial inMobiInterstitial,
46 | @NonNull AdMetaInfo adMetaInfo) {
47 | Log.d(TAG, "onAdFetchSuccessful with bid " + adMetaInfo.getBid());
48 | if (mShowAdButton != null) {
49 | mLoadAdButton.setVisibility(View.VISIBLE);
50 | }
51 | customEvent = new InMobiInterstitialCustomEvent();
52 | customEvent.setInMobiInterstitial(inMobiInterstitial);
53 | customEvent.loadAd(new CustomEventInterstitialListener() {
54 | @Override
55 | public void onAdLoadSuccess() {
56 | Log.d(TAG, "onAdLoadSuccess");
57 | mShowAdButton.setVisibility(View.VISIBLE);
58 | }
59 |
60 | @Override
61 | public void onAdLoadFailed() {
62 | Log.d(TAG, "onAdLoadFailed");
63 |
64 | }
65 |
66 | @Override
67 | public void onAdShowSuccess() {
68 | Log.d(TAG, "onAdShowSuccess");
69 | }
70 |
71 | @Override
72 | public void onAdShowFailed() {
73 | Log.d(TAG, "onAdShowFailed");
74 | }
75 | });
76 | }
77 |
78 | @Override
79 | public void onAdFetchFailed(@NonNull InMobiInterstitial inMobiInterstitial, @NonNull InMobiAdRequestStatus inMobiAdRequestStatus) {
80 | Log.d(TAG, "onAdFetchFailed due to " + inMobiAdRequestStatus.getMessage());
81 | }
82 | });
83 | }
84 |
85 | @Override
86 | public void onClick(View v) {
87 | int id = v.getId();
88 | switch (id) {
89 | case R.id.load:
90 | setupInterstitial();
91 | mInterstitialAd.getPreloadManager().preload();
92 | break;
93 | case R.id.show:
94 | customEvent.showAd();
95 | break;
96 | }
97 | }
98 | }
99 |
--------------------------------------------------------------------------------
/samples/customABSample/src/main/java/com/inmobi/customabsample/PlacementId.java:
--------------------------------------------------------------------------------
1 | package com.inmobi.customabsample;
2 |
3 | public interface PlacementId {
4 | long YOUR_BANNER_PLACEMENT_ID = 1473189489298L;
5 | long YOUR_INTERSTITIAL_PLACEMENT_ID = 1476878485960L;
6 | }
7 |
--------------------------------------------------------------------------------
/samples/customABSample/src/main/java/com/inmobi/customabsample/customevent/CustomEventBanner.java:
--------------------------------------------------------------------------------
1 | package com.inmobi.customabsample.customevent;
2 |
3 | public interface CustomEventBanner {
4 | void loadAd(CustomEventBannerListener customEvent);
5 | }
6 |
--------------------------------------------------------------------------------
/samples/customABSample/src/main/java/com/inmobi/customabsample/customevent/CustomEventBannerListener.java:
--------------------------------------------------------------------------------
1 | package com.inmobi.customabsample.customevent;
2 |
3 | import android.view.View;
4 |
5 | /**
6 | * CustomEventListener is a base class for banner custom events that supports banner.
7 | * Note: This is a sample interface and it varies from one PPM to another.
8 | */
9 | public interface CustomEventBannerListener {
10 | void onAdLoadSuccess(View view);
11 | void onAdLoadFailed();
12 | }
13 |
--------------------------------------------------------------------------------
/samples/customABSample/src/main/java/com/inmobi/customabsample/customevent/CustomEventInterstitial.java:
--------------------------------------------------------------------------------
1 | package com.inmobi.customabsample.customevent;
2 |
3 | public interface CustomEventInterstitial {
4 | void loadAd(CustomEventInterstitialListener customEventInterstitialListener);
5 | void showAd();
6 | }
7 |
--------------------------------------------------------------------------------
/samples/customABSample/src/main/java/com/inmobi/customabsample/customevent/CustomEventInterstitialListener.java:
--------------------------------------------------------------------------------
1 | package com.inmobi.customabsample.customevent;
2 |
3 | import android.view.View;
4 |
5 | /**
6 | * CustomEventInterstitialListener is a base class for interstitial custom events that supports interstitial.
7 | * Note: This is a sample interface and it varies from one PPM to another.
8 | */
9 | public interface CustomEventInterstitialListener {
10 | void onAdLoadSuccess();
11 | void onAdLoadFailed();
12 | void onAdShowSuccess();
13 | void onAdShowFailed();
14 | }
15 |
--------------------------------------------------------------------------------
/samples/customABSample/src/main/java/com/inmobi/customabsample/customevent/InMobiBannerCustomEvent.java:
--------------------------------------------------------------------------------
1 | package com.inmobi.customabsample.customevent;
2 |
3 | import android.util.Log;
4 |
5 | import androidx.annotation.NonNull;
6 |
7 | import com.inmobi.ads.AdMetaInfo;
8 | import com.inmobi.ads.InMobiAdRequestStatus;
9 | import com.inmobi.ads.InMobiBanner;
10 | import com.inmobi.ads.listeners.BannerAdEventListener;
11 |
12 | public class InMobiBannerCustomEvent implements CustomEventBanner {
13 |
14 | private static final String TAG = InMobiBannerCustomEvent.class.getName();
15 | private InMobiBanner mInMobiBanner;
16 |
17 | /**
18 | Will be called when publisher receives a bid for a Banner ad from InMobi
19 | and should pass the same InMobiBanner ad object for which bid is received
20 | so that custom event class can load an ad using same ad object
21 | @param inMobiBanner: InMobiBanner Ad Object
22 | */
23 | public void setInMobiBanner(@NonNull InMobiBanner inMobiBanner) {
24 | mInMobiBanner = inMobiBanner;
25 | }
26 |
27 | /**
28 | this method is a sample method which Publisher primary mediation (PPM) will be calling when
29 | InMobi line item is executed
30 | The parameters passed in the method can vary from one PPM to the other
31 | */
32 | @Override
33 | public void loadAd(@NonNull final CustomEventBannerListener customEventListener) {
34 | if (mInMobiBanner != null) {
35 | mInMobiBanner.setListener(new BannerAdEventListener() {
36 | @Override
37 | public void onAdLoadSucceeded(@NonNull InMobiBanner inMobiBanner, @NonNull AdMetaInfo adMetaInfo) {
38 | Log.d(TAG, "InMobiBanner ad loaded with bid: " + adMetaInfo.getBid());
39 | customEventListener.onAdLoadSuccess(inMobiBanner);
40 | }
41 |
42 | @Override
43 | public void onAdLoadFailed(@NonNull InMobiBanner inMobiBanner, @NonNull InMobiAdRequestStatus inMobiAdRequestStatus) {
44 | Log.d(TAG, "InMobiBanner ad load failed with message: " + inMobiAdRequestStatus.getMessage());
45 | customEventListener.onAdLoadFailed();
46 | }
47 | });
48 | mInMobiBanner.getPreloadManager().load();
49 | }
50 | }
51 | }
52 |
53 |
--------------------------------------------------------------------------------
/samples/customABSample/src/main/java/com/inmobi/customabsample/customevent/InMobiInterstitialCustomEvent.java:
--------------------------------------------------------------------------------
1 | package com.inmobi.customabsample.customevent;
2 |
3 |
4 | import androidx.annotation.NonNull;
5 |
6 | import com.inmobi.ads.AdMetaInfo;
7 | import com.inmobi.ads.InMobiAdRequestStatus;
8 | import com.inmobi.ads.InMobiInterstitial;
9 | import com.inmobi.ads.listeners.InterstitialAdEventListener;
10 |
11 | public class InMobiInterstitialCustomEvent implements CustomEventInterstitial {
12 |
13 | private static final String TAG = InMobiBannerCustomEvent.class.getName();
14 | private InMobiInterstitial mInMobiInterstitial;
15 | private CustomEventInterstitialListener listener;
16 |
17 | /**
18 | Will be called when publisher receives a bid for a Banner ad from InMobi
19 | and should pass the same InMobiInterstitial ad object for which bid is received
20 | so that custom event class can load an ad using same ad object
21 | @param inMobiInterstitial: InMobiInterstitial Ad Object
22 | */
23 | public void setInMobiInterstitial(@NonNull InMobiInterstitial inMobiInterstitial) {
24 | mInMobiInterstitial = inMobiInterstitial;
25 | }
26 |
27 | /**
28 | this method is a sample method which Publisher primary mediation (PPM) will be calling when
29 | InMobi line item is executed
30 | The parameters passed in the method can vary from one PPM to the other
31 | */
32 | @Override
33 | public void loadAd(final CustomEventInterstitialListener customEventInterstitialListener) {
34 | listener = customEventInterstitialListener;
35 | if (mInMobiInterstitial != null) {
36 | mInMobiInterstitial.setListener(new InterstitialAdEventListener() {
37 | @Override
38 | public void onAdLoadSucceeded(@NonNull InMobiInterstitial inMobiInterstitial, @NonNull AdMetaInfo adMetaInfo) {
39 | listener.onAdLoadSuccess();
40 | }
41 |
42 | @Override
43 | public void onAdLoadFailed(@NonNull InMobiInterstitial inMobiInterstitial, @NonNull InMobiAdRequestStatus inMobiAdRequestStatus) {
44 | listener.onAdLoadFailed();
45 | }
46 | });
47 | mInMobiInterstitial.getPreloadManager().load();
48 | }
49 | }
50 |
51 | @Override
52 | public void showAd() {
53 | mInMobiInterstitial.setListener(new InterstitialAdEventListener() {
54 | @Override
55 | public void onAdDisplayed(@NonNull InMobiInterstitial inMobiInterstitial, @NonNull AdMetaInfo adMetaInfo) {
56 | listener.onAdShowSuccess();
57 | }
58 |
59 | @Override
60 | public void onAdDisplayFailed(@NonNull InMobiInterstitial inMobiInterstitial) {
61 | listener.onAdShowFailed();
62 | }
63 | });
64 | mInMobiInterstitial.show();
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/samples/customABSample/src/main/res/drawable/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InMobi/sdk-sample-code-android/b0596a74b36fb7eb70d2a97fbdcdcba656f4c483/samples/customABSample/src/main/res/drawable/icon.png
--------------------------------------------------------------------------------
/samples/customABSample/src/main/res/layout/activity_banner_custom_a_b.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
13 |
14 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/samples/customABSample/src/main/res/layout/activity_custom_a_b.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
14 |
15 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/samples/customABSample/src/main/res/layout/activity_interstitial_custom_a_b.xml:
--------------------------------------------------------------------------------
1 |
5 |
6 |
12 |
13 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/samples/customABSample/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #6200EE
4 | #3700B3
5 | #03DAC5
6 |
7 |
--------------------------------------------------------------------------------
/samples/customABSample/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | Custom AB Sample
3 | Custom AB Banner
4 | Custom AB Interstitial
5 | Load
6 | Show
7 | Preload
8 |
9 |
--------------------------------------------------------------------------------
/samples/customABSample/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/samples/customABSample/src/main/res/xml/network_security_config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/samples/interstitialSample/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | android {
4 | compileSdkVersion androidCompileSdkVersion
5 |
6 | defaultConfig {
7 | applicationId 'com.inmobi.interstitial.sample'
8 | minSdkVersion androidMinSdkVersion
9 | targetSdkVersion androidTargetSdkVersion
10 | versionCode appVersionCode
11 | versionName appVersionName
12 | multiDexEnabled true
13 | }
14 | buildTypes {
15 | release {
16 | minifyEnabled false
17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
18 | }
19 |
20 | debug {
21 | minifyEnabled false
22 | }
23 | }
24 | compileOptions {
25 | sourceCompatibility JavaVersion.VERSION_1_8
26 | targetCompatibility JavaVersion.VERSION_1_8
27 | }
28 | lintOptions {
29 | abortOnError false
30 | }
31 | dexOptions {
32 | javaMaxHeapSize "4g"
33 | }
34 | }
35 |
36 | dependencies {
37 | implementation fileTree(dir: 'libs', include: ['*.aar'])
38 | implementation 'com.google.android.material:material:1.0.0'
39 | implementation 'androidx.appcompat:appcompat:1.0.0'
40 | implementation 'androidx.multidex:multidex:2.0.0'
41 |
42 | implementation "com.inmobi.monetization:inmobi-ads-kotlin:$inmobiSdkVersion"
43 | implementation "com.google.android.gms:play-services-ads-identifier:$playservicesadsidentifier"
44 | implementation "com.google.android.gms:play-services-location:$playserviceslocation"
45 | implementation "androidx.recyclerview:recyclerview:$recyclerview"
46 | implementation "com.squareup.picasso:picasso:$picasso"
47 | implementation "androidx.browser:browser:$browser"
48 | implementation "com.google.android.gms:play-services-appset:$playservicesappset"
49 | implementation "com.google.android.gms:play-services-tasks:$playservicestask"
50 |
51 | }
52 |
--------------------------------------------------------------------------------
/samples/interstitialSample/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in /Library/sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
19 | -keepattributes SourceFile,LineNumberTable,InnerClasses
20 | -keep class com.inmobi.** { *; }
21 | -dontwarn com.inmobi.**
22 | -keep class com.google.android.gms.common.api.GoogleApiClient { public *; }
23 | -keep class com.google.android.gms.common.api.GoogleApiClient$* {public *;}
24 | -keep class com.google.android.gms.location.LocationServices {public *;}
25 | -keep class com.google.android.gms.location.FusedLocationProviderApi {public *;}
26 | -keep class com.google.android.gms.location.ActivityRecognition {public *;}
27 | -keep class com.google.android.gms.location.ActivityRecognitionApi {public *;}
28 | -keep class com.google.android.gms.location.ActivityRecognitionResult {public *;}
29 | -keep class com.google.android.gms.location.DetectedActivity {public *;}
30 | -keep class com.google.android.gms.ads.identifier.AdvertisingIdClient{
31 | public *;
32 | }
33 | -keep class com.google.android.gms.ads.identifier.AdvertisingIdClient$Info{
34 | public *;
35 | }
36 | -dontwarn com.google.android.gms.**
37 | # skip the Picasso library classes
38 | -keep class com.squareup.picasso.** {*;}
39 | -dontwarn com.squareup.picasso.**
40 | # skip Moat classes
41 | -keep class com.moat.** {*;}
42 | -dontwarn com.moat.**
43 |
--------------------------------------------------------------------------------
/samples/interstitialSample/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
19 |
20 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/samples/interstitialSample/src/main/java/com/inmobi/interstitial/sample/InterstitialAdsActivity.java:
--------------------------------------------------------------------------------
1 | package com.inmobi.interstitial.sample;
2 |
3 | import android.os.Bundle;
4 |
5 | import androidx.annotation.NonNull;
6 | import androidx.annotation.Nullable;
7 | import androidx.appcompat.app.AppCompatActivity;
8 | import android.util.Log;
9 | import android.view.View;
10 | import android.widget.Button;
11 | import android.widget.Toast;
12 |
13 | import com.inmobi.ads.AdMetaInfo;
14 | import com.inmobi.ads.InMobiAdRequestStatus;
15 | import com.inmobi.ads.InMobiInterstitial;
16 | import com.inmobi.ads.listeners.InterstitialAdEventListener;
17 | import com.inmobi.sdk.InMobiSdk;
18 | import com.inmobi.sdk.SdkInitializationListener;
19 |
20 | import org.json.JSONException;
21 | import org.json.JSONObject;
22 |
23 | import java.util.Map;
24 |
25 | public class InterstitialAdsActivity extends AppCompatActivity {
26 |
27 | private InMobiInterstitial mInterstitialAd;
28 | private Button mLoadAdButton;
29 | private Button mShowAdButton;
30 | private final String TAG = InterstitialAdsActivity.class.getSimpleName();
31 |
32 | @Override
33 | protected void onCreate(Bundle savedInstanceState) {
34 | super.onCreate(savedInstanceState);
35 | JSONObject consent = new JSONObject();
36 | try {
37 | // Provide correct consent value to sdk which is obtained by User
38 | consent.put(InMobiSdk.IM_GDPR_CONSENT_AVAILABLE, true);
39 | } catch (JSONException e) {
40 | e.printStackTrace();
41 | }
42 |
43 | InMobiSdk.setLogLevel(InMobiSdk.LogLevel.DEBUG);
44 | InMobiSdk.init(this, "1234567890qwerty0987654321qwerty12345", consent, new SdkInitializationListener() {
45 | @Override
46 | public void onInitializationComplete(@Nullable Error error) {
47 | if (error == null) {
48 | Log.d(TAG, "InMobi SDK Initialization Success");
49 | mLoadAdButton.setOnClickListener(new View.OnClickListener() {
50 | @Override
51 | public void onClick(View view) {
52 | if (null == mInterstitialAd) {
53 | setupInterstitial();
54 | } else {
55 | mInterstitialAd.load();
56 | }
57 | }
58 | });
59 | } else {
60 | Log.e(TAG, "InMobi SDK Initialization failed: " + error.getMessage());
61 | mLoadAdButton.setOnClickListener(new View.OnClickListener() {
62 | @Override
63 | public void onClick(View v) {
64 | Toast.makeText(InterstitialAdsActivity.this, "InMobi SDK is not initialized." +
65 | "Check logs for more information", Toast.LENGTH_LONG).show();
66 | }
67 | });
68 | }
69 | }
70 | });
71 |
72 | setContentView(R.layout.activity_interstitial_ads);
73 |
74 | mLoadAdButton = (Button) findViewById(R.id.button_load_ad);
75 | mShowAdButton = (Button) findViewById(R.id.button_show_ad);
76 | mShowAdButton.setOnClickListener(new View.OnClickListener() {
77 | @Override
78 | public void onClick(View view) {
79 | mInterstitialAd.show();
80 | }
81 | });
82 | setupInterstitial();
83 | }
84 |
85 | @Override
86 | public void onResume() {
87 | super.onResume();
88 | adjustButtonVisibility();
89 | }
90 |
91 | private void adjustButtonVisibility() {
92 | mLoadAdButton.setVisibility(View.VISIBLE);
93 | mShowAdButton.setVisibility(View.GONE);
94 | }
95 |
96 | private void setupInterstitial() {
97 | mInterstitialAd = new InMobiInterstitial(InterstitialAdsActivity.this, PlacementId.YOUR_PLACEMENT_ID,
98 | new InterstitialAdEventListener() {
99 | @Override
100 | public void onAdLoadSucceeded(@NonNull InMobiInterstitial inMobiInterstitial,
101 | @NonNull AdMetaInfo adMetaInfo) {
102 | Log.d(TAG, "onAdLoadSuccessful with bid " + adMetaInfo.getBid());
103 | if (inMobiInterstitial.isReady()) {
104 | if (mShowAdButton != null) {
105 | mShowAdButton.setVisibility(View.VISIBLE);
106 | }
107 | } else {
108 | Log.d(TAG, "onAdLoadSuccessful inMobiInterstitial not ready");
109 | }
110 | }
111 |
112 | @Override
113 | public void onAdLoadFailed(InMobiInterstitial inMobiInterstitial, InMobiAdRequestStatus inMobiAdRequestStatus) {
114 | Log.d(TAG, "Unable to load interstitial ad (error message: " +
115 | inMobiAdRequestStatus.getMessage());
116 | }
117 |
118 | @Override
119 | public void onAdFetchSuccessful(@NonNull InMobiInterstitial inMobiInterstitial, @NonNull AdMetaInfo adMetaInfo) {
120 | Log.d(TAG, "onAdFetchSuccessful with bid " + adMetaInfo.getBid());
121 | }
122 |
123 | @Override
124 | public void onAdClicked(InMobiInterstitial inMobiInterstitial, Map map) {
125 | Log.d(TAG, "onAdClicked " + map.size());
126 | }
127 |
128 | @Override
129 | public void onAdWillDisplay(InMobiInterstitial inMobiInterstitial) {
130 | Log.d(TAG, "onAdWillDisplay");
131 | }
132 |
133 | @Override
134 | public void onAdDisplayed(@NonNull InMobiInterstitial inMobiInterstitial,
135 | @NonNull AdMetaInfo adMetaInfo) {
136 | Log.d(TAG, "onAdDisplayed");
137 | }
138 |
139 | @Override
140 | public void onAdDisplayFailed(@NonNull InMobiInterstitial inMobiInterstitial) {
141 | Log.d(TAG, "onAdDisplayFailed");
142 | }
143 |
144 | @Override
145 | public void onAdDismissed(@NonNull InMobiInterstitial inMobiInterstitial) {
146 | Log.d(TAG, "onAdDismissed");
147 | }
148 |
149 | @Override
150 | public void onUserLeftApplication(@NonNull InMobiInterstitial inMobiInterstitial) {
151 | Log.d(TAG, "onUserWillLeaveApplication");
152 | }
153 |
154 | @Override
155 | public void onRewardsUnlocked(@NonNull InMobiInterstitial inMobiInterstitial,
156 | @NonNull Map map) {
157 | Log.d(TAG, "onRewardsUnlocked " + map);
158 | }
159 |
160 | @Override
161 | public void onAdImpression(@NonNull InMobiInterstitial inMobiInterstitial) {
162 | Log.d(TAG, "onAdImpression");
163 | }
164 | });
165 | mInterstitialAd.show();
166 | }
167 | }
168 |
--------------------------------------------------------------------------------
/samples/interstitialSample/src/main/java/com/inmobi/interstitial/sample/PlacementId.java:
--------------------------------------------------------------------------------
1 | package com.inmobi.interstitial.sample;
2 |
3 | public interface PlacementId {
4 | // PLID for Interstitial full screen
5 | //long YOUR_PLACEMENT_ID = 1476878485960L;
6 |
7 | // PLID for Rewarded video
8 | long YOUR_PLACEMENT_ID = 1475973082314L;
9 | }
10 |
--------------------------------------------------------------------------------
/samples/interstitialSample/src/main/res/anim/left_out.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
8 |
--------------------------------------------------------------------------------
/samples/interstitialSample/src/main/res/anim/right_in.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
8 |
--------------------------------------------------------------------------------
/samples/interstitialSample/src/main/res/drawable/bg_parent_rounded_corner.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/samples/interstitialSample/src/main/res/drawable/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InMobi/sdk-sample-code-android/b0596a74b36fb7eb70d2a97fbdcdcba656f4c483/samples/interstitialSample/src/main/res/drawable/icon.png
--------------------------------------------------------------------------------
/samples/interstitialSample/src/main/res/layout/activity_interstitial_ads.xml:
--------------------------------------------------------------------------------
1 |
8 |
9 |
10 |
11 |
18 |
19 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/samples/interstitialSample/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InMobi/sdk-sample-code-android/b0596a74b36fb7eb70d2a97fbdcdcba656f4c483/samples/interstitialSample/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/samples/interstitialSample/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InMobi/sdk-sample-code-android/b0596a74b36fb7eb70d2a97fbdcdcba656f4c483/samples/interstitialSample/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/samples/interstitialSample/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InMobi/sdk-sample-code-android/b0596a74b36fb7eb70d2a97fbdcdcba656f4c483/samples/interstitialSample/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/samples/interstitialSample/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InMobi/sdk-sample-code-android/b0596a74b36fb7eb70d2a97fbdcdcba656f4c483/samples/interstitialSample/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/samples/interstitialSample/src/main/res/values-w820dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 64dp
6 |
7 |
--------------------------------------------------------------------------------
/samples/interstitialSample/src/main/res/values/attr.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/samples/interstitialSample/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #ffffff
4 | #d3d6db
5 | #ffffff
6 | #c2c3c8
7 | #0a80d1
8 | #808080
9 | #d3d3d3
10 |
11 |
--------------------------------------------------------------------------------
/samples/interstitialSample/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 16dp
4 | 16dp
5 |
6 | 10dp
7 | 20dp
8 | 15dp
9 | 48dp
10 | 10dp
11 | 15dp
12 | 13dp
13 | 15dp
14 | 13dp
15 | 3dp
16 | 1dp
17 |
18 |
--------------------------------------------------------------------------------
/samples/interstitialSample/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | InMobi Interstitial Sample
3 |
4 | Banner Ad through XML layout
5 | Settings
6 | BannerActivity
7 | InterstitialActivity
8 | NativeFeedActivity
9 | NativeNewsActivity
10 | NativeBoardActivity
11 | NativeCoverActivity
12 | InMobi Demo App
13 |
14 | Interstitial Ads
15 | Show Fullscreen Ad
16 | Load Ad
17 | Load Prefetched Ad
18 | Show Ad
19 | Show Ad with animation
20 | Native Ads
21 | Native Ad in Image Feed
22 | Native Ad in News Feed
23 | Native Ad in Board Feed
24 | Native Ad in Flow
25 | Title
26 |
27 | Refresh
28 | InMobi Interstitial Ad
29 | BannerXMLActivity
30 | Sponsored
31 | NativeAdsActivity
32 |
33 | Headlines
34 | Photos
35 | News
36 | Gallery
37 | BannerAdsActivity
38 | InterstitialAdsActivity
39 | Caption
40 |
41 | StoryboardsActivity
42 |
43 |
--------------------------------------------------------------------------------
/samples/interstitialSample/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
11 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/samples/interstitialSample/src/main/res/xml/network_security_config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/samples/nativeSample/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | android {
4 | compileSdkVersion androidCompileSdkVersion
5 |
6 | defaultConfig {
7 | applicationId "com.inmobi.nativead.sample"
8 | minSdkVersion androidMinSdkVersion
9 | targetSdkVersion androidTargetSdkVersion
10 | versionCode appVersionCode
11 | versionName appVersionName
12 | multiDexEnabled true
13 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
14 |
15 | }
16 | buildTypes {
17 | release {
18 | minifyEnabled false
19 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
20 | }
21 | }
22 | compileOptions {
23 | sourceCompatibility JavaVersion.VERSION_1_8
24 | targetCompatibility JavaVersion.VERSION_1_8
25 | }
26 | }
27 |
28 | dependencies {
29 | implementation fileTree(dir: 'libs', include: ['*.aar'])
30 | androidTestImplementation('androidx.test.espresso:espresso-core:3.1.0', {
31 | exclude group: 'com.android.support', module: 'support-annotations'
32 | })
33 | implementation 'com.google.android.material:material:1.0.0'
34 | implementation 'androidx.appcompat:appcompat:1.0.0'
35 | implementation 'androidx.annotation:annotation:1.0.0'
36 | implementation 'androidx.legacy:legacy-support-v4:1.0.0'
37 | implementation 'androidx.recyclerview:recyclerview:1.0.0'
38 | implementation 'androidx.cardview:cardview:1.0.0'
39 | implementation 'androidx.multidex:multidex:2.0.0'
40 |
41 | implementation "com.inmobi.monetization:inmobi-ads-kotlin:$inmobiSdkVersion"
42 | implementation "com.google.android.gms:play-services-ads-identifier:$playservicesadsidentifier"
43 | implementation "com.google.android.gms:play-services-location:$playserviceslocation"
44 | implementation "androidx.recyclerview:recyclerview:$recyclerview"
45 | implementation "com.squareup.picasso:picasso:$picasso"
46 | implementation "androidx.browser:browser:$browser"
47 | implementation "com.google.android.gms:play-services-appset:$playservicesappset"
48 | implementation "com.google.android.gms:play-services-tasks:$playservicestask"
49 |
50 | testImplementation 'junit:junit:4.12'
51 | }
52 |
--------------------------------------------------------------------------------
/samples/nativeSample/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in /Users/swagato.mondal/Library/Android/sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
19 | # Uncomment this to preserve the line number information for
20 | # debugging stack traces.
21 | #-keepattributes SourceFile,LineNumberTable
22 |
23 | # If you keep the line number information, uncomment this to
24 | # hide the original source file name.
25 | #-renamesourcefileattribute SourceFile
26 |
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
18 |
19 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/java/com/inmobi/nativead/PlacementId.java:
--------------------------------------------------------------------------------
1 | package com.inmobi.nativead;
2 |
3 | /**
4 | * Placement ID to be used to render the Native ads.
5 | */
6 | public interface PlacementId {
7 | long YOUR_PLACEMENT_ID_HERE = 1492763427180L;
8 | }
9 |
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/java/com/inmobi/nativead/sample/FragmentAdapter.java:
--------------------------------------------------------------------------------
1 | package com.inmobi.nativead.sample;
2 |
3 | import androidx.fragment.app.Fragment;
4 | import androidx.fragment.app.FragmentManager;
5 | import androidx.fragment.app.FragmentStatePagerAdapter;
6 |
7 | import com.google.android.material.tabs.TabLayout;
8 |
9 | import com.inmobi.nativead.sample.listview.ListViewFeedFragment;
10 | import com.inmobi.nativead.sample.recyclerview.RecyclerFeedFragment;
11 | import com.inmobi.nativead.sample.singlestrand.SingleNativeAdFragment;
12 |
13 | class FragmentAdapter extends FragmentStatePagerAdapter {
14 |
15 | private static final int NUM_TABS = 3;
16 |
17 | private static final int POSITION_CUSTOM_INTEGRATION = 0;
18 |
19 | private static final int POSITION_LIST_VIEW_INTEGRATION = 1;
20 |
21 | private static final int POSITION_RECYCLER_VIEW_INTEGRATION = 2;
22 |
23 | FragmentAdapter(FragmentManager fm, TabLayout tabLayout) {
24 | super(fm);
25 | for (int position = 0; position < NUM_TABS; position++) {
26 | tabLayout.addTab(tabLayout.newTab().setText(getTitle(position)));
27 | }
28 | }
29 |
30 | @Override
31 | public Fragment getItem(int position) {
32 | switch (position) {
33 | case POSITION_CUSTOM_INTEGRATION:
34 | return new SingleNativeAdFragment();
35 |
36 | case POSITION_LIST_VIEW_INTEGRATION:
37 | return new ListViewFeedFragment();
38 |
39 | case POSITION_RECYCLER_VIEW_INTEGRATION:
40 | return new RecyclerFeedFragment();
41 |
42 | default:
43 | throw new IllegalArgumentException("No fragment for position:" + position);
44 | }
45 | }
46 |
47 | private String getTitle(int position) {
48 | switch (position) {
49 | case POSITION_CUSTOM_INTEGRATION:
50 | return SingleNativeAdFragment.getTitle();
51 |
52 | case POSITION_LIST_VIEW_INTEGRATION:
53 | return ListViewFeedFragment.getTitle();
54 |
55 | case POSITION_RECYCLER_VIEW_INTEGRATION:
56 | return RecyclerFeedFragment.getTitle();
57 |
58 | default:
59 | throw new IllegalArgumentException("No Title for position:" + position);
60 | }
61 | }
62 |
63 | @Override
64 | public int getCount() {
65 | return 3;
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/java/com/inmobi/nativead/sample/NativeAdsActivity.java:
--------------------------------------------------------------------------------
1 | package com.inmobi.nativead.sample;
2 |
3 | import android.os.Bundle;
4 | import android.util.Log;
5 |
6 | import com.google.android.material.tabs.TabLayout;
7 |
8 | import androidx.annotation.Nullable;
9 | import androidx.appcompat.app.AppCompatActivity;
10 | import androidx.appcompat.widget.Toolbar;
11 | import androidx.viewpager.widget.ViewPager;
12 |
13 | import com.inmobi.sdk.InMobiSdk;
14 | import com.inmobi.sdk.SdkInitializationListener;
15 | import com.inmobi.unification.sdk.InitializationStatus;
16 |
17 | import org.json.JSONException;
18 | import org.json.JSONObject;
19 |
20 | public class NativeAdsActivity extends AppCompatActivity {
21 |
22 | private static final String TAG = NativeAdsActivity.class.getName();
23 | @Override
24 | public void onCreate(Bundle savedInstanceState) {
25 | super.onCreate(savedInstanceState);
26 |
27 | //Initialize Inmobi SDK before any API call.
28 | InMobiSdk.setLogLevel(InMobiSdk.LogLevel.DEBUG);
29 | JSONObject consent = new JSONObject();
30 | try {
31 | // Provide correct consent value to sdk which is obtained by User
32 | consent.put(InMobiSdk.IM_GDPR_CONSENT_AVAILABLE, true);
33 | } catch (JSONException e) {
34 | e.printStackTrace();
35 | }
36 | InMobiSdk.setLogLevel(InMobiSdk.LogLevel.DEBUG);
37 | InMobiSdk.init(this, "12345678901234567890123456789012", consent, new SdkInitializationListener() {
38 | @Override
39 | public void onInitializationComplete(@Nullable Error error) {
40 | if (error == null) {
41 | Log.d(TAG, "InMobi SDK Initialization Success");
42 | TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
43 | tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
44 |
45 | final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
46 | final FragmentAdapter adapter = new FragmentAdapter(getSupportFragmentManager(), tabLayout);
47 | viewPager.setAdapter(adapter);
48 | viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
49 | tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
50 | @Override
51 | public void onTabSelected(TabLayout.Tab tab) {
52 | viewPager.setCurrentItem(tab.getPosition());
53 | }
54 |
55 | @Override
56 | public void onTabUnselected(TabLayout.Tab tab) {
57 | }
58 |
59 | @Override
60 | public void onTabReselected(TabLayout.Tab tab) {
61 | }
62 | });
63 | } else {
64 | Log.e(TAG, "InMobi SDK Initialization failed: " + error.getMessage());
65 | }
66 | }
67 | });
68 |
69 | setContentView(R.layout.activity_native_ads);
70 | Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
71 | setSupportActionBar(toolbar);
72 | getSupportActionBar().setDisplayHomeAsUpEnabled(false);
73 | }
74 | }
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/java/com/inmobi/nativead/sample/listview/AdFeedItem.java:
--------------------------------------------------------------------------------
1 | package com.inmobi.nativead.sample.listview;
2 |
3 | import com.inmobi.ads.InMobiNative;
4 | import com.inmobi.nativead.utility.FeedData.FeedItem;
5 |
6 | public class AdFeedItem extends FeedItem {
7 | InMobiNative mNativeStrand;
8 |
9 | AdFeedItem(InMobiNative nativeStrand) {
10 | super("", "", "", "", "", "");
11 | mNativeStrand = nativeStrand;
12 | }
13 | }
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/java/com/inmobi/nativead/sample/listview/FeedItemAdapter.java:
--------------------------------------------------------------------------------
1 | package com.inmobi.nativead.sample.listview;
2 |
3 | import android.app.Activity;
4 | import android.content.Context;
5 | import androidx.annotation.NonNull;
6 | import android.util.DisplayMetrics;
7 | import android.view.LayoutInflater;
8 | import android.view.View;
9 | import android.view.ViewGroup;
10 | import android.widget.ArrayAdapter;
11 | import android.widget.Button;
12 | import android.widget.FrameLayout;
13 | import android.widget.ImageView;
14 | import android.widget.RatingBar;
15 | import android.widget.TextView;
16 |
17 | import com.inmobi.ads.InMobiNative;
18 | import com.inmobi.nativead.sample.R;
19 | import com.inmobi.nativead.utility.FeedData.FeedItem;
20 | import com.squareup.picasso.Picasso;
21 |
22 | import java.util.ArrayList;
23 |
24 | class FeedItemAdapter extends ArrayAdapter {
25 | private Context mContext;
26 | private ArrayList mUsers;
27 | private LayoutInflater mLayoutInflater;
28 | //Number of types of Views that Content feed wishes to display
29 | private static final int NUM_CONTENT_FEED_VIEW_TYPES = 1;
30 |
31 | //InmobiStrand always uses the same type of view to display Ad.
32 | private static final int NUM_AD_FEED_VIEW_TYPES = 1;
33 |
34 | //View type for Content Feed.
35 | private static final int VIEW_TYPE_CONTENT_FEED = 0;
36 |
37 | //View type for Ad Feed - from InMobi (InMobi Native Strand)
38 | private static final int VIEW_TYPE_INMOBI_STRAND = 1;
39 |
40 | FeedItemAdapter(Context mContext, ArrayList mUsers) {
41 | super(mContext, R.layout.listitem, R.id.title, mUsers);
42 | this.mContext = mContext;
43 | this.mUsers = mUsers;
44 | this.mLayoutInflater = LayoutInflater.from(mContext);
45 | }
46 |
47 | @Override
48 | public int getViewTypeCount() {
49 | return NUM_CONTENT_FEED_VIEW_TYPES + NUM_AD_FEED_VIEW_TYPES;
50 | }
51 |
52 | @Override
53 | public int getItemViewType(int position) {
54 | FeedItem feedItem = getItem(position);
55 | if (feedItem instanceof AdFeedItem) {
56 | return VIEW_TYPE_INMOBI_STRAND;
57 | }
58 | return VIEW_TYPE_CONTENT_FEED;
59 | }
60 |
61 | @Override
62 | public FeedItem getItem(int position) {
63 | return mUsers.get(position);
64 | }
65 |
66 | @NonNull
67 | @Override
68 | @SuppressWarnings("deprecation")
69 | public View getView(int position, View convertView, @NonNull ViewGroup parent) {
70 | final int itemViewType = getItemViewType(position);
71 | final FeedItem feedItem = getItem(position);
72 |
73 | if (itemViewType == VIEW_TYPE_CONTENT_FEED) {
74 | ContentViewHolder viewHolder;
75 | if (null == convertView || null == convertView.getTag()) {
76 | convertView = mLayoutInflater.inflate(R.layout.listitem, parent, false);
77 | viewHolder = new ContentViewHolder();
78 | viewHolder.title = (TextView) convertView.findViewById(R.id.title);
79 | viewHolder.subtitle = (TextView) convertView.findViewById(R.id.subtitle);
80 | viewHolder.time_tt = (TextView) convertView.findViewById(R.id.time_tt);
81 | viewHolder.description_tt = (TextView) convertView.findViewById(R.id.description_tt);
82 | viewHolder.thumb_image = (ImageView) convertView.findViewById(R.id.thumb_image);
83 | viewHolder.big_image = (ImageView) convertView.findViewById(R.id.big_image);
84 | viewHolder.bottom_img = (ImageView) convertView.findViewById(R.id.bottom_img);
85 | convertView.setTag(viewHolder);
86 | } else {
87 | viewHolder = (ContentViewHolder) convertView.getTag();
88 | }
89 |
90 | FeedItem feed = getItem(position);
91 | viewHolder.title.setText(feed.getTitle());
92 | viewHolder.subtitle.setText(feed.getSubtitle());
93 | viewHolder.time_tt.setText(feed.getTimestamp());
94 | viewHolder.description_tt.setText(feed.getDescription());
95 |
96 | Picasso.get()
97 | .load(mContext.getResources().getIdentifier(feed.getThumbImage(), "drawable", mContext.getPackageName()))
98 | .into(viewHolder.thumb_image);
99 |
100 | Picasso.get()
101 | .load(mContext.getResources().getIdentifier(feed.getBigImage(), "drawable", mContext.getPackageName()))
102 | .into(viewHolder.big_image);
103 |
104 | Picasso.get()
105 | .load(R.drawable.linkedin_bottom)
106 | .into(viewHolder.bottom_img);
107 |
108 | return convertView;
109 | } else {
110 | //If ad feed, request InMobiStrand View. Note InMobiNativeStrand.getStrandView
111 | //returns null if ad is not loaded.
112 | //As we add AdFeed only onAdLoadSucceeded & clear the AdFeed onAdLoadFailed
113 | //ad, here we do not run into Null pointer Exception
114 | final InMobiNative inMobiNative = ((AdFeedItem) feedItem).mNativeStrand;
115 |
116 | AdViewHolder viewHolder;
117 | if (null == convertView || null == convertView.getTag()) {
118 | convertView = mLayoutInflater.inflate(R.layout.layout_ad, parent, false);
119 | viewHolder = new AdViewHolder();
120 | viewHolder.icon = (ImageView) convertView.findViewById(R.id.adIcon);
121 | viewHolder.title = (TextView) convertView.findViewById(R.id.adTitle);
122 | viewHolder.description = (TextView) convertView.findViewById(R.id.adDescription);
123 | viewHolder.action = (Button) convertView.findViewById(R.id.adAction);
124 | viewHolder.content = (FrameLayout) convertView.findViewById(R.id.adContent);
125 | viewHolder.ratingBar = (RatingBar) convertView.findViewById(R.id.adRating);
126 | convertView.setTag(viewHolder);
127 | } else {
128 | viewHolder = (AdViewHolder) convertView.getTag();
129 | }
130 |
131 | Picasso.get()
132 | .load(inMobiNative.getAdIconUrl())
133 | .into(viewHolder.icon);
134 | viewHolder.title.setText(inMobiNative.getAdTitle());
135 | viewHolder.description.setText(inMobiNative.getAdDescription());
136 | viewHolder.action.setText(inMobiNative.getAdCtaText());
137 |
138 | DisplayMetrics displayMetrics = new DisplayMetrics();
139 | ((Activity) mContext).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
140 | viewHolder.content.addView(inMobiNative.getPrimaryViewOfWidth(mContext, viewHolder.content,
141 | parent, displayMetrics.widthPixels));
142 |
143 | float rating = inMobiNative.getAdRating();
144 | if (rating != 0) {
145 | viewHolder.ratingBar.setRating(rating);
146 | }
147 | viewHolder.ratingBar.setVisibility(rating != 0 ? View.VISIBLE : View.GONE);
148 |
149 | viewHolder.action.setOnClickListener(new View.OnClickListener() {
150 | @Override
151 | public void onClick(View v) {
152 | inMobiNative.reportAdClickAndOpenLandingPage();
153 | }
154 | });
155 |
156 | return convertView;
157 | }
158 | }
159 |
160 | private static class ContentViewHolder {
161 | TextView title;
162 | TextView subtitle;
163 | TextView time_tt;
164 | TextView description_tt;
165 | ImageView thumb_image;
166 | ImageView big_image;
167 | ImageView bottom_img;
168 | }
169 |
170 | private static class AdViewHolder {
171 | TextView title, description;
172 | ImageView icon;
173 | Button action;
174 | FrameLayout content;
175 | RatingBar ratingBar;
176 | }
177 | }
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/java/com/inmobi/nativead/sample/listview/ListViewFeedFragment.java:
--------------------------------------------------------------------------------
1 | package com.inmobi.nativead.sample.listview;
2 |
3 | import android.os.Bundle;
4 | import androidx.annotation.NonNull;
5 | import androidx.core.view.ViewCompat;
6 | import androidx.fragment.app.ListFragment;
7 | import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
8 |
9 | import android.util.Log;
10 | import android.view.LayoutInflater;
11 | import android.view.View;
12 | import android.view.ViewGroup;
13 | import android.widget.BaseAdapter;
14 | import android.widget.ListView;
15 |
16 | import com.inmobi.ads.AdMetaInfo;
17 | import com.inmobi.ads.InMobiAdRequestStatus;
18 | import com.inmobi.ads.InMobiNative;
19 | import com.inmobi.ads.listeners.NativeAdEventListener;
20 | import com.inmobi.nativead.PlacementId;
21 | import com.inmobi.nativead.utility.FeedData;
22 | import com.inmobi.nativead.utility.SwipeRefreshLayoutWrapper;
23 |
24 | import java.util.ArrayList;
25 | import java.util.HashMap;
26 | import java.util.Iterator;
27 | import java.util.List;
28 | import java.util.Map;
29 |
30 | /**
31 | * Demonstrates the use of InMobiNativeStrand to place ads in a ListView.
32 | *
33 | * Note: Swipe to refresh ads.
34 | */
35 | public class ListViewFeedFragment extends ListFragment {
36 |
37 | private static final String TAG = ListViewFeedFragment.class.getSimpleName();
38 |
39 | private final List mStrands = new ArrayList<>();
40 |
41 | //Position in feed where the Ads needs to be placed once loaded.
42 | // Note: Actual position where ad is visible depends on
43 | // 1. availability of ad (case like NO_FILL)
44 | // 2. Order in which ad response arrives.
45 | private int[] mAdPositions = new int[]{3, 6, 17};
46 |
47 | private static final int NUM_FEED_ITEMS = 20;
48 |
49 | private BaseAdapter mFeedAdapter;
50 | private ArrayList mFeedItems;
51 | private Map mFeedMap = new HashMap<>();
52 |
53 | public static String getTitle() {
54 | return "ListView Placement";
55 | }
56 |
57 | @Override
58 | public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
59 | final View listFragmentView = super.onCreateView(inflater, container, savedInstanceState);
60 | final SwipeRefreshLayout swipeRefreshLayout = SwipeRefreshLayoutWrapper.getInstance(getActivity(),
61 | new SwipeRefreshLayoutWrapper.Listener() {
62 | @Override
63 | public boolean canChildScrollUp() {
64 | final ListView listView = getListView();
65 | return listView.getVisibility() == View.VISIBLE && canListViewScrollUp(listView);
66 | }
67 |
68 | @Override
69 | public void onRefresh() {
70 | refreshAds();
71 | }
72 | });
73 | swipeRefreshLayout.addView(listFragmentView,
74 | ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
75 | return swipeRefreshLayout;
76 | }
77 |
78 | @Override
79 | public void onActivityCreated(Bundle savedInstanceState) {
80 | super.onActivityCreated(savedInstanceState);
81 | mFeedItems = FeedData.generateFeedItems(NUM_FEED_ITEMS);
82 | mFeedAdapter = new FeedItemAdapter(getActivity(), mFeedItems);
83 | setListAdapter(mFeedAdapter);
84 | createStrands();
85 | loadAds();
86 | }
87 |
88 | private void createStrands() {
89 | for (int position : mAdPositions) {
90 | final InMobiNative nativeStrand = new InMobiNative(getActivity(),
91 | PlacementId.YOUR_PLACEMENT_ID_HERE, new StrandAdListener(position));
92 |
93 | mStrands.add(nativeStrand);
94 | }
95 | }
96 |
97 | private void loadAds() {
98 | for (InMobiNative strand : mStrands) {
99 | strand.load();
100 | }
101 | }
102 |
103 | private void refreshAds() {
104 | clearAds();
105 | createStrands();
106 | loadAds();
107 | }
108 |
109 | private void clearAds() {
110 | Iterator feedItemIterator = mFeedItems.iterator();
111 | while (feedItemIterator.hasNext()) {
112 | final FeedData.FeedItem feedItem = feedItemIterator.next();
113 | if (feedItem instanceof AdFeedItem) {
114 | feedItemIterator.remove();
115 | }
116 | }
117 | mFeedAdapter.notifyDataSetChanged();
118 | for (InMobiNative strand : mStrands) {
119 | strand.destroy();
120 | }
121 | mStrands.clear();
122 | mFeedMap.clear();
123 | }
124 |
125 | @Override
126 | public void onDestroyView() {
127 | clearAds();
128 | super.onDestroyView();
129 | }
130 |
131 |
132 | private final class StrandAdListener extends NativeAdEventListener {
133 |
134 | private int mPosition;
135 |
136 | StrandAdListener(int position) {
137 | mPosition = position;
138 | }
139 |
140 | @Override
141 | public void onAdLoadSucceeded(@NonNull InMobiNative inMobiNativeStrand, @NonNull AdMetaInfo adMetaInfo) {
142 | Log.d(TAG, "Strand loaded at position " + mPosition);
143 | if (!mFeedItems.isEmpty()) {
144 | FeedData.FeedItem oldFeedItem = mFeedMap.get(mPosition);
145 | if (oldFeedItem != null) {
146 | mFeedMap.remove(mPosition);
147 | mFeedItems.remove(oldFeedItem);
148 | }
149 | AdFeedItem adFeedItem = new AdFeedItem(inMobiNativeStrand);
150 | mFeedMap.put(mPosition, adFeedItem);
151 | mFeedItems.add(mPosition, adFeedItem);
152 | mFeedAdapter.notifyDataSetChanged();
153 | }
154 | }
155 |
156 | @Override
157 | public void onAdLoadFailed(@NonNull InMobiNative inMobiNativeStrand, @NonNull final InMobiAdRequestStatus inMobiAdRequestStatus) {
158 | Log.d(TAG, "Ad Load failed for" + mPosition + "(" + inMobiAdRequestStatus.getMessage() + ")");
159 | if (!mFeedItems.isEmpty()) {
160 | FeedData.FeedItem oldFeedItem = mFeedMap.get(mPosition);
161 | if (oldFeedItem != null) {
162 | mFeedMap.remove(mPosition);
163 | mFeedItems.remove(oldFeedItem);
164 | mFeedAdapter.notifyDataSetChanged();
165 | Log.d(TAG, "Ad removed for" + mPosition);
166 | }
167 | }
168 | }
169 |
170 | @Override
171 | public void onAdFetchSuccessful(@NonNull InMobiNative inMobiNative, @NonNull AdMetaInfo adMetaInfo) {
172 | Log.d(TAG, "onAdFetchSuccessful with bid " + adMetaInfo.getBid());
173 | }
174 |
175 | @Override
176 | public void onAdFullScreenDismissed(InMobiNative inMobiNative) {
177 | Log.d(TAG, "Ad fullscreen dismissed.");
178 | }
179 |
180 | @Override
181 | public void onAdFullScreenWillDisplay(InMobiNative inMobiNative) {
182 | Log.d(TAG, "Ad going fullscreen.");
183 | }
184 |
185 | @Override
186 | public void onAdFullScreenDisplayed(InMobiNative inMobiNative) {
187 | Log.d(TAG, "Ad fullscreen displayed.");
188 | }
189 |
190 | @Override
191 | public void onUserWillLeaveApplication(InMobiNative inMobiNative) {
192 | Log.d(TAG, "User left app.");
193 | }
194 |
195 | @Override
196 | public void onAdClicked(@NonNull InMobiNative inMobiNativeStrand) {
197 | Log.d(TAG, "Click recorded for ad at position:" + mPosition);
198 | }
199 |
200 | @Override
201 | public void onAdStatusChanged(@NonNull InMobiNative inMobiNative) {
202 | Log.d(TAG, "Ad status changed");
203 | }
204 |
205 | @Override
206 | public void onAdImpression(@NonNull InMobiNative inMobiNative) {
207 | Log.d(TAG, "onAdImpression");
208 | }
209 |
210 | }
211 |
212 | @SuppressWarnings("deprecation")
213 | private boolean canListViewScrollUp(ListView listView) {
214 | if (android.os.Build.VERSION.SDK_INT >= 14) {
215 | return ViewCompat.canScrollVertically(listView, -1);
216 | } else {
217 | return listView.getChildCount() > 0 &&
218 | (listView.getFirstVisiblePosition() > 0
219 | || listView.getChildAt(0).getTop() < listView.getPaddingTop());
220 | }
221 | }
222 | }
223 |
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/java/com/inmobi/nativead/sample/recyclerview/AdFeedItem.java:
--------------------------------------------------------------------------------
1 | package com.inmobi.nativead.sample.recyclerview;
2 |
3 | import com.inmobi.ads.InMobiNative;
4 | import com.inmobi.nativead.utility.FeedData.FeedItem;
5 |
6 | public class AdFeedItem extends FeedItem {
7 | InMobiNative mNativeStrand;
8 |
9 | AdFeedItem(InMobiNative nativeStrand) {
10 | super("", "", "", "", "", "");
11 | mNativeStrand = nativeStrand;
12 | }
13 | }
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/java/com/inmobi/nativead/sample/recyclerview/FeedsAdapter.java:
--------------------------------------------------------------------------------
1 | package com.inmobi.nativead.sample.recyclerview;
2 |
3 | import android.app.Activity;
4 | import android.content.Context;
5 | import androidx.cardview.widget.CardView;
6 | import androidx.recyclerview.widget.RecyclerView;
7 | import android.util.DisplayMetrics;
8 | import android.view.LayoutInflater;
9 | import android.view.View;
10 | import android.view.ViewGroup;
11 | import android.widget.Button;
12 | import android.widget.FrameLayout;
13 | import android.widget.ImageView;
14 | import android.widget.RatingBar;
15 | import android.widget.TextView;
16 |
17 | import com.inmobi.ads.InMobiNative;
18 | import com.inmobi.nativead.sample.R;
19 | import com.inmobi.nativead.utility.FeedData.FeedItem;
20 | import com.squareup.picasso.Picasso;
21 |
22 | import java.util.ArrayList;
23 |
24 | class FeedsAdapter extends RecyclerView.Adapter {
25 |
26 | //View type for Content Feed.
27 | private static final int VIEW_TYPE_CONTENT_FEED = 0;
28 |
29 | //View type for Ad Feed - from InMobi (InMobi Native Strand)
30 | private static final int VIEW_TYPE_INMOBI_STRAND = 1;
31 |
32 | private ArrayList mFeedItems;
33 | private Context mContext;
34 |
35 | FeedsAdapter(ArrayList mFeedItems, Context mContext) {
36 | this.mFeedItems = mFeedItems;
37 | this.mContext = mContext;
38 | }
39 |
40 | @Override
41 | public int getItemCount() {
42 | return mFeedItems.size();
43 | }
44 |
45 | @Override
46 | public int getItemViewType(int position) {
47 | final FeedItem feedItem = mFeedItems.get(position);
48 | if (feedItem instanceof AdFeedItem) {
49 | return VIEW_TYPE_INMOBI_STRAND;
50 | }
51 | return VIEW_TYPE_CONTENT_FEED;
52 | }
53 |
54 | @Override
55 | public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
56 | View card = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.recycler_card_layout,
57 | viewGroup,
58 | false);
59 | if (viewType == VIEW_TYPE_CONTENT_FEED) {
60 | LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.listitem, (ViewGroup) card, true);
61 | return new FeedViewHolder(card);
62 | } else {
63 | return new AdViewHolder(mContext, card);
64 | }
65 | }
66 |
67 | @Override
68 | @SuppressWarnings("deprecation")
69 | public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
70 | FeedItem feedItem = mFeedItems.get(position);
71 | if (viewHolder instanceof FeedViewHolder) {
72 | FeedViewHolder feedViewHolder = (FeedViewHolder) viewHolder;
73 | feedViewHolder.title.setText(feedItem.getTitle());
74 | feedViewHolder.subTitle.setText(feedItem.getSubtitle());
75 | feedViewHolder.timeStamp.setText(feedItem.getTimestamp());
76 | feedViewHolder.description.setText(feedItem.getDescription());
77 |
78 | Picasso.get()
79 | .load(mContext.getResources().getIdentifier(feedItem.getThumbImage(), "drawable", mContext.getPackageName()))
80 | .into(feedViewHolder.thumbImage);
81 |
82 | Picasso.get()
83 | .load(mContext.getResources().getIdentifier(feedItem.getBigImage(), "drawable", mContext.getPackageName()))
84 | .into(feedViewHolder.image);
85 |
86 | Picasso.get()
87 | .load(R.drawable.linkedin_bottom)
88 | .into(feedViewHolder.bottom);
89 | } else {
90 | final AdViewHolder adViewHolder = (AdViewHolder) viewHolder;
91 | final InMobiNative inMobiNative = ((AdFeedItem) feedItem).mNativeStrand;
92 |
93 | Picasso.get()
94 | .load(inMobiNative.getAdIconUrl())
95 | .into(adViewHolder.icon);
96 | adViewHolder.title.setText(inMobiNative.getAdTitle());
97 | adViewHolder.description.setText(inMobiNative.getAdDescription());
98 | adViewHolder.action.setText(inMobiNative.getAdCtaText());
99 |
100 | DisplayMetrics displayMetrics = new DisplayMetrics();
101 | ((Activity) mContext).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
102 | adViewHolder.adContent.addView(inMobiNative.getPrimaryViewOfWidth(mContext, adViewHolder.adView,
103 | adViewHolder.cardView, displayMetrics.widthPixels));
104 |
105 | float rating = inMobiNative.getAdRating();
106 | if (rating != 0) {
107 | adViewHolder.ratingBar.setRating(rating);
108 | }
109 | adViewHolder.ratingBar.setVisibility(rating != 0 ? View.VISIBLE : View.GONE);
110 |
111 | adViewHolder.action.setOnClickListener(new View.OnClickListener() {
112 | @Override
113 | public void onClick(View v) {
114 | inMobiNative.reportAdClickAndOpenLandingPage();
115 | }
116 | });
117 | }
118 | }
119 |
120 | private static class AdViewHolder extends RecyclerView.ViewHolder {
121 | CardView cardView;
122 | View adView;
123 |
124 | ImageView icon;
125 | TextView title, description;
126 | Button action;
127 | FrameLayout adContent;
128 | RatingBar ratingBar;
129 |
130 | AdViewHolder(Context context, View adCardView) {
131 | super(adCardView);
132 | cardView = (CardView) adCardView;
133 | adView = LayoutInflater.from(context).inflate(R.layout.layout_ad, null);
134 |
135 | icon = (ImageView) adView.findViewById(R.id.adIcon);
136 | title = (TextView) adView.findViewById(R.id.adTitle);
137 | description = (TextView) adView.findViewById(R.id.adDescription);
138 | action = (Button) adView.findViewById(R.id.adAction);
139 | adContent = (FrameLayout) adView.findViewById(R.id.adContent);
140 | ratingBar = (RatingBar) adView.findViewById(R.id.adRating);
141 | cardView.addView(adView);
142 | }
143 | }
144 |
145 | private static class FeedViewHolder extends RecyclerView.ViewHolder {
146 | CardView cardView;
147 | ImageView thumbImage;
148 | TextView title;
149 | TextView subTitle;
150 | TextView timeStamp;
151 | TextView description;
152 | ImageView image;
153 | ImageView bottom;
154 |
155 | FeedViewHolder(View feedCardView) {
156 | super(feedCardView);
157 | cardView = (CardView) feedCardView;
158 | thumbImage = (ImageView) feedCardView.findViewById(R.id.thumb_image);
159 | title = (TextView) feedCardView.findViewById(R.id.title);
160 | subTitle = (TextView) feedCardView.findViewById(R.id.subtitle);
161 | timeStamp = (TextView) feedCardView.findViewById(R.id.time_tt);
162 | description = (TextView) feedCardView.findViewById(R.id.description_tt);
163 | image = (ImageView) feedCardView.findViewById(R.id.big_image);
164 | bottom = (ImageView) feedCardView.findViewById(R.id.bottom_img);
165 | }
166 | }
167 | }
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/java/com/inmobi/nativead/sample/recyclerview/RecyclerFeedFragment.java:
--------------------------------------------------------------------------------
1 | package com.inmobi.nativead.sample.recyclerview;
2 |
3 | import android.content.res.Configuration;
4 | import android.os.Bundle;
5 | import androidx.annotation.NonNull;
6 | import androidx.core.view.ViewCompat;
7 | import androidx.fragment.app.Fragment;
8 | import androidx.recyclerview.widget.LinearLayoutManager;
9 | import androidx.recyclerview.widget.RecyclerView;
10 | import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
11 |
12 | import android.util.Log;
13 | import android.view.LayoutInflater;
14 | import android.view.View;
15 | import android.view.ViewGroup;
16 |
17 | import com.inmobi.ads.AdMetaInfo;
18 | import com.inmobi.ads.InMobiAdRequestStatus;
19 | import com.inmobi.ads.InMobiNative;
20 | import com.inmobi.ads.listeners.NativeAdEventListener;
21 | import com.inmobi.nativead.PlacementId;
22 | import com.inmobi.nativead.sample.R;
23 | import com.inmobi.nativead.utility.FeedData;
24 | import com.inmobi.nativead.utility.FeedData.FeedItem;
25 | import com.inmobi.nativead.utility.SwipeRefreshLayoutWrapper;
26 |
27 | import java.util.ArrayList;
28 | import java.util.HashMap;
29 | import java.util.Iterator;
30 | import java.util.List;
31 | import java.util.Map;
32 |
33 | /**
34 | * Demonstrates the use of InMobiNativeStrand to place ads in a RecyclerView.
35 | *
36 | * Note: Swipe to refresh ads.
37 | */
38 | public class RecyclerFeedFragment extends Fragment {
39 |
40 | private static final String TAG = RecyclerFeedFragment.class.getSimpleName();
41 |
42 | //All the InMobiNativeStrand instances created for this list feed will be held here
43 | private List mStrands = new ArrayList<>();
44 |
45 | private static final int NUM_FEED_ITEMS = 20;
46 | //Position in feed where the Ads needs to be placed once loaded.
47 |
48 | private int[] mAdPositions = new int[]{3, 8, 18};
49 |
50 | private RecyclerView mRecyclerView;
51 | private RecyclerView.Adapter mFeedAdapter;
52 | private ArrayList mFeedItems;
53 |
54 | private Map mFeedMap = new HashMap<>();
55 |
56 | public static String getTitle() {
57 | return "RecyclerView Placement";
58 | }
59 |
60 | @Override
61 | public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
62 | final View view = inflater.inflate(R.layout.fragment_recycler_feed, container, false);
63 | mRecyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
64 | mRecyclerView.setHasFixedSize(false);
65 | LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity().getApplicationContext());
66 | mRecyclerView.setLayoutManager(layoutManager);
67 | final SwipeRefreshLayout swipeRefreshLayout = SwipeRefreshLayoutWrapper.getInstance(getActivity(),
68 | new SwipeRefreshLayoutWrapper.Listener() {
69 | @Override
70 | public boolean canChildScrollUp() {
71 | return mRecyclerView.getVisibility() == View.VISIBLE && canViewScrollUp(mRecyclerView);
72 | }
73 |
74 | @Override
75 | public void onRefresh() {
76 | refreshAds();
77 | }
78 | });
79 | swipeRefreshLayout.addView(view,
80 | ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
81 | return swipeRefreshLayout;
82 | }
83 |
84 | @Override
85 | public void onActivityCreated(Bundle savedInstanceState) {
86 | super.onActivityCreated(savedInstanceState);
87 | mFeedItems = FeedData.generateFeedItems(NUM_FEED_ITEMS);
88 | mFeedAdapter = new FeedsAdapter(mFeedItems, getActivity());
89 | mRecyclerView.setAdapter(mFeedAdapter);
90 | mFeedAdapter.notifyDataSetChanged();
91 | createStrands();
92 | loadAds();
93 | }
94 |
95 | @Override
96 | public void onConfigurationChanged(Configuration newConfig) {
97 | super.onConfigurationChanged(newConfig);
98 | mFeedAdapter.notifyDataSetChanged();
99 | }
100 |
101 | private void createStrands() {
102 | for (int position : mAdPositions) {
103 | final InMobiNative nativeStrand = new InMobiNative(getActivity(),
104 | PlacementId.YOUR_PLACEMENT_ID_HERE, new StrandAdListener(position));
105 | mStrands.add(nativeStrand);
106 | }
107 | }
108 |
109 | @Override
110 | public void onDestroyView() {
111 | clearAds();
112 | super.onDestroyView();
113 | }
114 |
115 | private void loadAds() {
116 | for (InMobiNative strand : mStrands) {
117 | strand.load();
118 | }
119 | }
120 |
121 | private void refreshAds() {
122 | clearAds();
123 | createStrands();
124 | loadAds();
125 | }
126 |
127 | private void clearAds() {
128 | Iterator feedItemIterator = mFeedItems.iterator();
129 | while (feedItemIterator.hasNext()) {
130 | final FeedItem feedItem = feedItemIterator.next();
131 | if (feedItem instanceof AdFeedItem) {
132 | feedItemIterator.remove();
133 | }
134 | }
135 | mFeedAdapter.notifyDataSetChanged();
136 | for (InMobiNative strand : mStrands) {
137 | strand.destroy();
138 | }
139 | mStrands.clear();
140 | mFeedMap.clear();
141 | }
142 |
143 | @SuppressWarnings("deprecation")
144 | private boolean canViewScrollUp(RecyclerView recyclerView) {
145 | if (android.os.Build.VERSION.SDK_INT >= 14) {
146 | return ViewCompat.canScrollVertically(recyclerView, -1);
147 | } else {
148 | return recyclerView.getChildCount() > 0 &&
149 | (((LinearLayoutManager) recyclerView.getLayoutManager()).findFirstCompletelyVisibleItemPosition() > 0
150 | || recyclerView.getChildAt(0).getTop() < recyclerView.getPaddingTop());
151 | }
152 | }
153 |
154 | private final class StrandAdListener extends NativeAdEventListener {
155 |
156 | private int mPosition;
157 |
158 | public StrandAdListener(int position) {
159 | mPosition = position;
160 | }
161 |
162 | @Override
163 | public void onAdLoadSucceeded(@NonNull InMobiNative inMobiNativeStrand,
164 | @NonNull AdMetaInfo adMetaInfo) {
165 | Log.d(TAG, "Strand loaded at position " + mPosition);
166 | if (!mFeedItems.isEmpty()) {
167 | FeedData.FeedItem oldFeedItem = mFeedMap.get(mPosition);
168 | if (oldFeedItem != null) {
169 | mFeedMap.remove(mPosition);
170 | mFeedItems.remove(oldFeedItem);
171 | }
172 | AdFeedItem adFeedItem = new AdFeedItem(inMobiNativeStrand);
173 | mFeedMap.put(mPosition, adFeedItem);
174 | mFeedItems.add(mPosition, adFeedItem);
175 | mFeedAdapter.notifyItemChanged(mPosition);
176 | }
177 | }
178 |
179 | @Override
180 | public void onAdLoadFailed(@NonNull InMobiNative inMobiNativeStrand, @NonNull final InMobiAdRequestStatus inMobiAdRequestStatus) {
181 | Log.d(TAG, "Ad Load failed for" + mPosition + "(" + inMobiAdRequestStatus.getMessage() + ")");
182 | if (!mFeedItems.isEmpty()) {
183 | FeedData.FeedItem oldFeedItem = mFeedMap.get(mPosition);
184 | if (oldFeedItem != null) {
185 | mFeedMap.remove(mPosition);
186 | mFeedItems.remove(oldFeedItem);
187 | mFeedAdapter.notifyItemRemoved(mPosition);
188 | Log.d(TAG, "Ad removed for" + mPosition);
189 | }
190 | }
191 | }
192 |
193 | @Override
194 | public void onAdFetchSuccessful(@NonNull InMobiNative inMobiNative, @NonNull AdMetaInfo adMetaInfo) {
195 | Log.d(TAG, "onAdFetchSuccessful with bid " + adMetaInfo.getBid());
196 | }
197 |
198 | @Override
199 | public void onAdFullScreenDismissed(InMobiNative inMobiNative) {
200 | }
201 |
202 | @Override
203 | public void onAdFullScreenWillDisplay(InMobiNative inMobiNative) {
204 | }
205 |
206 | @Override
207 | public void onAdFullScreenDisplayed(InMobiNative inMobiNative) {
208 | }
209 |
210 | @Override
211 | public void onUserWillLeaveApplication(InMobiNative inMobiNative) {
212 | }
213 |
214 | @Override
215 | public void onAdClicked(@NonNull InMobiNative inMobiNativeStrand) {
216 | Log.d(TAG, "Click recorded for ad at position:" + mPosition);
217 | }
218 |
219 | @Override
220 | public void onAdStatusChanged(@NonNull InMobiNative inMobiNative) {
221 | }
222 |
223 | @Override
224 | public void onAdImpression(@NonNull InMobiNative inMobiNative) {
225 | }
226 | }
227 | }
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/java/com/inmobi/nativead/sample/singlestrand/SingleNativeAdFragment.java:
--------------------------------------------------------------------------------
1 | package com.inmobi.nativead.sample.singlestrand;
2 |
3 | import android.content.res.Configuration;
4 | import android.os.Bundle;
5 | import androidx.annotation.NonNull;
6 | import androidx.fragment.app.Fragment;
7 | import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
8 |
9 | import android.util.DisplayMetrics;
10 | import android.util.Log;
11 | import android.view.LayoutInflater;
12 | import android.view.View;
13 | import android.view.ViewGroup;
14 | import android.widget.Button;
15 | import android.widget.FrameLayout;
16 | import android.widget.ImageView;
17 | import android.widget.RatingBar;
18 | import android.widget.TextView;
19 |
20 | import com.inmobi.ads.AdMetaInfo;
21 | import com.inmobi.ads.InMobiAdRequestStatus;
22 | import com.inmobi.ads.InMobiNative;
23 | import com.inmobi.ads.listeners.NativeAdEventListener;
24 | import com.inmobi.ads.listeners.VideoEventListener;
25 | import com.inmobi.nativead.PlacementId;
26 | import com.inmobi.nativead.sample.R;
27 | import com.inmobi.nativead.utility.SwipeRefreshLayoutWrapper;
28 | import com.squareup.picasso.Picasso;
29 |
30 | /**
31 | * Demonstrates the use of InMobiNative to place a single ad.
32 | *
33 | * Note: Swipe to refresh ads.
34 | */
35 | public class SingleNativeAdFragment extends Fragment {
36 | private static final String TAG = SingleNativeAdFragment.class.getSimpleName();
37 |
38 | private ViewGroup mContainer;
39 | private InMobiNative mInMobiNative;
40 |
41 | public static String getTitle() {
42 | return "Custom Placement";
43 | }
44 |
45 | @Override
46 | public View onCreateView(LayoutInflater inflater, ViewGroup container,
47 | Bundle savedInstanceState) {
48 | View view = inflater.inflate(R.layout.fragment_custom_integration, container, false);
49 | mContainer = (ViewGroup) view.findViewById(R.id.container);
50 |
51 | final SwipeRefreshLayout swipeRefreshLayout = SwipeRefreshLayoutWrapper.getInstance(getActivity(),
52 | new SwipeRefreshLayoutWrapper.Listener() {
53 | @Override
54 | public boolean canChildScrollUp() {
55 | return false;
56 | }
57 |
58 | @Override
59 | public void onRefresh() {
60 | reloadAd();
61 | }
62 | });
63 | swipeRefreshLayout.addView(mContainer);
64 | return swipeRefreshLayout;
65 | }
66 |
67 | @Override
68 | public void onActivityCreated(Bundle savedInstanceState) {
69 | super.onActivityCreated(savedInstanceState);
70 | createStrands();
71 | Log.d(TAG, "Requesting ad");
72 | loadAd();
73 | }
74 |
75 | @Override
76 | public void onConfigurationChanged(Configuration newConfig) {
77 | super.onConfigurationChanged(newConfig);
78 |
79 | final View view = loadAdIntoView(mInMobiNative);
80 | if (view != null) {
81 | mContainer.removeAllViews();
82 | mContainer.addView(view);
83 | }
84 | }
85 |
86 | private void createStrands() {
87 | mInMobiNative = new InMobiNative(getActivity(), PlacementId.YOUR_PLACEMENT_ID_HERE, new StrandAdListener());
88 | mInMobiNative.setVideoEventListener(new VideoEventListener() {
89 | @Override
90 | public void onVideoCompleted(InMobiNative inMobiNative) {
91 | super.onVideoCompleted(inMobiNative);
92 | Log.d(TAG, "Video completed");
93 | }
94 |
95 | @Override
96 | public void onVideoSkipped(InMobiNative inMobiNative) {
97 | super.onVideoSkipped(inMobiNative);
98 | Log.d(TAG, "Video skipped");
99 | }
100 |
101 | @Override
102 | public void onAudioStateChanged(InMobiNative inMobiNative, boolean b) {
103 | super.onAudioStateChanged(inMobiNative, b);
104 | Log.d(TAG, "Audio state changed");
105 | }
106 | });
107 | }
108 |
109 | @Override
110 | public void onDestroyView() {
111 | mInMobiNative.destroy();
112 | super.onDestroyView();
113 | }
114 |
115 | private void loadAd() {
116 | mInMobiNative.load();
117 | }
118 |
119 | private void clearAd() {
120 | mContainer.removeAllViews();
121 | mInMobiNative.destroy();
122 | }
123 |
124 | private void reloadAd() {
125 | clearAd();
126 | createStrands();
127 | loadAd();
128 | }
129 |
130 | @SuppressWarnings("deprecation")
131 | private View loadAdIntoView(@NonNull final InMobiNative inMobiNative) {
132 | View adView = LayoutInflater.from(getActivity()).inflate(R.layout.layout_ad, null);
133 |
134 | ImageView icon = (ImageView) adView.findViewById(R.id.adIcon);
135 | TextView title = (TextView) adView.findViewById(R.id.adTitle);
136 | TextView description = (TextView) adView.findViewById(R.id.adDescription);
137 | Button action = (Button) adView.findViewById(R.id.adAction);
138 | FrameLayout content = (FrameLayout) adView.findViewById(R.id.adContent);
139 | RatingBar ratingBar = (RatingBar) adView.findViewById(R.id.adRating);
140 |
141 | Picasso.get()
142 | .load(inMobiNative.getAdIconUrl())
143 | .into(icon);
144 | title.setText(inMobiNative.getAdTitle());
145 | description.setText(inMobiNative.getAdDescription());
146 | action.setText(inMobiNative.getAdCtaText());
147 |
148 | DisplayMetrics displayMetrics = new DisplayMetrics();
149 | getActivity().getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
150 | content.addView(inMobiNative.getPrimaryViewOfWidth(getActivity(), content, mContainer, displayMetrics.widthPixels));
151 |
152 | float rating = inMobiNative.getAdRating();
153 | if (rating != 0) {
154 | ratingBar.setRating(rating);
155 | }
156 | ratingBar.setVisibility(rating != 0 ? View.VISIBLE : View.GONE);
157 |
158 | action.setOnClickListener(new View.OnClickListener() {
159 | @Override
160 | public void onClick(View v) {
161 | mInMobiNative.reportAdClickAndOpenLandingPage();
162 | }
163 | });
164 |
165 | return adView;
166 | }
167 |
168 | private final class StrandAdListener extends NativeAdEventListener {
169 |
170 |
171 | public StrandAdListener() {
172 | }
173 |
174 | @Override
175 | public void onAdLoadSucceeded(@NonNull InMobiNative inMobiNative,
176 | @NonNull AdMetaInfo adMetaInfo) {
177 | //Pass the old ad view as the first parameter to facilitate view reuse.
178 | View view = loadAdIntoView(inMobiNative);
179 | if (view == null) {
180 | Log.d(TAG, "Could not render Strand!");
181 | } else {
182 | mContainer.addView(view);
183 | }
184 | }
185 |
186 | @Override
187 | public void onAdLoadFailed(@NonNull InMobiNative inMobiNative, @NonNull InMobiAdRequestStatus inMobiAdRequestStatus) {
188 | Log.d(TAG, "Ad Load failed (" + inMobiAdRequestStatus.getMessage() + ")");
189 | }
190 |
191 | @Override
192 | public void onAdFetchSuccessful(@NonNull InMobiNative inMobiNative, @NonNull AdMetaInfo adMetaInfo) {
193 | Log.d(TAG, "onAdFetchSuccessful with bid " + adMetaInfo.getBid());
194 | }
195 |
196 | @Override
197 | public void onAdFullScreenDismissed(InMobiNative inMobiNative) {
198 | }
199 |
200 | @Override
201 | public void onAdFullScreenWillDisplay(InMobiNative inMobiNative) {
202 | Log.d(TAG, "Ad going fullscreen.");
203 | }
204 |
205 | @Override
206 | public void onAdFullScreenDisplayed(InMobiNative inMobiNative) {
207 | }
208 |
209 | @Override
210 | public void onUserWillLeaveApplication(InMobiNative inMobiNative) {
211 | }
212 |
213 | @Override
214 | public void onAdClicked(@NonNull InMobiNative inMobiNative) {
215 | Log.d(TAG, "Ad clicked");
216 | }
217 |
218 |
219 | @Override
220 | public void onAdStatusChanged(@NonNull InMobiNative inMobiNative) {
221 | }
222 |
223 | @Override
224 | public void onAdImpression(@NonNull InMobiNative inMobiNative) {
225 | }
226 |
227 | }
228 | }
229 |
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/java/com/inmobi/nativead/utility/FeedData.java:
--------------------------------------------------------------------------------
1 | package com.inmobi.nativead.utility;
2 |
3 | import java.util.ArrayList;
4 | import java.util.Random;
5 |
6 | public final class FeedData {
7 |
8 | private static FeedItem[] mSampleFeedItems = new FeedItem[5];
9 |
10 | static {
11 | mSampleFeedItems[0] = new FeedItem("Neha Jha", "Product Manager", "1:50 AM", "Looking out for a Sponsorship Manager with 5+ yrs exp for a sports tourism company in Bangalore with strong grasp of media planning principles & excellent understanding of target segment, market intelligence and media medium technicalities. For more infos contact me at neha@zyoin.com", "neha_jha", "neha_jha_big");
12 | mSampleFeedItems[1] = new FeedItem("Nazia Firdose", "HR", "9:50 AM", "Please pray for these children in Syria after the death of their mother. The oldest sister has to take care of her younger siblings. -Ayad L Gorgees. ***Please don't scroll past without Typing Amen! because they need our prayers!!", "nazia", "nazia_big");
13 | mSampleFeedItems[2] = new FeedItem("Dharmesh Shah", "Founder at HubSpot", "4:50 PM", "Why, dear God, haven't you started marketing yet? http://dharme.sh/1Ewu63k by @gjain via @Inboundorg", "dharmesh", "dharmesh_big");
14 | mSampleFeedItems[3] = new FeedItem("Piyush Shah", "CPO", "6:50 PM", "With mobile being accepted as the definitive medium to access consumers’ minds and wallets, Brands have begun a multi-million dollar spending race to allure and retain customers. Read on: https://lnkd.in/e8mcUfc", "piyush", "piyush_big");
15 | mSampleFeedItems[4] = new FeedItem("Jeff Weiner", "CEO at Linkedin", "4:10 AM", "Honored to represent LinkedIn's Economic Graph capabilities at the White House earlier today and partnering to Upskill America.", "jeff", "jeff_big");
16 | }
17 |
18 | public static class FeedItem {
19 | private String title;
20 | private String subtitle;
21 | private String timestamp;
22 | private String description;
23 | private String thumbImage;
24 | private String bigImage;
25 |
26 | public FeedItem(String title, String subtitle, String time_tt, String description_tt, String thumb_image, String big_image) {
27 | this.title = title;
28 | this.subtitle = subtitle;
29 | this.timestamp = time_tt;
30 | this.description = description_tt;
31 | this.thumbImage = thumb_image;
32 | this.bigImage = big_image;
33 | }
34 |
35 | public String getTitle() {
36 | return title;
37 | }
38 |
39 | public String getSubtitle() {
40 | return subtitle;
41 | }
42 |
43 | public String getTimestamp() {
44 | return timestamp;
45 | }
46 |
47 | public String getDescription() {
48 | return description;
49 | }
50 |
51 | public String getThumbImage() {
52 | return thumbImage;
53 | }
54 |
55 | public String getBigImage() {
56 | return bigImage;
57 | }
58 | }
59 |
60 | public static ArrayList generateFeedItems(int count) {
61 | if (count <= 0) {
62 | throw new IllegalArgumentException("generateFeedItems - Invalid count:" + count);
63 | }
64 | final ArrayList feedItems = new ArrayList<>(count);
65 | Random random = new Random();
66 | for (int i = 0; i < count; i++) {
67 | feedItems.add(mSampleFeedItems[random.nextInt(mSampleFeedItems.length)]);
68 | }
69 | return feedItems;
70 | }
71 | }
72 |
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/java/com/inmobi/nativead/utility/NonSwipeableViewPager.java:
--------------------------------------------------------------------------------
1 | package com.inmobi.nativead.utility;
2 |
3 | import android.content.Context;
4 | import android.util.AttributeSet;
5 | import android.view.MotionEvent;
6 |
7 | import androidx.viewpager.widget.ViewPager;
8 |
9 | /**
10 | * This class prevents accidental page switch from last card in the Storyboards.
11 | */
12 |
13 | public class NonSwipeableViewPager extends ViewPager {
14 |
15 | public NonSwipeableViewPager(Context context) {
16 | super(context);
17 | }
18 |
19 | public NonSwipeableViewPager(Context context, AttributeSet attrs) {
20 | super(context, attrs);
21 | }
22 |
23 | @Override
24 | public boolean onInterceptTouchEvent(MotionEvent event) {
25 | // Never allow swiping to switch between pages
26 | return false;
27 | }
28 |
29 | @Override
30 | public boolean onTouchEvent(MotionEvent event) {
31 | // Never allow swiping to switch between pages
32 | return false;
33 | }
34 | }
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/java/com/inmobi/nativead/utility/SwipeRefreshLayoutWrapper.java:
--------------------------------------------------------------------------------
1 | package com.inmobi.nativead.utility;
2 |
3 | import android.content.Context;
4 | import android.os.Handler;
5 | import android.os.Looper;
6 | import androidx.annotation.NonNull;
7 | import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
8 |
9 | import android.view.ViewGroup;
10 |
11 | public final class SwipeRefreshLayoutWrapper {
12 |
13 | private static final Handler HANDLER = new Handler(Looper.getMainLooper());
14 |
15 | public interface Listener {
16 | boolean canChildScrollUp();
17 |
18 | void onRefresh();
19 | }
20 |
21 | public static SwipeRefreshLayout getInstance(@NonNull Context context,
22 | @NonNull final Listener listener) {
23 | final SwipeRefreshLayout swipeRefreshLayout = new SwipeRefreshLayout(context) {
24 |
25 | @Override
26 | public boolean canChildScrollUp() {
27 | return listener.canChildScrollUp();
28 | }
29 | };
30 | swipeRefreshLayout.setLayoutParams(new ViewGroup.LayoutParams(
31 | ViewGroup.LayoutParams.MATCH_PARENT,
32 | ViewGroup.LayoutParams.MATCH_PARENT));
33 |
34 | swipeRefreshLayout.setColorSchemeResources(android.R.color.holo_blue_dark,
35 | android.R.color.holo_blue_light,
36 | android.R.color.holo_green_light,
37 | android.R.color.holo_green_light);
38 |
39 | swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
40 | @Override
41 | public void onRefresh() {
42 | swipeRefreshLayout.setRefreshing(true);
43 | HANDLER.postDelayed(new Runnable() {
44 | @Override
45 | public void run() {
46 | listener.onRefresh();
47 | swipeRefreshLayout.setRefreshing(false);
48 | }
49 | }, 3000);
50 | }
51 | });
52 | return swipeRefreshLayout;
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/res/drawable-hdpi/linkedin_bottom.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InMobi/sdk-sample-code-android/b0596a74b36fb7eb70d2a97fbdcdcba656f4c483/samples/nativeSample/src/main/res/drawable-hdpi/linkedin_bottom.png
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/res/drawable/bg_parent_rounded_corner.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/res/drawable/dharmesh.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InMobi/sdk-sample-code-android/b0596a74b36fb7eb70d2a97fbdcdcba656f4c483/samples/nativeSample/src/main/res/drawable/dharmesh.jpg
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/res/drawable/dharmesh_big.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InMobi/sdk-sample-code-android/b0596a74b36fb7eb70d2a97fbdcdcba656f4c483/samples/nativeSample/src/main/res/drawable/dharmesh_big.png
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/res/drawable/ic_menu_refresh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InMobi/sdk-sample-code-android/b0596a74b36fb7eb70d2a97fbdcdcba656f4c483/samples/nativeSample/src/main/res/drawable/ic_menu_refresh.png
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/res/drawable/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InMobi/sdk-sample-code-android/b0596a74b36fb7eb70d2a97fbdcdcba656f4c483/samples/nativeSample/src/main/res/drawable/icon.png
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/res/drawable/jeff.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InMobi/sdk-sample-code-android/b0596a74b36fb7eb70d2a97fbdcdcba656f4c483/samples/nativeSample/src/main/res/drawable/jeff.jpg
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/res/drawable/jeff_big.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InMobi/sdk-sample-code-android/b0596a74b36fb7eb70d2a97fbdcdcba656f4c483/samples/nativeSample/src/main/res/drawable/jeff_big.png
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/res/drawable/linkedin_bottom.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InMobi/sdk-sample-code-android/b0596a74b36fb7eb70d2a97fbdcdcba656f4c483/samples/nativeSample/src/main/res/drawable/linkedin_bottom.png
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/res/drawable/nazia.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InMobi/sdk-sample-code-android/b0596a74b36fb7eb70d2a97fbdcdcba656f4c483/samples/nativeSample/src/main/res/drawable/nazia.jpg
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/res/drawable/nazia_big.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InMobi/sdk-sample-code-android/b0596a74b36fb7eb70d2a97fbdcdcba656f4c483/samples/nativeSample/src/main/res/drawable/nazia_big.png
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/res/drawable/neha_jha.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InMobi/sdk-sample-code-android/b0596a74b36fb7eb70d2a97fbdcdcba656f4c483/samples/nativeSample/src/main/res/drawable/neha_jha.jpg
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/res/drawable/neha_jha_big.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InMobi/sdk-sample-code-android/b0596a74b36fb7eb70d2a97fbdcdcba656f4c483/samples/nativeSample/src/main/res/drawable/neha_jha_big.png
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/res/drawable/piyush.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InMobi/sdk-sample-code-android/b0596a74b36fb7eb70d2a97fbdcdcba656f4c483/samples/nativeSample/src/main/res/drawable/piyush.jpg
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/res/drawable/piyush_big.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InMobi/sdk-sample-code-android/b0596a74b36fb7eb70d2a97fbdcdcba656f4c483/samples/nativeSample/src/main/res/drawable/piyush_big.png
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/res/layout/activity_native_ads.xml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
18 |
19 |
28 |
29 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/res/layout/fragment_custom_integration.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/res/layout/fragment_recycler_feed.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
9 |
10 |
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/res/layout/layout_ad.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
9 |
10 |
17 |
18 |
25 |
26 |
37 |
38 |
43 |
44 |
48 |
49 |
50 |
51 |
52 |
53 |
59 |
60 |
63 |
64 |
70 |
71 |
80 |
81 |
82 |
83 |
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/res/layout/listitem.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
16 |
17 |
23 |
24 |
25 |
30 |
31 |
36 |
37 |
47 |
48 |
59 |
60 |
73 |
74 |
75 |
76 |
77 |
90 |
91 |
100 |
101 |
110 |
111 |
112 |
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/res/layout/recycler_card_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
11 |
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/res/values/attr.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #ffffff
4 | #d3d6db
5 | #ffffff
6 | #c2c3c8
7 | #0a80d1
8 | #808080
9 | #d3d3d3
10 |
11 |
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 16dp
4 | 16dp
5 |
6 | 10dp
7 | 20dp
8 | 15dp
9 | 48dp
10 | 10dp
11 | 15dp
12 | 13dp
13 | 15dp
14 | 13dp
15 | 3dp
16 | 1dp
17 |
18 | 5dp
19 | 16dp
20 |
21 |
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | InMobi Native Samples
3 |
4 | Sponsored
5 | Home
6 |
7 |
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
11 |
19 |
20 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/samples/nativeSample/src/main/res/xml/network_security_config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/sdk/licenses/License.txt:
--------------------------------------------------------------------------------
1 | End-User License Agreement for InMobi Software Product
2 |
3 | This End-User License Agreement (“EULA”) is a legal agreement between you (either an individual or a single entity) (“the End User”) and InMobi Pte Limited for the software product identified above, which includes computer software and may include associated media, printed materials, and “online” or electronic documentation (“Software Product”).
4 |
5 | By download, installing, copying or otherwise using the Software Product, you agree to be bound by the terms of this EULA.
6 |
7 | Software Product License
8 |
9 | InMobi is providing the Software Product solely for the purpose of allowing the End User to avail of or enjoy the benefits of the services provided by InMobi. Except as expressly set forth herein, the End User is NOT allowed to distribute this Software (either for profit or merely to recover your media and distribution costs) whether as a stand-alone product, or as part of a compilation or anthology, nor to use it for supporting your business or customers. It may be distributed freely on any website or through any other distribution mechanism, as long as no part of it is modified in any manner whatsoever.
10 |
11 | 1. Grant of License
12 |
13 | This EULA grants you the following rights:
14 |
15 | a. Installation and Use. You may install and use an unlimited number of copies of the Software Product.
16 |
17 | b. Reproduction and Distribution. You may reproduce and distribute an unlimited number of copies of the Software Product; provided that each copy shall be a true and complete copy, including all copyright and trademark notices, and shall be accompanied by a copy of this EULA.
18 |
19 | c. Copies of the Software Product may be distributed as a standalone product or included with your own product as long as the Software Product is not sold or included in a product or package that intends to receive benefits through the inclusion of the Software Product.
20 |
21 | 2. Description Of Other Rights And Limitations
22 |
23 | a. Limitations. You may not reverse engineer, decompile, or disassemble the Software Product.
24 |
25 | b. Update and Maintenance. InMobi SDK upgrades shall be free of charge. However, the End User shall be responsible to ensure that the InMobi SDK is updated as and when InMobi releases new updates or upgrades.
26 |
27 | c. Separation of Components. The Software Product is licensed as a single product. Its component parts may not be separated for use on more than one computer.
28 |
29 | d. Assignment. You may assign all of your rights under this EULA, provided the recipient agrees to the terms of this EULA and subject to the prior written consent of InMobi.
30 |
31 | e. Termination. Without prejudice to any other rights, InMobi may terminate this EULA if you fail to comply with the terms and conditions of this EULA. In such event, you shall destroy all copies of the Software Product and all of its component parts.
32 |
33 | 3. Copyright
34 |
35 | Except as expressly provided herein, all title and copyrights in and to the Software Product (including but not limited to any images, photographs, clipart, libraries, and examples incorporated into the Software Product), the accompanying printed materials, and any copies of the Software Product are owned by InMobi. The Software Product is protected by copyright laws and international treaty provisions.
36 |
37 | 4. Limited Warranty
38 |
39 | a. No Warranties. InMobi expressly disclaims any and all warranties for the Software Product. The Software Product and any related documentation is provided “as is” without warranty of any kind, either express or implied, including, without limitation, the implied warranties or merchantability, fitness for a particular purpose, or non-infringement. The entire risk arising out of use or performance of the Software Product shall remain with the End User.
40 |
41 | b. No Liability For Damages. In no event shall InMobi be liable for any direct, special, consequential, incidental or indirect damages whatsoever (including, without limitation, damages for loss of business profits, business interruption, loss of business information, or any other pecuniary loss) arising out of the use of or inability to use this product, even if InMobi is aware of the possibility of such damages and known defects.
42 |
43 | 5. Third Party License
44 |
45 | The Software Product may contain third party software which shall be separately licensed as applicable. This license will be included within the Software Product.
46 |
47 | 6. Children's Privacy Compliance Settings
48 |
49 | You represent and warrant that your Children Privacy Compliance setting remains accurate or that you will update that setting, whenever there is a change in your app's audience. You may update the app's Children Privacy Compliance settings at https://publisher.inmobi.com/my-inventory/app-and-placements.
50 |
51 | 7. Governing Law
52 |
53 | This EULA and all disputes arising thereof shall be subject to the laws of Singapore, where the courts at Singapore shall exclusive jurisdiction.
--------------------------------------------------------------------------------
/sdk/licenses/Picasso-License.txt:
--------------------------------------------------------------------------------
1 | Copyright 2013 Square, Inc.
2 |
3 | Licensed under the Apache License, Version 2.0 (the "License");
4 | you may not use this file except in compliance with the License.
5 | You may obtain a copy of the License at
6 |
7 | http://www.apache.org/licenses/LICENSE-2.0
8 |
9 | Unless required by applicable law or agreed to in writing, software
10 | distributed under the License is distributed on an "AS IS" BASIS,
11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | See the License for the specific language governing permissions and
13 | limitations under the License.
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':samples:bannerSample', ':samples:interstitialSample', ':samples:nativeSample', ':samples:customABSample'
--------------------------------------------------------------------------------