Skip to content

Commit f8c737d

Browse files
author
DayBySay
committed
add SDK Ver 4.2.0
1 parent 6d21029 commit f8c737d

25 files changed

+610
-120
lines changed

README.md

+7
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,13 @@ FluctSDK-Androidの[Wiki](https://github.com/voyagegroup/FluctSDK-Android/wiki)
55

66
# FluctSDK Release Note
77

8+
## v4.2.0 2017/1/24
9+
10+
### 変更
11+
* 対応OSバージョンをAndroid4.0.0以上に更新
12+
* サンプルプロジェクトにListViewへの対応方法を追加
13+
* 細かい不具合の修正
14+
815
## v4.1.0 2016/12/13
916

1017
### 変更

SampleApp/app/build.gradle

+5-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ android {
55
buildToolsVersion "24.0.2"
66
defaultConfig {
77
applicationId "jp.fluct.sample.samplefluctsdkapp"
8-
minSdkVersion 9
8+
minSdkVersion 14
99
targetSdkVersion 24
1010
versionCode 1
1111
versionName "1.0"
@@ -31,11 +31,13 @@ dependencies {
3131
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
3232
exclude group: 'com.android.support', module: 'support-annotations'
3333
})
34+
compile 'com.android.support:support-v4:24.2.1'
3435
compile 'com.android.support:appcompat-v7:24.2.1'
3536
testCompile 'junit:junit:4.12'
3637

3738
// FluctSDK
38-
compile 'jp.fluct:FluctSDK:4.0.0'
39+
compile 'jp.fluct:FluctSDK:4.2.0'
40+
3941
// Google play services - base
40-
compile 'com.google.android.gms:play-services-base:9.6.1'
42+
compile 'com.google.android.gms:play-services-base:9.8.0'
4143
}

SampleApp/app/src/main/AndroidManifest.xml

+4
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@
3636
</intent-filter>
3737
</activity>
3838

39+
<activity android:name=".BannerActivity" />
40+
<activity android:name=".InterstitialActivity" />
41+
<activity android:name=".InfeedActivity" />
42+
3943
</application>
4044

4145
</manifest>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package jp.fluct.sample.samplefluctsdkapp;
2+
3+
import android.support.v7.app.AppCompatActivity;
4+
import android.os.Bundle;
5+
6+
import jp.fluct.fluctsdk.FluctAdBanner;
7+
8+
public class BannerActivity extends AppCompatActivity {
9+
10+
@Override
11+
protected void onCreate(Bundle savedInstanceState) {
12+
super.onCreate(savedInstanceState);
13+
setContentView(R.layout.activity_banner);
14+
15+
setupBanner();
16+
}
17+
18+
private void setupBanner() {
19+
FluctAdBanner banner = (FluctAdBanner) findViewById(R.id.banner);
20+
banner.setCallbacks(new FluctAdBanner.Callbacks() {
21+
@Override
22+
public void onDisplayDone() {
23+
// 広告が表示されたときの処理を記述(任意)
24+
25+
// ...
26+
27+
}
28+
29+
@Override
30+
public void onTapped() {
31+
// 広告がタップされたときの処理を記述(任意)
32+
33+
// ...
34+
35+
}
36+
37+
@Override
38+
public void onError(FluctAdBanner.Error error) {
39+
switch (error.getType()){
40+
case NetworkError:
41+
// ネットワークエラー:通信状況を確認
42+
break;
43+
case InvalidRequest:
44+
// 不明な広告リクエスト:media_idを確認
45+
break;
46+
case InternalError:
47+
default:
48+
// その他の不明なエラー:エラーログを確認
49+
break;
50+
}
51+
}
52+
});
53+
}
54+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,213 @@
1+
package jp.fluct.sample.samplefluctsdkapp;
2+
3+
import android.content.Context;
4+
import android.os.Bundle;
5+
import android.support.annotation.NonNull;
6+
import android.support.annotation.Nullable;
7+
import android.support.v4.app.Fragment;
8+
import android.view.LayoutInflater;
9+
import android.view.View;
10+
import android.view.ViewGroup;
11+
import android.widget.ArrayAdapter;
12+
import android.widget.ImageView;
13+
import android.widget.ListView;
14+
import android.widget.TextView;
15+
16+
import java.util.ArrayList;
17+
import java.util.List;
18+
19+
import jp.fluct.fluctsdk.FluctAdBanner;
20+
21+
public class ContentsListFragment extends Fragment {
22+
23+
private ListView mContentListView;
24+
25+
public ContentsListFragment() {
26+
}
27+
28+
@Override
29+
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
30+
View layout = inflater.inflate(R.layout.fragment_contents_list, container, false);
31+
mContentListView = (ListView) layout.findViewById(R.id.list);
32+
33+
return layout;
34+
}
35+
36+
@Override
37+
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
38+
super.onActivityCreated(savedInstanceState);
39+
40+
List<Object> listContents = generateContents();
41+
ContentsListAdapter adapter = new ContentsListAdapter(getContext(), listContents);
42+
43+
// Fluct広告を入れる
44+
FluctAdBanner.SizeType sizeType = FluctAdBanner.SizeType.BANNER;
45+
String mediaId = "0000005617";
46+
adapter.insert(new Ad(sizeType, mediaId), 3);
47+
adapter.insert(new Ad(sizeType, mediaId), 12);
48+
adapter.insert(new Ad(sizeType, mediaId), 30);
49+
adapter.insert(new Ad(sizeType, mediaId), 55);
50+
adapter.insert(new Ad(sizeType, mediaId), 80);
51+
52+
// リストへ反映
53+
mContentListView.setAdapter(adapter);
54+
}
55+
56+
// リストコンテンツの作成
57+
private List<Object> generateContents(){
58+
List<Object> contents = new ArrayList<>();
59+
for (int i = 0; i < 100; i++) {
60+
Content content = new Content(i);
61+
content.name = "item " + (i + 1);
62+
contents.add(content);
63+
}
64+
return contents;
65+
}
66+
67+
/**
68+
* コンテンツのモデル
69+
*/
70+
private static class Content {
71+
final int identity;
72+
String name;
73+
74+
Content(int id) {
75+
this.identity = id;
76+
}
77+
}
78+
79+
/**
80+
* 広告モデル
81+
*/
82+
private static class Ad {
83+
final FluctAdBanner.SizeType sizeType;
84+
final String mediaId;
85+
86+
Ad(FluctAdBanner.SizeType sizeType, String mediaId) {
87+
this.sizeType = sizeType;
88+
this.mediaId = mediaId;
89+
}
90+
}
91+
92+
private static class ContentsListAdapter extends ArrayAdapter<Object> {
93+
94+
private final LayoutInflater mInflater;
95+
96+
public ContentsListAdapter(Context context, List<Object> contents) {
97+
super(context, R.layout.item_list_content, contents);
98+
mInflater = LayoutInflater.from(context);
99+
}
100+
101+
@NonNull
102+
@Override
103+
public View getView(int position, View convertView, ViewGroup parent) {
104+
Object content = getItem(position);
105+
106+
int itemViewType = getItemViewType(position);
107+
ViewType viewType = ViewType.find(itemViewType);
108+
switch (viewType) {
109+
case CONTENT:
110+
convertView = getViewForContent((Content) content, position, convertView, parent);
111+
break;
112+
case AD:
113+
convertView = getViewForFluctAd((Ad) content, position, convertView, parent);
114+
break;
115+
}
116+
117+
return convertView;
118+
}
119+
120+
private View getViewForContent(Content content, int position, View convertView, ViewGroup parent) {
121+
ContentViewHolder holder;
122+
if (convertView == null) {
123+
convertView = mInflater.inflate(R.layout.item_list_content, null);
124+
holder = new ContentViewHolder();
125+
holder.index = (TextView) convertView.findViewById(R.id.list_index);
126+
holder.name = (TextView) convertView.findViewById(R.id.list_name);
127+
holder.thumbnail = (ImageView) convertView.findViewById(R.id.list_thumbnail);
128+
convertView.setTag(holder);
129+
} else {
130+
holder = (ContentViewHolder) convertView.getTag();
131+
}
132+
133+
// リスト番号
134+
holder.index.setText(String.valueOf(position + 1));
135+
136+
// 項目名
137+
holder.name.setText(content.name);
138+
139+
return convertView;
140+
}
141+
142+
private View getViewForFluctAd(Ad ad, int position, View convertView, ViewGroup parent) {
143+
FluctAdBanner adView;
144+
if (convertView == null) {
145+
// 初回作成
146+
adView = new FluctAdBanner(getContext());
147+
adView.getViewSettings().setSizeType(ad.sizeType);
148+
adView.getViewSettings().setMediaId(ad.mediaId);
149+
adView.setTag(ad);
150+
151+
} else {
152+
// 広告の再利用
153+
adView = (FluctAdBanner) convertView;
154+
Ad preListAd = (Ad) adView.getTag();
155+
156+
if (preListAd != ad) {
157+
// リサイクルされた広告と違う広告を表示させたい場合は再生成する
158+
adView = new FluctAdBanner(getContext());
159+
adView.getViewSettings().setSizeType(ad.sizeType);
160+
adView.getViewSettings().setMediaId(ad.mediaId);
161+
adView.setTag(ad);
162+
}
163+
}
164+
165+
return adView;
166+
}
167+
168+
169+
@Override
170+
public int getViewTypeCount() {
171+
return ViewType.values().length;
172+
}
173+
174+
@Override
175+
public int getItemViewType(int position) {
176+
Object content = getItem(position);
177+
if (content instanceof Ad) {
178+
// 広告
179+
return ViewType.AD.id;
180+
181+
} else {
182+
// デフォルト
183+
return ViewType.CONTENT.id;
184+
185+
}
186+
}
187+
188+
private enum ViewType {
189+
CONTENT(0), AD(1);
190+
191+
final int id;
192+
193+
ViewType(int id) {
194+
this.id = id;
195+
}
196+
197+
static ViewType find(int id) {
198+
for(ViewType vt: values()){
199+
if(vt.id == id){
200+
return vt;
201+
}
202+
}
203+
return CONTENT;
204+
}
205+
}
206+
207+
private static class ContentViewHolder {
208+
TextView index;
209+
TextView name;
210+
ImageView thumbnail;
211+
}
212+
}
213+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package jp.fluct.sample.samplefluctsdkapp;
2+
3+
import android.os.Bundle;
4+
import android.support.v4.app.FragmentTransaction;
5+
import android.support.v7.app.AppCompatActivity;
6+
7+
public class InfeedActivity extends AppCompatActivity {
8+
9+
@Override
10+
protected void onCreate(Bundle savedInstanceState) {
11+
super.onCreate(savedInstanceState);
12+
setContentView(R.layout.activity_infeed);
13+
14+
if (savedInstanceState == null) {
15+
ContentsListFragment fragment = new ContentsListFragment();
16+
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
17+
ft.add(R.id.activity_infeed, fragment);
18+
ft.commit();
19+
}
20+
}
21+
}

0 commit comments

Comments
 (0)