Merge "Move SdkSetup app into device/generic/goldfish"
This commit is contained in:
@@ -1,25 +0,0 @@
|
|||||||
package {
|
|
||||||
// See: http://go/android-license-faq
|
|
||||||
default_applicable_licenses: ["Android-Apache-2.0"],
|
|
||||||
}
|
|
||||||
|
|
||||||
android_app {
|
|
||||||
name: "SdkSetup",
|
|
||||||
privileged: true,
|
|
||||||
srcs: ["**/*.java"],
|
|
||||||
platform_apis: true,
|
|
||||||
certificate: "platform",
|
|
||||||
optimize: {
|
|
||||||
enabled: false,
|
|
||||||
},
|
|
||||||
system_ext_specific: true,
|
|
||||||
required: ["privapp_whitelist_com.android.sdksetup"],
|
|
||||||
}
|
|
||||||
|
|
||||||
prebuilt_etc {
|
|
||||||
name: "privapp_whitelist_com.android.sdksetup",
|
|
||||||
system_ext_specific: true,
|
|
||||||
sub_dir: "permissions",
|
|
||||||
src: "com.android.sdksetup.xml",
|
|
||||||
filename_from_src: true,
|
|
||||||
}
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!--
|
|
||||||
Copyright (C) 2008 The Android Open Source Project
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
-->
|
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
package="com.android.sdksetup">
|
|
||||||
|
|
||||||
<!-- For miscellaneous settings -->
|
|
||||||
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS" />
|
|
||||||
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
|
|
||||||
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
|
|
||||||
<uses-permission android:name="android.permission.MANAGE_USERS" />
|
|
||||||
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
|
|
||||||
<uses-permission android:name="android.permission.WRITE_SYSTEM_SETTINGS" />
|
|
||||||
<uses-permission android:name="android.permission.SET_KEYBOARD_LAYOUT" />
|
|
||||||
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
|
|
||||||
<application>
|
|
||||||
<activity android:name="DefaultActivity"
|
|
||||||
android:excludeFromRecents="true"
|
|
||||||
android:exported="true">
|
|
||||||
<intent-filter android:priority="3">
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.HOME" />
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
</application>
|
|
||||||
<uses-permission android:name="android.permission.BACKUP" />
|
|
||||||
</manifest>
|
|
||||||
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
# Copyright (C) 2019 The Android Open Source Project
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
# you may not use this file except in compliance with the License.
|
|
||||||
# You may obtain a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
# See the License for the specific language governing permissions and
|
|
||||||
# limitations under the License.
|
|
||||||
#
|
|
||||||
|
|
||||||
# If you don't need to do a full clean build but would like to touch
|
|
||||||
# a file or delete some intermediate files, add a clean step to the end
|
|
||||||
# of the list. These steps will only be run once, if they haven't been
|
|
||||||
# run before.
|
|
||||||
#
|
|
||||||
# E.g.:
|
|
||||||
# $(call add-clean-step, touch -c external/sqlite/sqlite3.h)
|
|
||||||
# $(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/libz_intermediates)
|
|
||||||
#
|
|
||||||
# Always use "touch -c" and "rm -f" or "rm -rf" to gracefully deal with
|
|
||||||
# files that are missing or have been moved.
|
|
||||||
#
|
|
||||||
# Use $(PRODUCT_OUT) to get to the "out/target/product/blah/" directory.
|
|
||||||
# Use $(OUT_DIR) to refer to the "out" directory.
|
|
||||||
#
|
|
||||||
# If you need to re-do something that's already mentioned, just copy
|
|
||||||
# the command and add it to the bottom of the list. E.g., if a change
|
|
||||||
# that you made last week required touching a file and a change you
|
|
||||||
# made today requires touching the same file, just copy the old
|
|
||||||
# touch step and add it to the end of the list.
|
|
||||||
#
|
|
||||||
# ************************************************
|
|
||||||
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
|
|
||||||
# ************************************************
|
|
||||||
|
|
||||||
# For example:
|
|
||||||
#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/AndroidTests_intermediates)
|
|
||||||
#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/core_intermediates)
|
|
||||||
#$(call add-clean-step, find $(OUT_DIR) -type f -name "IGTalkSession*" -print0 | xargs -0 rm -f)
|
|
||||||
#$(call add-clean-step, rm -rf $(PRODUCT_OUT)/data/*)
|
|
||||||
|
|
||||||
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/product/priv-app/SdkSetup)
|
|
||||||
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/product/priv-app/SdkSetup)
|
|
||||||
|
|
||||||
# ************************************************
|
|
||||||
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
|
|
||||||
# ************************************************
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!--
|
|
||||||
~ Copyright (C) 2017 The Android Open Source Project
|
|
||||||
~
|
|
||||||
~ Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
~ you may not use this file except in compliance with the License.
|
|
||||||
~ You may obtain a copy of the License at
|
|
||||||
~
|
|
||||||
~ http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
~
|
|
||||||
~ Unless required by applicable law or agreed to in writing, software
|
|
||||||
~ distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
~ See the License for the specific language governing permissions and
|
|
||||||
~ limitations under the License
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!--
|
|
||||||
This XML file declares which signature|privileged permissions should be granted to privileged
|
|
||||||
applications on GMS or Google-branded devices.
|
|
||||||
It allows additional grants on top of privapp-permissions-platform.xml
|
|
||||||
-->
|
|
||||||
|
|
||||||
<permissions>
|
|
||||||
<privapp-permissions package="com.android.sdksetup">
|
|
||||||
<permission name="android.permission.BACKUP"/>
|
|
||||||
<permission name="android.permission.MANAGE_USERS"/>
|
|
||||||
<permission name="android.permission.MODIFY_PHONE_STATE"/>
|
|
||||||
<permission name="android.permission.WRITE_SECURE_SETTINGS"/>
|
|
||||||
<permission name="android.permission.INTERACT_ACROSS_USERS"/>
|
|
||||||
</privapp-permissions>
|
|
||||||
</permissions>
|
|
||||||
@@ -1,143 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2008 The Android Open Source Project
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.android.sdksetup;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.content.ComponentName;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.pm.PackageManager;
|
|
||||||
import android.hardware.input.InputManager;
|
|
||||||
import android.hardware.input.KeyboardLayout;
|
|
||||||
import android.location.LocationManager;
|
|
||||||
import android.net.wifi.WifiManager;
|
|
||||||
import android.net.wifi.WifiConfiguration;
|
|
||||||
import android.provider.Settings;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.os.RemoteException;
|
|
||||||
import android.os.ServiceManager;
|
|
||||||
import android.os.SystemProperties;
|
|
||||||
import android.os.Build;
|
|
||||||
import android.telephony.TelephonyManager;
|
|
||||||
import android.util.Log;
|
|
||||||
import android.view.InputDevice;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Entry point for SDK SetupWizard.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class DefaultActivity extends Activity {
|
|
||||||
private static final String TAG = "SdkSetup";
|
|
||||||
private static final int ADD_NETWORK_FAIL = -1;
|
|
||||||
@Override
|
|
||||||
protected void onCreate(Bundle icicle) {
|
|
||||||
super.onCreate(icicle);
|
|
||||||
|
|
||||||
// Edit Settings only for Emulator
|
|
||||||
if (Build.IS_EMULATOR) {
|
|
||||||
// Add network with SSID "AndroidWifi"
|
|
||||||
WifiConfiguration config = new WifiConfiguration();
|
|
||||||
config.SSID = "\"AndroidWifi\"";
|
|
||||||
config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_OPEN);
|
|
||||||
WifiManager mWifiManager = getApplicationContext().getSystemService(WifiManager.class);
|
|
||||||
int netId = mWifiManager.addNetwork(config);
|
|
||||||
if (netId == ADD_NETWORK_FAIL || mWifiManager.enableNetwork(netId, true)) {
|
|
||||||
Log.e(TAG, "Unable to add Wi-Fi network AndroidWifi.");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set physical keyboard layout based on the system property set by emulator host.
|
|
||||||
String layoutName = SystemProperties.get("vendor.qemu.keyboard_layout");
|
|
||||||
String displaySettingsName = SystemProperties.get("ro.boot.qemu.display.settings.xml");
|
|
||||||
String deviceName = "qwerty2";
|
|
||||||
InputDevice device = getKeyboardDevice(deviceName);
|
|
||||||
if (device != null && !layoutName.isEmpty()) {
|
|
||||||
setKeyboardLayout(device, layoutName);
|
|
||||||
}
|
|
||||||
// Add a persistent setting to allow other apps to know the device has been provisioned.
|
|
||||||
Settings.Global.putInt(getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 1);
|
|
||||||
|
|
||||||
Settings.Secure.putInt(getContentResolver(), Settings.Secure.USER_SETUP_COMPLETE, 1);
|
|
||||||
|
|
||||||
// Disables a dialog shown on adb install execution.
|
|
||||||
Settings.Global.putInt(getContentResolver(), Settings.Global.PACKAGE_VERIFIER_INCLUDE_ADB, 0);
|
|
||||||
|
|
||||||
// Enable the GPS.
|
|
||||||
// Not needed since this SDK will contain the Settings app.
|
|
||||||
Settings.Secure.putString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED,
|
|
||||||
LocationManager.GPS_PROVIDER);
|
|
||||||
|
|
||||||
// enable install from non market
|
|
||||||
Settings.Secure.putInt(getContentResolver(), Settings.Secure.INSTALL_NON_MARKET_APPS, 1);
|
|
||||||
|
|
||||||
Settings.Global.putInt(getContentResolver(), Settings.Global.ADB_ENABLED, 1);
|
|
||||||
|
|
||||||
// Disable offload wifi tethering
|
|
||||||
Settings.Global.putInt(getContentResolver(), Settings.Global.TETHER_OFFLOAD_DISABLED, 1);
|
|
||||||
|
|
||||||
// b/193418404
|
|
||||||
// the following blocks, TODO: find out why and fix it. disable this for now.
|
|
||||||
// TelephonyManager mTelephony = getApplicationContext().getSystemService(TelephonyManager.class);
|
|
||||||
// mTelephony.setPreferredNetworkTypeBitmask(TelephonyManager.NETWORK_TYPE_BITMASK_NR);
|
|
||||||
if ("freeform".equals(displaySettingsName)) {
|
|
||||||
Settings.Global.putInt(getContentResolver(), "sf", 1);
|
|
||||||
Settings.Global.putString(getContentResolver(), Settings.Global.DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT, "1");
|
|
||||||
Settings.Global.putString(getContentResolver(), Settings.Global.DEVELOPMENT_FORCE_RESIZABLE_ACTIVITIES, "1");
|
|
||||||
Settings.Global.putString(getContentResolver(), Settings.Global.DEVELOPMENT_WM_DISPLAY_SETTINGS_PATH, "vendor/etc/display_settings_freeform.xml");
|
|
||||||
} else if ("resizable".equals(displaySettingsName)) {
|
|
||||||
// Enable auto rotate for resizable AVD
|
|
||||||
Settings.System.putString(getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, "1");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// remove this activity from the package manager.
|
|
||||||
PackageManager pm = getPackageManager();
|
|
||||||
ComponentName name = new ComponentName(this, DefaultActivity.class);
|
|
||||||
pm.setComponentEnabledSetting(name, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);
|
|
||||||
|
|
||||||
// terminate the activity.
|
|
||||||
finish();
|
|
||||||
}
|
|
||||||
|
|
||||||
private InputDevice getKeyboardDevice(String keyboardDeviceName) {
|
|
||||||
int[] deviceIds = InputDevice.getDeviceIds();
|
|
||||||
|
|
||||||
for (int deviceId : deviceIds) {
|
|
||||||
InputDevice inputDevice = InputDevice.getDevice(deviceId);
|
|
||||||
if (inputDevice != null
|
|
||||||
&& inputDevice.supportsSource(InputDevice.SOURCE_KEYBOARD)
|
|
||||||
&& inputDevice.getName().equals(keyboardDeviceName)) {
|
|
||||||
return inputDevice;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setKeyboardLayout(InputDevice keyboardDevice, String layoutName) {
|
|
||||||
InputManager im = InputManager.getInstance();
|
|
||||||
|
|
||||||
KeyboardLayout[] keyboardLayouts =
|
|
||||||
im.getKeyboardLayoutsForInputDevice(keyboardDevice.getIdentifier());
|
|
||||||
|
|
||||||
for (KeyboardLayout keyboardLayout : keyboardLayouts) {
|
|
||||||
if (keyboardLayout.getDescriptor().endsWith(layoutName)) {
|
|
||||||
im.setCurrentKeyboardLayoutForInputDevice(
|
|
||||||
keyboardDevice.getIdentifier(), keyboardLayout.getDescriptor());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user