Skip to content

Commit edfeeee

Browse files
committed
New strategy for keeping Activities Objects in a stack
1 parent 1f131b1 commit edfeeee

File tree

4 files changed

+254
-35
lines changed

4 files changed

+254
-35
lines changed

app/src/main/java/org/metatrans/commons/Activity_Base_Ads_Banner.java

Lines changed: 88 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -11,51 +11,82 @@
1111
import android.widget.FrameLayout;
1212

1313

14-
public abstract class Activity_Base_Ads_Banner extends org.metatrans.commons.Activity_Base {
14+
public abstract class Activity_Base_Ads_Banner extends org.metatrans.commons.Activity_Base implements IActivityInterstitial {
1515

1616

1717
private IAdLoadFlow current_adLoadFlow;
18+
1819
private boolean isBannerAttached;
19-
20-
20+
21+
private static long timestamp_last_ad_openning;
22+
23+
24+
private IAdLoadFlow current_adLoadFlow_Interstitial;
25+
26+
2127
@Override
2228
protected void onCreate(Bundle savedInstanceState) {
2329

2430
super.onCreate(savedInstanceState);
25-
31+
32+
//Skip ads first 1 minute
33+
//TODO timestamp_last_ad_openning = System.nanoTime();
2634
}
27-
28-
29-
protected abstract String getBannerName();
30-
31-
32-
protected abstract FrameLayout getFrame();
33-
34-
35-
protected int getGravity() {
36-
return Gravity.TOP | Gravity.CENTER_HORIZONTAL;
35+
36+
37+
@Override
38+
protected void onResume() {
39+
40+
System.out.println("Activity_Base_Ads_Banner: onResume()");
41+
42+
super.onResume();
43+
44+
attachBanner();
45+
46+
if (getInterstitialName() != null) {
47+
48+
current_adLoadFlow_Interstitial = ((Application_Base_Ads)getApplication()).getAdsManager().getCachedFlow(getInterstitialName());
49+
50+
if (current_adLoadFlow_Interstitial == null) {
51+
52+
System.out.println("Activity_Question create Interstitial");
53+
54+
current_adLoadFlow_Interstitial = ((Application_Base_Ads)getApplication()).getAdsManager().createFlow_Interstitial_Mixed(getInterstitialName());
55+
((Application_Base_Ads)getApplication()).getAdsManager().putCachedFlow(getInterstitialName(), current_adLoadFlow_Interstitial);
56+
} else {
57+
58+
System.out.println("Activity_Question Interstitial EXISTS");
59+
60+
//current_adLoadFlow_Interstitial.cleanCurrent();
61+
current_adLoadFlow_Interstitial.pause();
62+
}
63+
}
3764
}
38-
39-
65+
66+
4067
@Override
4168
protected void onPause() {
42-
69+
4370
System.out.println("Activity_Base_Ads_Banner: onPause()");
44-
71+
4572
detachBanner();
46-
73+
4774
super.onPause();
4875
}
76+
77+
78+
protected abstract String getBannerName();
79+
80+
protected String getInterstitialName() {
81+
return null;
82+
}
83+
84+
85+
protected abstract FrameLayout getFrame();
4986

5087

51-
@Override
52-
protected void onResume() {
53-
54-
System.out.println("Activity_Base_Ads_Banner: onResume()");
55-
56-
super.onResume();
57-
58-
attachBanner();
88+
protected int getGravity() {
89+
return Gravity.TOP | Gravity.CENTER_HORIZONTAL;
5990
}
6091

6192

@@ -121,4 +152,34 @@ protected void attachBanner() {
121152
e.printStackTrace();
122153
}
123154
}
155+
156+
157+
@Override
158+
public void openInterstitial() {
159+
160+
try {
161+
162+
System.out.println("Activity_Question openInterstitial called");
163+
164+
long now = System.currentTimeMillis();
165+
166+
if (now >= timestamp_last_ad_openning + 60 * 1000) {
167+
168+
if (current_adLoadFlow_Interstitial != null) {
169+
170+
current_adLoadFlow_Interstitial.resume();
171+
172+
System.out.println("Activity_Question openInterstitial RESUMED");
173+
}
174+
175+
timestamp_last_ad_openning = now;
176+
177+
} else {
178+
System.out.println("Activity_Question openInterstitial SKIPPED");
179+
}
180+
181+
} catch(Throwable t) {
182+
t.printStackTrace();
183+
}
184+
}
124185
}

app/src/main/java/org/metatrans/commons/app/IActivityInterstitial.java renamed to app/src/main/java/org/metatrans/commons/IActivityInterstitial.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.metatrans.commons.app;
1+
package org.metatrans.commons;
22

33

44
public interface IActivityInterstitial {
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
package org.metatrans.commons.analytics;
2+
3+
4+
import java.util.ArrayList;
5+
import java.util.List;
6+
7+
import org.metatrans.commons.IActivityInterstitial;
8+
import org.metatrans.commons.app.Application_Base;
9+
import org.metatrans.commons.events.api.IEvent_Base;
10+
11+
import android.app.Activity;
12+
13+
14+
public class Analytics_ActivitiesStack implements IAnalytics {
15+
16+
17+
private List<Activity> stack;
18+
19+
20+
public Analytics_ActivitiesStack() {
21+
22+
stack = new ArrayList<Activity>();
23+
}
24+
25+
26+
@Override
27+
public void onActivity_Create(Activity activity) {
28+
System.out.println("Analytics_ActivitiesStack: onActivity_Create: " + activity);
29+
stack.add(activity);
30+
}
31+
32+
33+
@Override
34+
public void onActivity_Destroy(Activity activity) {
35+
36+
boolean last_found = stack.remove(activity);
37+
38+
if (!last_found) {
39+
40+
throw new IllegalStateException();
41+
}
42+
43+
System.out.println("Analytics_ActivitiesStack: onActivity_Destroy: " + activity);
44+
}
45+
46+
47+
/*@Override
48+
public void onActivity_Start(Activity activity) {
49+
50+
System.out.println("Analytics_ActivitiesStack: onActivity_Start: " + activity);
51+
stack.add(activity);
52+
}
53+
54+
55+
@Override
56+
public void onActivity_Stop(Activity activity) {
57+
58+
boolean last_found = stack.remove(activity);
59+
60+
if (!last_found) {
61+
62+
throw new IllegalStateException();
63+
}
64+
65+
System.out.println("Analytics_ActivitiesStack: onActivity_Stop: " + activity);
66+
}*/
67+
68+
69+
@Override
70+
public Activity getCurrentActivity() {
71+
72+
//System.out.println("Current activity: " + current);
73+
if (stack.size() == 0) {
74+
75+
return null;
76+
}
77+
78+
return stack.get(stack.size() - 1);
79+
}
80+
81+
82+
public Activity getInterstitialActivity() {
83+
84+
for (Activity current: stack) {
85+
86+
if (current instanceof IActivityInterstitial) {
87+
88+
return current;
89+
}
90+
}
91+
92+
return null;
93+
}
94+
95+
96+
@Override
97+
public void init(Application_Base app_context) {
98+
//Do nothing
99+
}
100+
101+
102+
@Override
103+
public void sendEvent(IEvent_Base event) {
104+
//Do nothing
105+
}
106+
}
Lines changed: 59 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,28 @@
11
package org.metatrans.commons.app;
22

33

4+
import android.app.Activity;
5+
import android.app.ActivityManager;
6+
7+
import org.metatrans.commons.IActivityInterstitial;
48
import org.metatrans.commons.ads.api.IAdsConfigurations;
59
import org.metatrans.commons.ads.impl.AdsManager;
6-
import org.metatrans.commons.app.Application_Base;
10+
import org.metatrans.commons.analytics.Analytics_ActivitiesStack;
11+
import org.metatrans.commons.analytics.IAnalytics;
712
import org.metatrans.commons.model.GameData_Base;
813

14+
import java.util.Iterator;
15+
import java.util.List;
16+
917

1018
public abstract class Application_Base_Ads extends Application_Base {
1119

1220

1321
private AdsManager adsmanager;
14-
15-
22+
23+
private IAnalytics acitvities_stack = new Analytics_ActivitiesStack();
24+
25+
1626
@Override
1727
public void onCreate() {
1828

@@ -22,34 +32,76 @@ public void onCreate() {
2232
System.out.println("Application_EC: onCreate called " + System.currentTimeMillis());
2333
}
2434

35+
2536
public abstract IAdsConfigurations getAdsConfigurations();
2637

2738

2839
public static Application_Base_Ads getInstance() {
40+
2941
return (Application_Base_Ads) Application_Base.getInstance();
3042
}
3143

3244

3345
public void openInterstitial() {
34-
Object activity = getCurrentActivity();
46+
47+
Object activity = getInterstitialActivity();
48+
3549
if (activity instanceof IActivityInterstitial) {
50+
3651
((IActivityInterstitial)activity).openInterstitial();
52+
3753
} else {
38-
if (isTestMode()) throw new IllegalStateException("Not in IActivityInterstitial");
54+
55+
if (isTestMode()) {
56+
57+
throw new IllegalStateException("Not in IActivityInterstitial");
58+
}
3959
}
4060
}
41-
42-
61+
62+
63+
protected Activity getInterstitialActivity() {
64+
65+
return ((Analytics_ActivitiesStack) getAnalytics()).getInterstitialActivity();
66+
67+
/* TODO: Use standard Android approach
68+
ActivityManager m = (ActivityManager) getSystemService( ACTIVITY_SERVICE );
69+
70+
List<ActivityManager.RunningTaskInfo> runningTaskInfoList = m.getRunningTasks(10);
71+
72+
Iterator<ActivityManager.RunningTaskInfo> iterator = runningTaskInfoList.iterator();
73+
74+
while (iterator.hasNext()) {
75+
76+
ActivityManager.RunningTaskInfo runningTaskInfo = (ActivityManager.RunningTaskInfo) iterator.next();
77+
78+
int id = runningTaskInfo.id;
79+
CharSequence desc= runningTaskInfo.description;
80+
int numOfActivities = runningTaskInfo.numActivities;
81+
String topActivity = runningTaskInfo.topActivity.getShortClassName();
82+
}*/
83+
}
84+
85+
86+
@Override
87+
public IAnalytics getAnalytics() {
88+
return acitvities_stack;
89+
}
90+
91+
4392
@Override
4493
public GameData_Base createGameDataObject() {
4594
throw new UnsupportedOperationException();
4695
}
4796

4897

4998
public AdsManager getAdsManager() {
99+
50100
if (adsmanager == null) {
101+
51102
adsmanager = AdsManager.getSingleton(this);
52103
}
104+
53105
return adsmanager;
54106
}
55107
}

0 commit comments

Comments
 (0)