Skip to content

Commit be436f4

Browse files
committed
API Referencing
1 parent fe2f2b8 commit be436f4

File tree

3 files changed

+48
-39
lines changed

3 files changed

+48
-39
lines changed

android/src/main/java/com/hackthedeveloper/live_icon/MethodCallImplementation.java

Lines changed: 33 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ public class MethodCallImplementation implements MethodChannel.MethodCallHandler
2525
private final Context context;
2626
private Activity activity;
2727

28+
private static List<String> classNames = null;
2829

2930
MethodCallImplementation(Context context, Activity activity) {
3031
this.context = context;
@@ -40,42 +41,49 @@ void setActivity(Activity activity) {
4041
public void onMethodCall(@NonNull MethodCall call, @NonNull MethodChannel.Result result) {
4142

4243
switch (call.method) {
43-
case "switchTo":
44-
switchTo(call);
44+
case "initialize":
45+
{
46+
classNames = call.arguments();
4547
break;
48+
}
49+
case "switchIconTo":
50+
{
51+
switchIconTo(call);
52+
break;
53+
}
4654
default:
4755
result.notImplemented();
4856
break;
4957
}
5058
}
5159

52-
private void switchTo(MethodCall call) {
53-
List<Map<String, String>> args = call.arguments();
54-
String iconName = args.get(0).get("iconName");
55-
String className = args.get(0).get("className");
56-
PackageManager pm = activity.getPackageManager();
60+
private void switchIconTo(MethodCall call) {
61+
if(classNames == null || classNames.isEmpty()) {
62+
Log.e(TAG,"Initialization Failed!");
63+
Log.i(TAG,"List all the activity-alias class names in initialize()");
64+
return;
65+
}
5766

67+
List<String> args = call.arguments();
68+
String className = args.get(0);
5869

70+
PackageManager pm = activity.getPackageManager();
5971
String packageName = activity.getPackageName();
60-
// Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(packageName);
61-
// String mainActivityClass = launchIntent.getComponent().getClassName();
62-
63-
ComponentName darkThemeCN = new ComponentName(packageName, packageName+"."+className);
64-
ComponentName lightThemeCN = new ComponentName(packageName, packageName+"."+"LightTheme");
65-
ComponentName mainThemeCN = new ComponentName(packageName, packageName+"."+"MainActivity");
66-
67-
68-
pm.setComponentEnabledSetting(lightThemeCN,
69-
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
70-
PackageManager.DONT_KILL_APP);
71-
pm.setComponentEnabledSetting(mainThemeCN,
72-
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
73-
PackageManager.DONT_KILL_APP);
74-
pm.setComponentEnabledSetting(darkThemeCN,
75-
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
76-
PackageManager.DONT_KILL_APP);
72+
int componentState = PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
73+
int i=0;
74+
for(;i<classNames.size();i++) {
75+
ComponentName cn = new ComponentName(packageName, packageName+"."+classNames.get(i));
76+
if(className.equals(classNames.get(i))) {
77+
componentState = PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
78+
}
79+
pm.setComponentEnabledSetting(cn, componentState, PackageManager.DONT_KILL_APP);
80+
}
7781

78-
Log.d(TAG,"DONE");
82+
if(i>classNames.size()) {
83+
Log.e(TAG,"class name "+className+" did not match in the initialized list.");
84+
return;
85+
}
86+
Log.d(TAG,"Icon switched to "+className);
7987
}
8088
}
8189

example/lib/main.dart

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@ class _MyAppState extends State<MyApp> {
1616

1717
@override
1818
void initState() {
19+
LiveIcon.initialize(
20+
classNames: ['MainActivity', 'DarkTheme', 'LightTheme'],
21+
);
1922
super.initState();
2023
}
2124

2225
void switchAppIcon() async {
23-
await liveIcon.switchTo(
24-
icon: const LiveIconData(
25-
iconName: "darkTheme",
26-
className: "DarkTheme",
27-
),
26+
await liveIcon.switchIconTo(
27+
className: 'LightTheme',
2828
);
2929
}
3030

lib/live_icon.dart

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
11
import 'dart:async';
22

33
import 'package:flutter/services.dart';
4-
import 'package:live_icon/src/helper/helper.dart';
5-
6-
export 'package:live_icon/src/helper/helper.dart';
74

85
class LiveIcon {
96
static const MethodChannel _channel =
107
const MethodChannel('com.hackthedeveloper.live_icon');
118

12-
Future<void> switchTo({required LiveIconData icon}) async {
13-
Map<String, String> iconData = {
14-
'iconName': icon.iconName,
15-
'className': icon.className,
16-
};
17-
await _channel.invokeMethod("switchTo", [iconData]);
9+
/// [initialize] takes list of class names listed in AndroidManifest.xml's
10+
/// activity-alias tag.
11+
static Future<void> initialize({required List<String> classNames}) async {
12+
await _channel.invokeMethod("initialize", classNames);
13+
}
14+
15+
/// [switchIconTo] takes a class name (activity-alias android:name)
16+
/// and switches the app icon to that activity-alias.
17+
Future<void> switchIconTo({required String className}) async {
18+
await _channel.invokeMethod("switchIconTo", [className]);
1819
}
1920
}

0 commit comments

Comments
 (0)