Show terms of service before install GSI/DSU
Test: settings->developer option->debug::DSU Loader
Bug: 144248769
Change-Id: Id5fa7f88544191736eb0c5db6334fd367c1be426
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index df87bf5..d06a0f2 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1949,6 +1949,9 @@
<activity android:name=".development.DSULoader"
android:label="Select DSU Package"
android:theme="@android:style/Theme.DeviceDefault.Light.Dialog" />
+ <activity android:name=".development.DSUTermsOfServiceActivity"
+ android:label="Terms of Service"
+ android:theme="@android:style/Theme.DeviceDefault.Light.Dialog" />
<activity android:name="Settings$WebViewAppPickerActivity"
android:label="@string/select_webview_provider_dialog_title" />
diff --git a/res/layout/dsu_terms_of_service.xml b/res/layout/dsu_terms_of_service.xml
new file mode 100644
index 0000000..8c75557
--- /dev/null
+++ b/res/layout/dsu_terms_of_service.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical" >
+
+ <ScrollView
+ android:layout_width="match_parent"
+ android:layout_height="0dip"
+ android:layout_marginStart="16dp"
+ android:layout_marginEnd="16dp"
+ android:layout_marginTop="16dp"
+ android:layout_weight="1" >
+ <TextView android:id="@+id/tos_content"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="8dip"
+ android:layout_marginBottom="16dip"
+ android:textAppearance="?android:attr/textAppearanceSmall" />
+ </ScrollView>
+
+ <Button android:id="@+id/accept"
+ android:layout_gravity="center_horizontal"
+ android:layout_marginTop="16dip"
+ android:layout_marginBottom="16dip"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/assistant_security_warning_agree"
+ android:gravity="center" />
+
+</LinearLayout>
diff --git a/src/com/android/settings/development/DSULoader.java b/src/com/android/settings/development/DSULoader.java
index 33458ea..36ce785 100644
--- a/src/com/android/settings/development/DSULoader.java
+++ b/src/com/android/settings/development/DSULoader.java
@@ -195,6 +195,7 @@
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 @@
int mOsVersion = -1;
int[] mVndk = null;
String mPubKey = "";
+ URL mTosUrl = null;
URL mUri;
DSUPackage(JSONObject jsn) throws JSONException, MalformedURLException {
@@ -223,6 +225,9 @@
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 @@
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 @@
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 0000000..f88d4ef
--- /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);
+ }
+ });
+ }
+ }
+}