add system settings
Test: manually verified
Change-Id: Ie9c9b4ccea92a4601e4e0b9ff7f4bf75f8fef89a
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 23b5ca9..57d47fc 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -276,5 +276,35 @@
android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
android:value="true"/>
</activity>
+
+ <activity
+ android:name=".system.SystemSettingsActivity"
+ android:label="@string/system_setting_title"
+ android:theme="@style/CarSettingTheme"
+ android:icon="@drawable/ic_settings_about">
+ <intent-filter android:priority="1">
+ <action android:name="com.android.settings.action.SETTINGS"/>
+ </intent-filter>
+
+ <meta-data
+ android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
+ android:value="true"/>
+ <meta-data
+ android:name="com.android.settings.category"
+ android:value="com.android.settings.category.ia.homepage"/>
+ </activity>
+ <activity
+ android:name=".system.AboutSettingsActivity"
+ android:label="@string/system_setting_title"
+ android:theme="@style/CarSettingTheme"
+ android:icon="@drawable/ic_settings_about">
+ <intent-filter android:priority="1">
+ <action android:name="com.android.settings.action.SETTINGS"/>
+ </intent-filter>
+
+ <meta-data
+ android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
+ android:value="true"/>
+ </activity>
</application>
</manifest>
diff --git a/res/drawable/ic_settings_about.xml b/res/drawable/ic_settings_about.xml
new file mode 100644
index 0000000..ae3d78c
--- /dev/null
+++ b/res/drawable/ic_settings_about.xml
@@ -0,0 +1,25 @@
+<!--
+ 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24.0dp"
+ android:height="24.0dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?android:attr/colorControlNormal">
+ <path
+ android:fillColor="#FFFFFFFF"
+ android:pathData="M11.0,17.0l2.0,0.0l0.0,-6.0l-2.0,0.0l0.0,6.0zm1.0,-15.0C6.48,2.0 2.0,6.48 2.0,12.0s4.48,10.0 10.0,10.0 10.0,-4.48 10.0,-10.0S17.52,2.0 12.0,2.0zm0.0,18.0c-4.41,0.0 -8.0,-3.59 -8.0,-8.0s3.59,-8.0 8.0,-8.0 8.0,3.59 8.0,8.0 -3.59,8.0 -8.0,8.0zM11.0,9.0l2.0,0.0L13.0,7.0l-2.0,0.0l0.0,2.0z"/>
+</vector>
diff --git a/res/drawable/ic_system_update.xml b/res/drawable/ic_system_update.xml
new file mode 100644
index 0000000..ef8f991
--- /dev/null
+++ b/res/drawable/ic_system_update.xml
@@ -0,0 +1,25 @@
+<!--
+ 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?android:attr/colorControlNormal">
+ <path
+ android:pathData="M17,1.01L7,1c-1.1,0 -2,0.9 -2,2v18c0,1.1 0.9,2 2,2h10c1.1,0 2,-0.9 2,-2L19,3c0,-1.1 -0.9,-1.99 -2,-1.99zM17,19L7,19L7,5h10v14zM16,13h-3L13,8h-2v5L8,13l4,4 4,-4z"
+ android:fillColor="#FFFFFFFF"/>
+</vector>
diff --git a/res/layout/icon_text_line_item.xml b/res/layout/icon_text_line_item.xml
new file mode 100644
index 0000000..4a96468
--- /dev/null
+++ b/res/layout/icon_text_line_item.xml
@@ -0,0 +1,47 @@
+<?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
+ -->
+
+<RelativeLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+ <ImageView
+ android:id="@+id/icon"
+ android:layout_width="@dimen/tile_icon_size"
+ android:layout_height="@dimen/tile_icon_size"
+ android:layout_centerVertical="true"
+ android:layout_alignParentStart="true" />
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:layout_toEndOf="@+id/icon"
+ android:paddingTop="@dimen/tile_top_bottom_padding"
+ android:paddingBottom="@dimen/tile_top_bottom_padding" >
+ <TextView
+ android:id="@+id/title"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:textSize="@dimen/medium_text_size" />
+ <TextView
+ android:id="@+id/desc"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:textSize="@dimen/small_text_size"
+ android:visibility="gone" />
+ </LinearLayout>
+</RelativeLayout>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 1d5747e..a11448f 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -148,6 +148,81 @@
</plurals>
+ <!-- System --><skip />
+ <!-- Main setting menu item to go into system settings -->
+ <string name="system_setting_title">System</string>
+ <!-- About phone screen, list item title. Takes the user to the screen for seeing and installing system updates. [CHAR LIMIT=40] -->
+ <string name="system_update_settings_list_item_title">System updates</string>
+ <!-- About phone screen, list item summary. Takes the user to the screen for seeing and installing system updates. [CHAR LIMIT=40] -->
+ <string name="system_update_settings_list_item_summary">""</string>
+
+ <!-- About phone screen, status item label [CHAR LIMIT=40] -->
+ <string name="firmware_version">Android version</string>
+ <!-- About phone screen, status item label [CHAR LIMIT=60] -->
+ <string name="security_patch">Android security patch level</string>
+ <!-- About phone screen, status item label [CHAR LIMIT=40] -->
+ <string name="model_info">Model</string>
+ <!-- About phone screen, setting option name [CHAR LIMIT=40] -->
+ <string name="baseband_version">Baseband version</string>
+ <!-- About phone screen, setting option name [CHAR LIMIT=40] -->
+ <string name="kernel_version">Kernel version</string>
+ <!-- About phone screen, setting option name [CHAR LIMIT=40] -->
+ <string name="build_number">Build number</string>
+
+ <!-- About phone screen, show when a value of some status item is unavailable. -->
+ <string name="device_info_not_available">Not available</string>
+ <!-- About phone screen, phone status screen title -->
+ <string name="device_status_activity_title">Status</string>
+ <!-- About phone screen, title of the item to go into the Phone status screen -->
+ <string name="device_status">Status</string>
+ <!-- About tablet screen, summary of the item that takes you to tablet status screen -->
+ <string name="device_status_summary" product="tablet">Status of the battery, network, and other information</string>
+ <!-- About phone screen, summary of the item to go into the phone status screen -->
+ <string name="device_status_summary" product="default">Phone number, signal, etc.</string>
+
+ <!-- About --> <skip />
+ <!-- Main settings screen, setting title for the user to go into the About phone screen -->
+ <string name="about_settings">About</string>
+ <!-- Summary of device info page [CHAR LIMIT=NONE] -->
+ <string name="about_summary">Android <xliff:g id="version" example="6.0">%1$s</xliff:g></string>
+ <!-- Main settings screen, setting summary for the user to go into the About phone screen-->
+ <string name="about_settings_summary">View legal info, status, software version</string>
+ <!-- About phone settings screen, setting option name to go to dialog that shows legal info -->
+ <string name="legal_information">Legal information</string>
+ <!-- About phone settings screen, setting option name to see a list of contributors -->
+ <string name="contributors_title">Contributors</string>
+ <!-- About phone settings screen, setting option name to show Manual [CHAR LIMIT=25] -->
+ <string name="manual">Manual</string>
+ <!-- About phone settings screen, setting option name to show regulatory labels [CHAR LIMIT=25] -->
+ <string name="regulatory_labels">Regulatory labels</string>
+ <!-- About phone settings screen, setting option name to show the safety and regulatory manual [CHAR LIMIT=40] -->
+ <string name="safety_and_regulatory_info">Safety & regulatory manual</string>
+ <!-- Note: this may be replaced by a more-specific title of the activity that will get launched --> <skip />
+ <!-- About phone settings screen, setting option name to see copyright-related info -->
+ <string name="copyright_title">Copyright</string>
+ <!-- Note: this may be replaced by a more-specific title of the activity that will get launched --> <skip />
+ <!-- About phone settings screen, setting option name to see licensing info -->
+ <string name="license_title">License</string>
+ <!-- Note: this may be replaced by a more-specific title of the activity that will get launched --> <skip />
+ <!-- About phone settings screen, setting option name to see terms and conditions -->
+ <string name="terms_title">Terms and conditions</string>
+ <!-- Note: this may be replaced by a more-specific title of the activity that will get launched --> <skip />
+ <!-- About phone settings screen, setting option name to see licensing info for WebView component. [CHAR LIMIT=35] -->
+ <string name="webview_license_title">System WebView License</string>
+ <!-- About phone settings screen, setting option name to see wallpapers attributions -->
+ <string name="wallpaper_attributions">Wallpapers</string>
+ <!-- About phone settings screen, setting option name to see wallpapers attributions values -->
+ <string name="wallpaper_attributions_values">Satellite imagery providers:\n©2014 CNES / Astrium, DigitalGlobe, Bluesky</string>
+
+ <!-- Title for actual Settings license activity. --> <skip />
+ <!-- About phone settings, Legal information setting option name and title of dialog box holding license info -->
+ <string name="settings_license_activity_title">Third-party licenses</string>
+ <!-- About phone settings screen, Open source license dialog message when licenses cannot be loaded -->
+ <string name="settings_license_activity_unavailable">There is a problem loading the licenses.</string>
+ <!-- About phone settings screen, Open source license dialog title until license is fully loaded -->
+ <string name="settings_license_activity_loading">Loading\u2026</string>
+
+
<!-- Date and time settings --><skip />
<!-- Main Settings screen setting option name to go into the date and time settings-->
<string name="date_and_time_settings_title">Date & time</string>
diff --git a/src/com/android/car/settings/common/IconTextLineItem.java b/src/com/android/car/settings/common/IconTextLineItem.java
new file mode 100644
index 0000000..9d270c6
--- /dev/null
+++ b/src/com/android/car/settings/common/IconTextLineItem.java
@@ -0,0 +1,88 @@
+/*
+ * 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
+ */
+
+package com.android.car.settings.common;
+
+import android.annotation.DrawableRes;
+import android.support.v7.widget.RecyclerView;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.android.car.settings.R;
+
+/**
+ * Contains logic for a line item represents icon and texts of a title and a description.
+ */
+public abstract class IconTextLineItem extends TypedPagedListAdapter.LineItem {
+ private final String mTitle;
+ @DrawableRes
+ private final int mIconRes;
+
+ private View.OnClickListener mOnClickListener = (v) -> onClick();
+
+ public IconTextLineItem(String title, @DrawableRes int iconRes) {
+ mTitle = title;
+ mIconRes = iconRes;
+ }
+
+ @Override
+ public int getType() {
+ return ICON_TEXT_TYPE;
+ }
+
+ @Override
+ public void bindViewHolder(RecyclerView.ViewHolder holder) {
+ ViewHolder viewHolder = (ViewHolder) holder;
+ viewHolder.titleView.setText(mTitle);
+ viewHolder.iconView.setImageResource(mIconRes);
+ CharSequence desc = getDesc();
+ if (TextUtils.isEmpty(desc)) {
+ viewHolder.descView.setVisibility(View.GONE);
+ } else {
+ viewHolder.descView.setVisibility(View.VISIBLE);
+ viewHolder.descView.setText(desc);
+ }
+ holder.itemView.setOnClickListener(mOnClickListener);
+ holder.itemView.setEnabled(isEnabled());
+ }
+
+ private static class ViewHolder extends RecyclerView.ViewHolder {
+ final TextView titleView;
+ final TextView descView;
+ final ImageView iconView;
+
+ public ViewHolder(View view) {
+ super(view);
+ iconView = (ImageView) view.findViewById(R.id.icon);
+ titleView = (TextView) view.findViewById(R.id.title);
+ descView = (TextView) view.findViewById(R.id.desc);
+ }
+ }
+
+ public static RecyclerView.ViewHolder createViewHolder(ViewGroup parent) {
+ View v = LayoutInflater.from(parent.getContext())
+ .inflate(R.layout.icon_text_line_item, parent, false);
+ return new ViewHolder(v);
+ }
+
+ public abstract void onClick();
+
+ public abstract boolean isEnabled();
+}
diff --git a/src/com/android/car/settings/common/ListSettingsActivity.java b/src/com/android/car/settings/common/ListSettingsActivity.java
new file mode 100644
index 0000000..dea5cb8
--- /dev/null
+++ b/src/com/android/car/settings/common/ListSettingsActivity.java
@@ -0,0 +1,52 @@
+/*
+ * 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
+ */
+
+package com.android.car.settings.common;
+
+import android.os.Bundle;
+import android.support.car.ui.PagedListView;
+
+import com.android.car.settings.CarSettingActivity;
+import com.android.car.settings.R;
+
+import java.util.ArrayList;
+
+/**
+ * Shows a list of settings
+ */
+public abstract class ListSettingsActivity extends CarSettingActivity {
+
+ private PagedListView mListView;
+ protected TypedPagedListAdapter mPagedListAdapter;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ showMenuIcon();
+ setContentView(R.layout.paged_list);
+
+ mListView = (PagedListView) findViewById(android.R.id.list);
+ mListView.setDefaultItemDecoration(new NoDividerItemDecoration(this));
+ mListView.setDarkMode();
+ mPagedListAdapter = new TypedPagedListAdapter(this /* context */, getLineItems());
+ mListView.setAdapter(mPagedListAdapter);
+ }
+
+ /**
+ * Gets a List of LineItems to show up in this activity.
+ */
+ public abstract ArrayList<TypedPagedListAdapter.LineItem> getLineItems();
+}
diff --git a/src/com/android/car/settings/common/SimpleTextLineItem.java b/src/com/android/car/settings/common/SimpleTextLineItem.java
new file mode 100644
index 0000000..d026410
--- /dev/null
+++ b/src/com/android/car/settings/common/SimpleTextLineItem.java
@@ -0,0 +1,47 @@
+/*
+ * 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
+ */
+
+package com.android.car.settings.common;
+
+import com.android.car.settings.R;
+
+/**
+ * A LineItem that displays a title and description. Not clickable.
+ */
+public class SimpleTextLineItem extends TextLineItem {
+
+ private final CharSequence mDesc;
+
+ public SimpleTextLineItem(CharSequence title, CharSequence desc) {
+ super(title);
+ mDesc = desc;
+ }
+
+ @Override
+ public CharSequence getDesc() {
+ return mDesc;
+ }
+
+ @Override
+ public boolean isEnabled() {
+ return false;
+ }
+
+ @Override
+ public void onClick() {
+ // no-op
+ }
+}
diff --git a/src/com/android/car/settings/common/TextLineItem.java b/src/com/android/car/settings/common/TextLineItem.java
index 642fa93..7a77b9f 100644
--- a/src/com/android/car/settings/common/TextLineItem.java
+++ b/src/com/android/car/settings/common/TextLineItem.java
@@ -27,13 +27,13 @@
* Contains logic for a line item represents text only view of a title and a description.
*/
public abstract class TextLineItem extends TypedPagedListAdapter.LineItem {
- private final String mTitle;
+ private final CharSequence mTitle;
private View.OnClickListener mOnClickListener = (v) -> {
TextLineItem.this.onClick();
};
- public TextLineItem(String title) {
+ public TextLineItem(CharSequence title) {
mTitle = title;
}
diff --git a/src/com/android/car/settings/common/TypedPagedListAdapter.java b/src/com/android/car/settings/common/TypedPagedListAdapter.java
index f6de687..706e955 100644
--- a/src/com/android/car/settings/common/TypedPagedListAdapter.java
+++ b/src/com/android/car/settings/common/TypedPagedListAdapter.java
@@ -53,7 +53,7 @@
public static abstract class LineItem {
@Retention(SOURCE)
- @IntDef({TEXT_TYPE, TOGGLE_TYPE})
+ @IntDef({TEXT_TYPE, TOGGLE_TYPE, ICON_TEXT_TYPE})
public @interface LineItemType {}
// with one title and one description
@@ -62,6 +62,9 @@
// with one tile, one description, and a toggle on the right.
static final int TOGGLE_TYPE = 2;
+ // with one icon, one tile and one description.
+ static final int ICON_TEXT_TYPE = 3;
+
@LineItemType
abstract int getType();
@@ -77,6 +80,8 @@
return TextLineItem.createViewHolder(parent);
case LineItem.TOGGLE_TYPE:
return ToggleLineItem.createViewHolder(parent);
+ case LineItem.ICON_TEXT_TYPE:
+ return IconTextLineItem.createViewHolder(parent);
default:
throw new IllegalStateException("ViewType not supported: " + viewType);
}
diff --git a/src/com/android/car/settings/datetime/DatetimeSettingsActivity.java b/src/com/android/car/settings/datetime/DatetimeSettingsActivity.java
index 052e596..69143e6 100644
--- a/src/com/android/car/settings/datetime/DatetimeSettingsActivity.java
+++ b/src/com/android/car/settings/datetime/DatetimeSettingsActivity.java
@@ -19,24 +19,18 @@
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
-import android.os.Bundle;
import android.provider.Settings;
-import android.support.car.ui.PagedListView;
-import android.support.v7.widget.RecyclerView;
-import com.android.car.settings.CarSettingActivity;
import com.android.car.settings.R;
-import com.android.car.settings.common.NoDividerItemDecoration;
+import com.android.car.settings.common.ListSettingsActivity;
import com.android.car.settings.common.TypedPagedListAdapter;
-import com.android.settingslib.datetime.ZoneGetter;
import java.util.ArrayList;
-import java.util.Calendar;
/**
* Configures date time
*/
-public class DatetimeSettingsActivity extends CarSettingActivity {
+public class DatetimeSettingsActivity extends ListSettingsActivity {
private static final String TAG = "DatetimeSettingsActivity";
private static final IntentFilter TIME_CHANGED_FILTER =
@@ -48,34 +42,22 @@
private final TimeChangedBroadCastReceiver mTimeChangedBroadCastReceiver =
new TimeChangedBroadCastReceiver();
- private PagedListView mListView;
- private TypedPagedListAdapter mPagedListAdapter;
- private final ArrayList<TypedPagedListAdapter.LineItem> mLineItems = new ArrayList<>();
-
@Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- showMenuIcon();
- setContentView(R.layout.paged_list);
-
- mLineItems.add(new DateTimeToggleLineItem(this,
+ public ArrayList<TypedPagedListAdapter.LineItem> getLineItems() {
+ ArrayList<TypedPagedListAdapter.LineItem> lineItems = new ArrayList<>();
+ lineItems.add(new DateTimeToggleLineItem(this,
getString(R.string.date_time_auto),
getString(R.string.date_time_auto_summary),
Settings.Global.AUTO_TIME));
- mLineItems.add(new DateTimeToggleLineItem(this,
+ lineItems.add(new DateTimeToggleLineItem(this,
getString(R.string.zone_auto),
getString(R.string.zone_auto_summary),
Settings.Global.AUTO_TIME_ZONE));
- mLineItems.add(new SetDateLineItem(this));
- mLineItems.add(new SetTimeLineItem(this));
- mLineItems.add(new SetTimeZoneLineItem(this));
- mLineItems.add(new TimeFormatToggleLineItem(this));
-
- mListView = (PagedListView) findViewById(android.R.id.list);
- mListView.setDefaultItemDecoration(new NoDividerItemDecoration(this));
- mListView.setDarkMode();
- mPagedListAdapter = new TypedPagedListAdapter(this /* context */, mLineItems);
- mListView.setAdapter(mPagedListAdapter);
+ lineItems.add(new SetDateLineItem(this));
+ lineItems.add(new SetTimeLineItem(this));
+ lineItems.add(new SetTimeZoneLineItem(this));
+ lineItems.add(new TimeFormatToggleLineItem(this));
+ return lineItems;
}
@Override
diff --git a/src/com/android/car/settings/system/AboutSettingsActivity.java b/src/com/android/car/settings/system/AboutSettingsActivity.java
new file mode 100644
index 0000000..a2ea9ba
--- /dev/null
+++ b/src/com/android/car/settings/system/AboutSettingsActivity.java
@@ -0,0 +1,50 @@
+/*
+ * 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
+ */
+
+package com.android.car.settings.system;
+
+import android.os.Build;
+
+import com.android.car.settings.common.ListSettingsActivity;
+import com.android.car.settings.common.SimpleTextLineItem;
+import com.android.car.settings.common.TypedPagedListAdapter;
+import com.android.car.settings.R;
+import com.android.settingslib.DeviceInfoUtils;
+
+import java.util.ArrayList;
+
+/**
+ * Shows basic info about the system and provide some actions like update, reset etc.
+ */
+public class AboutSettingsActivity extends ListSettingsActivity {
+
+ @Override
+ public ArrayList<TypedPagedListAdapter.LineItem> getLineItems() {
+ ArrayList<TypedPagedListAdapter.LineItem> lineItems = new ArrayList<>();
+ lineItems.add(new SimpleTextLineItem(
+ getText(R.string.model_info), Build.MODEL + DeviceInfoUtils.getMsvSuffix()));
+ lineItems.add(new SimpleTextLineItem(
+ getText(R.string.firmware_version),
+ getString(R.string.about_summary, Build.VERSION.RELEASE)));
+ lineItems.add(new SimpleTextLineItem(
+ getText(R.string.security_patch), DeviceInfoUtils.getSecurityPatch()));
+ lineItems.add(new SimpleTextLineItem(
+ getText(R.string.kernel_version), DeviceInfoUtils.getFormattedKernelVersion()));
+ lineItems.add(new SimpleTextLineItem(
+ getText(R.string.build_number), Build.DISPLAY));
+ return lineItems;
+ }
+}
diff --git a/src/com/android/car/settings/system/AboutSystemLineItem.java b/src/com/android/car/settings/system/AboutSystemLineItem.java
new file mode 100644
index 0000000..0334540
--- /dev/null
+++ b/src/com/android/car/settings/system/AboutSystemLineItem.java
@@ -0,0 +1,54 @@
+/*
+ * 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
+ */
+
+package com.android.car.settings.system;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.Build;
+
+import com.android.car.settings.R;
+import com.android.car.settings.common.IconTextLineItem;
+
+
+/**
+ * A LineItem that displays info about system.
+ */
+class AboutSystemLineItem extends IconTextLineItem {
+
+ private final Context mContext;
+
+ public AboutSystemLineItem(Context context) {
+ super(context.getString(R.string.about_settings), R.drawable.ic_settings_about);
+ mContext = context;
+ }
+
+ @Override
+ public CharSequence getDesc() {
+ return mContext.getString(R.string.about_summary, Build.VERSION.RELEASE);
+ }
+
+ @Override
+ public boolean isEnabled() {
+ return true;
+ }
+
+ @Override
+ public void onClick() {
+ Intent intent = new Intent(mContext, AboutSettingsActivity.class);
+ mContext.startActivity(intent);
+ }
+}
diff --git a/src/com/android/car/settings/system/LegalInfoLineItem.java b/src/com/android/car/settings/system/LegalInfoLineItem.java
new file mode 100644
index 0000000..663d16b
--- /dev/null
+++ b/src/com/android/car/settings/system/LegalInfoLineItem.java
@@ -0,0 +1,51 @@
+/*
+ * 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
+ */
+
+package com.android.car.settings.system;
+
+import android.content.Context;
+
+import com.android.car.settings.R;
+import com.android.car.settings.common.IconTextLineItem;
+
+
+/**
+ * A LineItem that displays info about legal document.
+ */
+class LegalInfoLineItem extends IconTextLineItem {
+
+ private final Context mContext;
+
+ public LegalInfoLineItem(Context context) {
+ super(context.getString(R.string.legal_information), R.drawable.ic_settings_about);
+ mContext = context;
+ }
+
+ @Override
+ public CharSequence getDesc() {
+ return null;
+ }
+
+ @Override
+ public boolean isEnabled() {
+ return true;
+ }
+
+ @Override
+ public void onClick() {
+ // TODO: link to a legal info page.
+ }
+}
diff --git a/src/com/android/car/settings/system/SystemSettingsActivity.java b/src/com/android/car/settings/system/SystemSettingsActivity.java
new file mode 100644
index 0000000..37d1614
--- /dev/null
+++ b/src/com/android/car/settings/system/SystemSettingsActivity.java
@@ -0,0 +1,38 @@
+/*
+ * 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
+ */
+
+package com.android.car.settings.system;
+
+import com.android.car.settings.R;
+import com.android.car.settings.common.ListSettingsActivity;
+import com.android.car.settings.common.TypedPagedListAdapter;
+
+import java.util.ArrayList;
+
+/**
+ * Shows basic info about the system and provide some actions like update, reset etc.
+ */
+public class SystemSettingsActivity extends ListSettingsActivity {
+
+ @Override
+ public ArrayList<TypedPagedListAdapter.LineItem> getLineItems() {
+ ArrayList<TypedPagedListAdapter.LineItem> lineItems = new ArrayList<>();
+ lineItems.add(new SystemUpdatesLineItem(this));
+ lineItems.add(new AboutSystemLineItem(this));
+ lineItems.add(new LegalInfoLineItem(this));
+ return lineItems;
+ }
+}
diff --git a/src/com/android/car/settings/system/SystemUpdatesLineItem.java b/src/com/android/car/settings/system/SystemUpdatesLineItem.java
new file mode 100644
index 0000000..034b9df
--- /dev/null
+++ b/src/com/android/car/settings/system/SystemUpdatesLineItem.java
@@ -0,0 +1,53 @@
+/*
+ * 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
+ */
+
+package com.android.car.settings.system;
+
+import android.content.Context;
+
+import com.android.car.settings.R;
+import com.android.car.settings.common.IconTextLineItem;
+
+
+/**
+ * A LineItem that links to system update.
+ */
+class SystemUpdatesLineItem extends IconTextLineItem {
+ private static final String TAG = "SystemUpdatesLineItem";
+
+ private final Context mContext;
+
+ public SystemUpdatesLineItem(Context context) {
+ super(context.getString(
+ R.string.system_update_settings_list_item_title), R.drawable.ic_system_update);
+ mContext = context;
+ }
+
+ @Override
+ public CharSequence getDesc() {
+ return null;
+ }
+
+ @Override
+ public boolean isEnabled() {
+ return true;
+ }
+
+ @Override
+ public void onClick() {
+ // TODO: trigger system OTA flow
+ }
+}