Skip to content

Commit 5309209

Browse files
committed
feat(manifest): moving manifest related methods to manifest helper class
1 parent 412af11 commit 5309209

File tree

2 files changed

+160
-140
lines changed

2 files changed

+160
-140
lines changed

AndroidSDK/src/com/leanplum/LeanplumPushService.java

Lines changed: 39 additions & 140 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import android.app.Notification;
2626
import android.app.NotificationManager;
2727
import android.app.PendingIntent;
28-
import android.content.ComponentName;
2928
import android.content.Context;
3029
import android.content.Intent;
3130
import android.content.pm.PackageManager;
@@ -45,6 +44,7 @@
4544
import com.leanplum.internal.Constants.Params;
4645
import com.leanplum.internal.JsonConverter;
4746
import com.leanplum.internal.LeanplumInternal;
47+
import com.leanplum.internal.LeanplumManifestHelper;
4848
import com.leanplum.internal.Log;
4949
import com.leanplum.internal.Request;
5050
import com.leanplum.internal.Util;
@@ -100,15 +100,13 @@ public class LeanplumPushService {
100100
private static final String LEANPLUM_PUSH_LISTENER_SERVICE_CLASS =
101101
"com.leanplum.LeanplumPushListenerService";
102102
private static final String GCM_RECEIVER_CLASS = "com.google.android.gms.gcm.GcmReceiver";
103-
104-
private static Class<? extends Activity> callbackClass;
105-
private static LeanplumCloudMessagingProvider provider;
106-
private static boolean isFirebaseEnabled = false;
107103
private static final int NOTIFICATION_ID = 1;
108-
109104
private static final String OPEN_URL = "Open URL";
110105
private static final String URL = "URL";
111106
private static final String OPEN_ACTION = "Open";
107+
private static Class<? extends Activity> callbackClass;
108+
private static LeanplumCloudMessagingProvider provider;
109+
private static boolean isFirebaseEnabled = false;
112110
private static LeanplumPushNotificationCustomizer customizer;
113111

114112
/**
@@ -660,6 +658,9 @@ static void onStart() {
660658
}
661659
}
662660

661+
/**
662+
* Initialize push service.
663+
*/
663664
private static void initPushService() {
664665
if (isFirebaseEnabled()) {
665666
if (!enableFcmServices()) {
@@ -683,173 +684,71 @@ private static void initPushService() {
683684
registerInBackground();
684685
}
685686

687+
/**
688+
* Enables Firebase services. By default, all Firebase services are disabled.
689+
*
690+
* @return true if services are successfully enabled, false otherwise
691+
*/
686692
private static boolean enableFcmServices() {
687693
Context context = Leanplum.getContext();
688694
if (context == null) {
689695
Log.i("Failed to enable FCM services, context is null.");
690696
return false;
691697
}
698+
692699
PackageManager packageManager = context.getPackageManager();
700+
if (packageManager == null) {
701+
Log.i("Failed to enable FCM services, PackageManager is null.");
702+
return false;
703+
}
693704

694705
if (isFirebaseEnabled()) {
695-
Class fcmListenerClass = getClassForName(LEANPLUM_PUSH_FCM_LISTENER_SERVICE_CLASS);
706+
Class fcmListenerClass = LeanplumManifestHelper.getClassForName(LEANPLUM_PUSH_FCM_LISTENER_SERVICE_CLASS);
696707
if (fcmListenerClass == null) {
708+
Log.e("Failed to setup Firebase, please compile Firebase library.");
697709
return false;
698710
}
699711

700-
if (!wasComponentEnabled(context, packageManager, fcmListenerClass)) {
701-
if (!enableServiceAndStart(context, packageManager, PUSH_FIREBASE_MESSAGING_SERVICE_CLASS)
702-
|| !enableServiceAndStart(context, packageManager, fcmListenerClass)) {
712+
if (!LeanplumManifestHelper.wasComponentEnabled(context, packageManager, fcmListenerClass)) {
713+
if (!LeanplumManifestHelper.enableServiceAndStart(context, packageManager, PUSH_FIREBASE_MESSAGING_SERVICE_CLASS)
714+
|| !LeanplumManifestHelper.enableServiceAndStart(context, packageManager, fcmListenerClass)) {
703715
return false;
704716
}
705717
}
706718
}
707719
return true;
708720
}
709721

722+
/**
723+
* Enables GCM services. By default, all GCM services are disabled.
724+
*
725+
* @return true if services are successfully enabled, false otherwise
726+
*/
710727
private static boolean enableGcmServices() {
711728
Context context = Leanplum.getContext();
712729
if (context == null) {
713730
Log.i("Failed to enable FCM services, context is null.");
714731
return false;
715732
}
716-
PackageManager packageManager = context.getPackageManager();
717-
Class gcmPushInstanceIDClass = getClassForName(LEANPLUM_PUSH_INSTANCE_ID_SERVICE_CLASS);
718-
if (gcmPushInstanceIDClass == null) {
719-
return false;
720-
}
721-
722-
if (!wasComponentEnabled(context, packageManager, gcmPushInstanceIDClass)) {
723-
if (!enableComponent(context, packageManager, LEANPLUM_PUSH_LISTENER_SERVICE_CLASS) ||
724-
!enableComponent(context, packageManager, gcmPushInstanceIDClass) ||
725-
!enableComponent(context, packageManager, GCM_RECEIVER_CLASS)) {
726-
return false;
727-
}
728-
729-
}
730-
return true;
731-
}
732-
733-
/**
734-
* Gets Class for name.
735-
*
736-
* @param className - class name.
737-
* @return Class for provided class name.
738-
*/
739-
private static Class getClassForName(String className) {
740-
try {
741-
return Class.forName(className);
742-
} catch (Throwable t) {
743-
if (isFirebaseEnabled) {
744-
Log.e("Please compile FCM library.");
745-
} else {
746-
Log.e("Please compile GCM library.");
747-
}
748-
return null;
749-
}
750-
}
751-
752-
/**
753-
* Enables and starts service for provided class name.
754-
*
755-
* @param context Current Context.
756-
* @param packageManager Current PackageManager.
757-
* @param className Name of Class that needs to be enabled and started.
758-
* @return True if service was enabled and started.
759-
*/
760-
private static boolean enableServiceAndStart(Context context, PackageManager packageManager,
761-
String className) {
762-
Class clazz;
763-
try {
764-
clazz = Class.forName(className);
765-
} catch (Throwable t) {
766-
return false;
767-
}
768-
return enableServiceAndStart(context, packageManager, clazz);
769-
}
770-
771-
/**
772-
* Enables and starts service for provided class name.
773-
*
774-
* @param context Current Context.
775-
* @param packageManager Current PackageManager.
776-
* @param clazz Class of service that needs to be enabled and started.
777-
* @return True if service was enabled and started.
778-
*/
779-
private static boolean enableServiceAndStart(Context context, PackageManager packageManager,
780-
Class clazz) {
781-
if (!enableComponent(context, packageManager, clazz)) {
782-
return false;
783-
}
784-
try {
785-
context.startService(new Intent(context, clazz));
786-
} catch (Throwable t) {
787-
Log.w("Could not start service " + clazz.getName());
788-
return false;
789-
}
790-
return true;
791-
}
792-
793-
/**
794-
* Enables component for provided class name.
795-
*
796-
* @param context Current Context.
797-
* @param packageManager Current PackageManager.
798-
* @param className Name of Class for enable.
799-
* @return True if component was enabled.
800-
*/
801-
private static boolean enableComponent(Context context, PackageManager packageManager,
802-
String className) {
803-
try {
804-
Class clazz = Class.forName(className);
805-
return enableComponent(context, packageManager, clazz);
806-
} catch (Throwable t) {
807-
return false;
808-
}
809-
}
810733

811-
/**
812-
* Enables component for provided class.
813-
*
814-
* @param context Current Context.
815-
* @param packageManager Current PackageManager.
816-
* @param clazz Class for enable.
817-
* @return True if component was enabled.
818-
*/
819-
private static boolean enableComponent(Context context, PackageManager packageManager,
820-
Class clazz) {
821-
if (clazz == null || context == null || packageManager == null) {
734+
PackageManager packageManager = context.getPackageManager();
735+
if (packageManager == null) {
736+
Log.i("Failed to enable FCM services, PackageManager is null.");
822737
return false;
823738
}
824739

825-
try {
826-
packageManager.setComponentEnabledSetting(new ComponentName(context, clazz),
827-
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
828-
} catch (Throwable t) {
829-
Log.w("Could not enable component " + clazz.getName());
740+
Class gcmPushInstanceIDClass = LeanplumManifestHelper.getClassForName(LEANPLUM_PUSH_INSTANCE_ID_SERVICE_CLASS);
741+
if (gcmPushInstanceIDClass == null) {
742+
Log.e("Failed to setup GCM, please compile GCM library.");
830743
return false;
831744
}
832-
return true;
833-
}
834745

835-
/**
836-
* Checks if component for provided class enabled before.
837-
*
838-
* @param context Current Context.
839-
* @param packageManager Current PackageManager.
840-
* @param clazz Class for check.
841-
* @return True if component was enabled before.
842-
*/
843-
private static boolean wasComponentEnabled(Context context, PackageManager packageManager,
844-
Class clazz) {
845-
if (clazz == null || context == null || packageManager == null) {
846-
return false;
847-
}
848-
int componentStatus = packageManager.getComponentEnabledSetting(new ComponentName(context,
849-
clazz));
850-
if (PackageManager.COMPONENT_ENABLED_STATE_DEFAULT == componentStatus ||
851-
PackageManager.COMPONENT_ENABLED_STATE_DISABLED == componentStatus) {
852-
return false;
746+
if (!LeanplumManifestHelper.wasComponentEnabled(context, packageManager, gcmPushInstanceIDClass)) {
747+
if (!LeanplumManifestHelper.enableComponent(context, packageManager, LEANPLUM_PUSH_LISTENER_SERVICE_CLASS) ||
748+
!LeanplumManifestHelper.enableComponent(context, packageManager, gcmPushInstanceIDClass) ||
749+
!LeanplumManifestHelper.enableComponent(context, packageManager, GCM_RECEIVER_CLASS)) {
750+
return false;
751+
}
853752
}
854753
return true;
855754
}

AndroidSDK/src/com/leanplum/internal/LeanplumManifestHelper.java

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@
2121

2222
package com.leanplum.internal;
2323

24+
import android.content.ComponentName;
2425
import android.content.Context;
26+
import android.content.Intent;
2527
import android.content.pm.ApplicationInfo;
2628
import android.content.pm.PackageManager;
2729
import android.os.Bundle;
@@ -36,6 +38,125 @@
3638
*/
3739
public class LeanplumManifestHelper {
3840

41+
/**
42+
* Gets Class for name.
43+
*
44+
* @param className - class name.
45+
* @return Class for provided class name.
46+
*/
47+
public static Class getClassForName(String className) {
48+
try {
49+
return Class.forName(className);
50+
} catch (Throwable t) {
51+
return null;
52+
}
53+
}
54+
55+
/**
56+
* Enables and starts service for provided class name.
57+
*
58+
* @param context Current Context.
59+
* @param packageManager Current PackageManager.
60+
* @param className Name of Class that needs to be enabled and started.
61+
* @return True if service was enabled and started.
62+
*/
63+
public static boolean enableServiceAndStart(Context context, PackageManager packageManager,
64+
String className) {
65+
Class clazz;
66+
try {
67+
clazz = Class.forName(className);
68+
} catch (Throwable t) {
69+
return false;
70+
}
71+
return enableServiceAndStart(context, packageManager, clazz);
72+
}
73+
74+
/**
75+
* Enables and starts service for provided class name.
76+
*
77+
* @param context Current Context.
78+
* @param packageManager Current PackageManager.
79+
* @param clazz Class of service that needs to be enabled and started.
80+
* @return True if service was enabled and started.
81+
*/
82+
public static boolean enableServiceAndStart(Context context, PackageManager packageManager,
83+
Class clazz) {
84+
if (!enableComponent(context, packageManager, clazz)) {
85+
return false;
86+
}
87+
try {
88+
context.startService(new Intent(context, clazz));
89+
} catch (Throwable t) {
90+
Log.w("Could not start service " + clazz.getName());
91+
return false;
92+
}
93+
return true;
94+
}
95+
96+
/**
97+
* Enables component for provided class name.
98+
*
99+
* @param context Current Context.
100+
* @param packageManager Current PackageManager.
101+
* @param className Name of Class for enable.
102+
* @return True if component was enabled.
103+
*/
104+
public static boolean enableComponent(Context context, PackageManager packageManager,
105+
String className) {
106+
try {
107+
Class clazz = Class.forName(className);
108+
return enableComponent(context, packageManager, clazz);
109+
} catch (Throwable t) {
110+
return false;
111+
}
112+
}
113+
114+
/**
115+
* Enables component for provided class.
116+
*
117+
* @param context Current Context.
118+
* @param packageManager Current PackageManager.
119+
* @param clazz Class for enable.
120+
* @return True if component was enabled.
121+
*/
122+
public static boolean enableComponent(Context context, PackageManager packageManager,
123+
Class clazz) {
124+
if (clazz == null || context == null || packageManager == null) {
125+
return false;
126+
}
127+
128+
try {
129+
packageManager.setComponentEnabledSetting(new ComponentName(context, clazz),
130+
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
131+
} catch (Throwable t) {
132+
Log.w("Could not enable component " + clazz.getName());
133+
return false;
134+
}
135+
return true;
136+
}
137+
138+
/**
139+
* Checks if component for provided class enabled before.
140+
*
141+
* @param context Current Context.
142+
* @param packageManager Current PackageManager.
143+
* @param clazz Class for check.
144+
* @return True if component was enabled before.
145+
*/
146+
public static boolean wasComponentEnabled(Context context, PackageManager packageManager,
147+
Class clazz) {
148+
if (clazz == null || context == null || packageManager == null) {
149+
return false;
150+
}
151+
int componentStatus = packageManager.getComponentEnabledSetting(new ComponentName(context,
152+
clazz));
153+
if (PackageManager.COMPONENT_ENABLED_STATE_DEFAULT == componentStatus ||
154+
PackageManager.COMPONENT_ENABLED_STATE_DISABLED == componentStatus) {
155+
return false;
156+
}
157+
return true;
158+
}
159+
39160
/**
40161
* Parses and returns client broadcast receiver class name.
41162
*

0 commit comments

Comments
 (0)