|
7 | 7 | import android.util.Log;
|
8 | 8 | import androidx.lifecycle.LiveData;
|
9 | 9 | import androidx.lifecycle.MutableLiveData;
|
10 |
| - |
11 | 10 | import java.util.HashMap;
|
12 | 11 | import java.util.HashSet;
|
13 | 12 | import java.util.List;
|
|
16 | 15 | import java.util.Set;
|
17 | 16 |
|
18 | 17 | public class InstallationObserver {
|
19 |
| - public enum InstallStatus { |
20 |
| - IN_PROGRESS, SUCCEEDED, FAILED |
| 18 | + public enum InstallStatus { |
| 19 | + IN_PROGRESS, |
| 20 | + SUCCEEDED, |
| 21 | + FAILED |
| 22 | + } |
| 23 | + |
| 24 | + public static class InstallState { |
| 25 | + private final String appPackageName; |
| 26 | + private final InstallStatus status; |
| 27 | + |
| 28 | + public InstallState(String appPackageName, InstallStatus status) { |
| 29 | + this.appPackageName = appPackageName; |
| 30 | + this.status = status; |
21 | 31 | }
|
22 | 32 |
|
23 |
| - public static class InstallState { |
24 |
| - private final String appPackageName; |
25 |
| - private final InstallStatus status; |
26 |
| - |
27 |
| - public InstallState(String appPackageName, InstallStatus status) { |
28 |
| - this.appPackageName = appPackageName; |
29 |
| - this.status = status; |
30 |
| - } |
31 |
| - |
32 |
| - public String getAppPackageName() { |
33 |
| - return appPackageName; |
34 |
| - } |
35 |
| - |
36 |
| - public InstallStatus getStatus() { |
37 |
| - return status; |
38 |
| - } |
39 |
| - |
40 |
| - public String getPackageShortName() { |
41 |
| - return appPackageName.substring(appPackageName.lastIndexOf(".") + 1); |
42 |
| - } |
43 |
| - |
44 |
| - public String getPackageTitle() { |
45 |
| - String shortName = getPackageShortName(); |
46 |
| - return shortName.substring(0, 1).toUpperCase(Locale.getDefault()) + shortName.substring(1); |
47 |
| - } |
| 33 | + public String getAppPackageName() { |
| 34 | + return appPackageName; |
48 | 35 | }
|
49 | 36 |
|
50 |
| - private static InstallState stateFromId(PackageInstaller installer, int sessionId) { |
51 |
| - PackageInstaller.SessionInfo info = installer.getSessionInfo(sessionId); |
52 |
| - if (info == null || info.getAppPackageName() == null) { |
53 |
| - return null; |
54 |
| - } |
55 |
| - return new InstallState(info.getAppPackageName(), InstallStatus.IN_PROGRESS); |
| 37 | + public InstallStatus getStatus() { |
| 38 | + return status; |
56 | 39 | }
|
57 | 40 |
|
58 |
| - public static Set<String> getInstalledPackages(PackageManager packageManager) { |
59 |
| - List<PackageInfo> packageInfoList = packageManager.getInstalledPackages(0); |
60 |
| - Set<String> setOfInstalledApps = new HashSet<>(); |
61 |
| - for (PackageInfo info: packageInfoList) { |
62 |
| - setOfInstalledApps.add(info.packageName); |
63 |
| - } |
64 |
| - return setOfInstalledApps; |
| 41 | + public String getPackageShortName() { |
| 42 | + return appPackageName.substring(appPackageName.lastIndexOf(".") + 1); |
65 | 43 | }
|
66 | 44 |
|
67 |
| - public static LiveData<InstallState> installationStates(Context context) { |
68 |
| - MutableLiveData<InstallState> liveData = new MutableLiveData<>(); |
69 |
| - PackageInstaller packageInstaller = context.getPackageManager().getPackageInstaller(); |
70 |
| - Map<Integer, InstallState> inProgressSessions = new HashMap<>(); |
71 |
| - |
72 |
| - PackageInstaller.SessionCallback callback = new PackageInstaller.SessionCallback() { |
73 |
| - @Override |
74 |
| - public void onCreated(int sessionId) { |
75 |
| - Log.d(TAG, "onCreated "); |
76 |
| - InstallState state = stateFromId(packageInstaller, sessionId); |
77 |
| - if (state != null) { |
78 |
| - inProgressSessions.put(sessionId, state); |
79 |
| - liveData.postValue(state); |
80 |
| - } |
81 |
| - } |
| 45 | + public String getPackageTitle() { |
| 46 | + String shortName = getPackageShortName(); |
| 47 | + return shortName.substring(0, 1).toUpperCase(Locale.getDefault()) + shortName.substring(1); |
| 48 | + } |
| 49 | + } |
82 | 50 |
|
83 |
| - @Override |
84 |
| - public void onBadgingChanged(int sessionId) { |
| 51 | + private static InstallState stateFromId(PackageInstaller installer, int sessionId) { |
| 52 | + PackageInstaller.SessionInfo info = installer.getSessionInfo(sessionId); |
| 53 | + if (info == null || info.getAppPackageName() == null) { |
| 54 | + return null; |
| 55 | + } |
| 56 | + return new InstallState(info.getAppPackageName(), InstallStatus.IN_PROGRESS); |
| 57 | + } |
| 58 | + |
| 59 | + public static Set<String> getInstalledPackages(PackageManager packageManager) { |
| 60 | + List<PackageInfo> packageInfoList = packageManager.getInstalledPackages(0); |
| 61 | + Set<String> setOfInstalledApps = new HashSet<>(); |
| 62 | + for (PackageInfo info : packageInfoList) { |
| 63 | + setOfInstalledApps.add(info.packageName); |
| 64 | + } |
| 65 | + return setOfInstalledApps; |
| 66 | + } |
| 67 | + |
| 68 | + public static LiveData<InstallState> installationStates(Context context) { |
| 69 | + MutableLiveData<InstallState> liveData = new MutableLiveData<>(); |
| 70 | + PackageInstaller packageInstaller = context.getPackageManager().getPackageInstaller(); |
| 71 | + Map<Integer, InstallState> inProgressSessions = new HashMap<>(); |
| 72 | + |
| 73 | + PackageInstaller.SessionCallback callback = |
| 74 | + new PackageInstaller.SessionCallback() { |
| 75 | + @Override |
| 76 | + public void onCreated(int sessionId) { |
| 77 | + Log.d(TAG, "onCreated "); |
| 78 | + InstallState state = stateFromId(packageInstaller, sessionId); |
| 79 | + if (state != null) { |
| 80 | + inProgressSessions.put(sessionId, state); |
| 81 | + liveData.postValue(state); |
85 | 82 | }
|
86 |
| - |
87 |
| - @Override |
88 |
| - public void onActiveChanged(int sessionId, boolean active) { |
89 |
| - Log.d(TAG, "onActiveChanged"); |
90 |
| - InstallState state = stateFromId(packageInstaller, sessionId); |
91 |
| - if (state != null) { |
92 |
| - inProgressSessions.put(sessionId, state); |
93 |
| - liveData.postValue(state); |
94 |
| - } |
| 83 | + } |
| 84 | + |
| 85 | + @Override |
| 86 | + public void onBadgingChanged(int sessionId) {} |
| 87 | + |
| 88 | + @Override |
| 89 | + public void onActiveChanged(int sessionId, boolean active) { |
| 90 | + Log.d(TAG, "onActiveChanged"); |
| 91 | + InstallState state = stateFromId(packageInstaller, sessionId); |
| 92 | + if (state != null) { |
| 93 | + inProgressSessions.put(sessionId, state); |
| 94 | + liveData.postValue(state); |
95 | 95 | }
|
96 |
| - |
97 |
| - @Override |
98 |
| - public void onProgressChanged(int sessionId, float progress) { |
99 |
| - Log.d(TAG, "onProgressChanged:" + progress); |
100 |
| - InstallState state = stateFromId(packageInstaller, sessionId); |
101 |
| - if (state != null) { |
102 |
| - inProgressSessions.put(sessionId, state); |
103 |
| - liveData.postValue(state); |
104 |
| - } |
| 96 | + } |
| 97 | + |
| 98 | + @Override |
| 99 | + public void onProgressChanged(int sessionId, float progress) { |
| 100 | + Log.d(TAG, "onProgressChanged:" + progress); |
| 101 | + InstallState state = stateFromId(packageInstaller, sessionId); |
| 102 | + if (state != null) { |
| 103 | + inProgressSessions.put(sessionId, state); |
| 104 | + liveData.postValue(state); |
105 | 105 | }
|
106 |
| - |
107 |
| - @Override |
108 |
| - public void onFinished(int sessionId, boolean success) { |
109 |
| - Log.d(TAG, "onFinished " + sessionId + " " + success); |
110 |
| - InstallState current = inProgressSessions.get(sessionId); |
111 |
| - if (current != null) { |
112 |
| - InstallState newState = new InstallState(current.getAppPackageName(), success ? InstallStatus.SUCCEEDED : InstallStatus.FAILED); |
113 |
| - liveData.postValue(newState); |
114 |
| - inProgressSessions.remove(sessionId); |
115 |
| - } |
| 106 | + } |
| 107 | + |
| 108 | + @Override |
| 109 | + public void onFinished(int sessionId, boolean success) { |
| 110 | + Log.d(TAG, "onFinished " + sessionId + " " + success); |
| 111 | + InstallState current = inProgressSessions.get(sessionId); |
| 112 | + if (current != null) { |
| 113 | + InstallState newState = |
| 114 | + new InstallState( |
| 115 | + current.getAppPackageName(), |
| 116 | + success ? InstallStatus.SUCCEEDED : InstallStatus.FAILED); |
| 117 | + liveData.postValue(newState); |
| 118 | + inProgressSessions.remove(sessionId); |
116 | 119 | }
|
| 120 | + } |
117 | 121 | };
|
118 | 122 |
|
119 |
| - packageInstaller.registerSessionCallback(callback); |
120 |
| - |
121 |
| - for (PackageInstaller.SessionInfo info : packageInstaller.getMySessions()) { |
122 |
| - if (info.isActive() && info.getAppPackageName() != null) { |
123 |
| - InstallState state = new InstallState(info.getAppPackageName(), InstallStatus.IN_PROGRESS); |
124 |
| - inProgressSessions.put(info.getSessionId(), state); |
125 |
| - liveData.postValue(state); |
126 |
| - } |
127 |
| - } |
| 123 | + packageInstaller.registerSessionCallback(callback); |
128 | 124 |
|
129 |
| - return liveData; |
| 125 | + for (PackageInstaller.SessionInfo info : packageInstaller.getMySessions()) { |
| 126 | + if (info.isActive() && info.getAppPackageName() != null) { |
| 127 | + InstallState state = new InstallState(info.getAppPackageName(), InstallStatus.IN_PROGRESS); |
| 128 | + inProgressSessions.put(info.getSessionId(), state); |
| 129 | + liveData.postValue(state); |
| 130 | + } |
130 | 131 | }
|
131 | 132 |
|
132 |
| - private static final String TAG = "InstallationObserver"; |
| 133 | + return liveData; |
| 134 | + } |
| 135 | + |
| 136 | + private static final String TAG = "InstallationObserver"; |
133 | 137 | }
|
0 commit comments