Skip to content

Commit 181e44e

Browse files
committed
[VXP]: add gms support UI.
1 parent cefadbe commit 181e44e

File tree

6 files changed

+67
-3
lines changed

6 files changed

+67
-3
lines changed

VirtualApp/app/src/main/java/io/virtualapp/settings/SettingsActivity.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import android.widget.Toast;
1414

1515
import com.android.launcher3.LauncherFiles;
16+
import com.lody.virtual.GmsSupport;
1617
import com.lody.virtual.client.core.VirtualCore;
1718

1819
import io.virtualapp.R;
@@ -34,6 +35,7 @@ public class SettingsActivity extends Activity {
3435
private static final String REBOOT_KEY = "settings_reboot";
3536
private static final String HIDE_SETTINGS_KEY = "advance_settings_hide_settings";
3637
private static final String DISABLE_INSTALLER_KEY = "advance_settings_disable_installer";
38+
private static final String INSTALL_GMS_KEY = "advance_settings_install_gms";
3739
public static final String DIRECTLY_BACK_KEY = "advance_settings_directly_back";
3840

3941
@Override
@@ -72,6 +74,7 @@ public void onCreate(Bundle savedInstanceState) {
7274
Preference reboot = findPreference(REBOOT_KEY);
7375

7476
SwitchPreference disableInstaller = (SwitchPreference) findPreference(DISABLE_INSTALLER_KEY);
77+
SwitchPreference installGms = (SwitchPreference) findPreference(INSTALL_GMS_KEY);
7578

7679
addApp.setOnPreferenceClickListener(preference -> {
7780
ListAppActivity.gotoListApp(getActivity());
@@ -162,6 +165,26 @@ public void onCreate(Bundle savedInstanceState) {
162165
return false;
163166
}
164167
});
168+
169+
installGms.setOnPreferenceChangeListener(((preference, newValue) -> {
170+
if (!(newValue instanceof Boolean)) {
171+
return false;
172+
}
173+
boolean install = (boolean) newValue;
174+
if (install) {
175+
if (!GmsSupport.isOutsideGoogleFrameworkExist()) {
176+
Toast.makeText(getActivity(), "Sorry, your phone has no GMS supported.", Toast.LENGTH_SHORT).show();
177+
return false;
178+
}
179+
180+
Toast.makeText(getActivity(), "Coming soon.", Toast.LENGTH_SHORT).show();
181+
// Installd.addGmsSupport();
182+
return false;
183+
} else {
184+
// TODO, delete.
185+
}
186+
return false;
187+
}));
165188
}
166189
}
167190
}

VirtualApp/app/src/main/java/io/virtualapp/sys/Installd.java

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22

33
import android.content.Context;
44
import android.content.Intent;
5+
import android.content.pm.ApplicationInfo;
56
import android.content.pm.PackageInfo;
67
import android.content.pm.PackageManager;
78

9+
import com.lody.virtual.GmsSupport;
810
import com.lody.virtual.client.core.InstallStrategy;
911
import com.lody.virtual.client.core.VirtualCore;
1012
import com.lody.virtual.helper.utils.DeviceUtil;
@@ -15,9 +17,10 @@
1517

1618
import java.io.IOException;
1719
import java.util.ArrayList;
20+
import java.util.List;
1821

19-
import io.virtualapp.XApp;
2022
import io.virtualapp.VCommends;
23+
import io.virtualapp.XApp;
2124
import io.virtualapp.abs.ui.VUiKit;
2225
import io.virtualapp.home.models.AppData;
2326
import io.virtualapp.home.models.AppInfoLite;
@@ -219,4 +222,33 @@ public static void startInstallerActivity(Context context, ArrayList<AppInfoLite
219222
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
220223
context.startActivity(intent);
221224
}
225+
226+
public static void addGmsSupport() {
227+
List<String> gApps = new ArrayList<>();
228+
gApps.addAll(GmsSupport.GOOGLE_APP);
229+
gApps.addAll(GmsSupport.GOOGLE_SERVICE);
230+
231+
VirtualCore core = VirtualCore.get();
232+
final int userId = 0;
233+
234+
ArrayList<AppInfoLite> toInstalled = new ArrayList<>();
235+
for (String packageName : gApps) {
236+
if (core.isAppInstalledAsUser(userId, packageName)) {
237+
continue;
238+
}
239+
ApplicationInfo info = null;
240+
try {
241+
info = VirtualCore.get().getUnHookPackageManager().getApplicationInfo(packageName, 0);
242+
} catch (PackageManager.NameNotFoundException e) {
243+
// Ignore
244+
}
245+
if (info == null || info.sourceDir == null) {
246+
continue;
247+
}
248+
249+
AppInfoLite lite = new AppInfoLite(info.packageName, info.sourceDir, false, true);
250+
toInstalled.add(lite);
251+
}
252+
startInstallerActivity(VirtualCore.get().getContext(), toInstalled);
253+
}
222254
}

VirtualApp/app/src/main/res/values-zh-rCN/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,4 +121,5 @@
121121
<string name="advance_settings_directly_back">直接返回</string>
122122
<string name="advance_settings_directly_back_summary">内部APP退出时,直接返回到系统桌面而不是VirtualXposed的虚拟桌面(强制停止VirtualXposed后生效)</string>
123123
<string name="install_self_eggs">小伙子,你这个想法很有前途 :)</string>
124+
<string name="advance_settings_install_gms">安装Google服务框架</string>
124125
</resources>

VirtualApp/app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,4 +125,5 @@
125125
<string name="advance_settings_directly_back">Directly back</string>
126126
<string name="advance_settings_directly_back_summary">Back to system launcher instead of the virtual launcher when in virtual app.\n(Restart VirtualXposed to take effect.)</string>
127127
<string name="install_self_eggs">Boy, your idea is promising :)</string>
128+
<string name="advance_settings_install_gms">Install Google Service</string>
128129
</resources>

VirtualApp/app/src/main/res/xml/settings_preferences.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,13 @@
2020
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
2121
android:title="@string/settings_advance">
2222

23+
<SwitchPreference
24+
android:defaultValue="false"
25+
android:visibility="gone"
26+
android:key="advance_settings_install_gms"
27+
android:persistent="true"
28+
android:title="@string/advance_settings_install_gms" />
29+
2330
<SwitchPreference
2431
android:defaultValue="false"
2532
android:key="advance_settings_hide_settings"

VirtualApp/lib/src/main/java/com/lody/virtual/GmsSupport.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@
1414
*/
1515
public class GmsSupport {
1616

17-
private static final List<String> GOOGLE_APP = Arrays.asList(
17+
public static final List<String> GOOGLE_APP = Arrays.asList(
1818
"com.android.vending",
1919
"com.google.android.play.games",
2020
"com.google.android.wearable.app",
2121
"com.google.android.wearable.app.cn"
2222
);
2323

24-
private static final List<String> GOOGLE_SERVICE = Arrays.asList(
24+
public static final List<String> GOOGLE_SERVICE = Arrays.asList(
2525
"com.google.android.gsf",
2626
"com.google.android.gms",
2727
"com.google.android.gsf.login",

0 commit comments

Comments
 (0)