diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 4b520347594..2c1c76eff3d 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1949,6 +1949,9 @@
+
diff --git a/res/layout/dsu_terms_of_service.xml b/res/layout/dsu_terms_of_service.xml
new file mode 100644
index 00000000000..8c7555717ee
--- /dev/null
+++ b/res/layout/dsu_terms_of_service.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/com/android/settings/development/DSULoader.java b/src/com/android/settings/development/DSULoader.java
index 33458ea73d9..36ce785641f 100644
--- a/src/com/android/settings/development/DSULoader.java
+++ b/src/com/android/settings/development/DSULoader.java
@@ -195,6 +195,7 @@ public class DSULoader extends ListActivity {
private static final String OS_VERSION = "os_version";
private static final String VNDK = "vndk";
private static final String PUBKEY = "pubkey";
+ private static final String TOS = "tos";
String mName = null;
String mDetails = null;
@@ -202,6 +203,7 @@ public class DSULoader extends ListActivity {
int mOsVersion = -1;
int[] mVndk = null;
String mPubKey = "";
+ URL mTosUrl = null;
URL mUri;
DSUPackage(JSONObject jsn) throws JSONException, MalformedURLException {
@@ -223,6 +225,9 @@ public class DSULoader extends ListActivity {
if (jsn.has(PUBKEY)) {
mPubKey = jsn.getString(PUBKEY);
}
+ if (jsn.has(TOS)) {
+ mTosUrl = new URL(jsn.getString(TOS));
+ }
}
int dessertNumber(String s, int base) {
@@ -318,10 +323,10 @@ public class DSULoader extends ListActivity {
Slog.e(TAG, e.toString());
return;
}
- new Thread(new Fetcher(url)).start();
mAdapter = new DSUPackageListAdapter(this);
setListAdapter(mAdapter);
mAdapter.add(getResources().getString(R.string.dsu_loader_loading));
+ new Thread(new Fetcher(url)).start();
}
@Override
@@ -329,12 +334,25 @@ public class DSULoader extends ListActivity {
Object selected = mAdapter.getItem(position);
if (selected instanceof DSUPackage) {
DSUPackage dsu = (DSUPackage) selected;
- Intent intent = new Intent();
- intent.setClassName(
- "com.android.dynsystem", "com.android.dynsystem.VerificationActivity");
- intent.setData(Uri.parse(dsu.mUri.toString()));
- intent.putExtra("KEY_PUBKEY", dsu.mPubKey);
- startActivity(intent);
+ mAdapter.clear();
+ mAdapter.add(getResources().getString(R.string.dsu_loader_loading));
+ new Thread(new Runnable() {
+ public void run() {
+ String termsOfService = "";
+ if (dsu.mTosUrl != null) {
+ try {
+ termsOfService = readAll(dsu.mTosUrl);
+ } catch (IOException e) {
+ Slog.e(TAG, e.toString());
+ }
+ }
+ Intent intent = new Intent(DSULoader.this, DSUTermsOfServiceActivity.class);
+ intent.putExtra(DSUTermsOfServiceActivity.KEY_TOS, termsOfService);
+ intent.setData(Uri.parse(dsu.mUri.toString()));
+ intent.putExtra("KEY_PUBKEY", dsu.mPubKey);
+ startActivity(intent);
+ }
+ }).start();
}
finish();
}
diff --git a/src/com/android/settings/development/DSUTermsOfServiceActivity.java b/src/com/android/settings/development/DSUTermsOfServiceActivity.java
new file mode 100644
index 00000000000..f88d4efe1cb
--- /dev/null
+++ b/src/com/android/settings/development/DSUTermsOfServiceActivity.java
@@ -0,0 +1,63 @@
+/*
+ * 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.
+ */
+
+package com.android.settings.development;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.Button;
+import android.widget.TextView;
+
+import com.android.settings.R;
+
+/** Activity shows terms of service for a given DSU package */
+public class DSUTermsOfServiceActivity extends Activity {
+ public static final String KEY_TOS = "KEY_TOS";
+
+ private void installDSU(Intent intent) {
+ intent.setClassName("com.android.dynsystem", "com.android.dynsystem.VerificationActivity");
+ startActivity(intent);
+ finish();
+ }
+
+ @Override
+ protected void onCreate(Bundle bundle) {
+ super.onCreate(bundle);
+ setContentView(R.layout.dsu_terms_of_service);
+ TextView tv = findViewById(R.id.tos_content);
+ Intent intent = getIntent();
+ if (!intent.hasExtra(KEY_TOS)) {
+ finish();
+ }
+ String tos = intent.getStringExtra(KEY_TOS);
+ if (TextUtils.isEmpty(tos)) {
+ installDSU(intent);
+ } else {
+ tv.setText(tos);
+ Button accept = findViewById(R.id.accept);
+ accept.setOnClickListener(
+ new Button.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ installDSU(intent);
+ }
+ });
+ }
+ }
+}