diff options
Diffstat (limited to 'packages')
163 files changed, 750 insertions, 259 deletions
diff --git a/packages/DocumentsUI/res/layout/fragment_directory.xml b/packages/DocumentsUI/res/layout/fragment_directory.xml index 881349b..f0ab0d1 100644 --- a/packages/DocumentsUI/res/layout/fragment_directory.xml +++ b/packages/DocumentsUI/res/layout/fragment_directory.xml @@ -24,8 +24,8 @@ android:layout_height="match_parent" android:gravity="center" android:text="@string/empty" - android:textAppearance="?android:attr/textAppearanceMedium" - android:visibility="gone" /> + android:visibility="gone" + style="@style/TextAppearance.Medium" /> <ListView android:id="@+id/list" diff --git a/packages/DocumentsUI/res/layout/item_doc_grid.xml b/packages/DocumentsUI/res/layout/item_doc_grid.xml index 8d1fc9a..eea90b5 100644 --- a/packages/DocumentsUI/res/layout/item_doc_grid.xml +++ b/packages/DocumentsUI/res/layout/item_doc_grid.xml @@ -32,12 +32,26 @@ android:layout_weight="1" android:background="#fff"> - <ImageView + <FrameLayout android:id="@android:id/icon" android:layout_width="match_parent" - android:layout_height="match_parent" - android:scaleType="centerInside" - android:contentDescription="@null" /> + android:layout_height="match_parent"> + + <ImageView + android:id="@+id/icon_mime" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:scaleType="centerInside" + android:contentDescription="@null" /> + + <ImageView + android:id="@+id/icon_thumb" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:scaleType="centerCrop" + android:contentDescription="@null" /> + + </FrameLayout> <ImageView android:layout_width="match_parent" @@ -63,8 +77,8 @@ android:layout_weight="1" android:singleLine="true" android:ellipsize="marquee" - android:textAppearance="?android:attr/textAppearanceMedium" - android:textAlignment="viewStart" /> + android:textAlignment="viewStart" + style="@style/TextAppearance.Medium" /> <ImageView android:id="@android:id/icon1" @@ -93,7 +107,7 @@ android:singleLine="true" android:ellipsize="marquee" android:textAlignment="viewStart" - android:textAppearance="?android:attr/textAppearanceSmall" /> + style="@style/TextAppearance.Small" /> <TextView android:id="@+id/size" @@ -105,7 +119,7 @@ android:singleLine="true" android:ellipsize="marquee" android:textAlignment="viewStart" - android:textAppearance="?android:attr/textAppearanceSmall" /> + style="@style/TextAppearance.Small" /> <TextView android:id="@android:id/summary" @@ -117,7 +131,7 @@ android:singleLine="true" android:ellipsize="marquee" android:textAlignment="viewStart" - android:textAppearance="?android:attr/textAppearanceSmall" /> + style="@style/TextAppearance.Small" /> </LinearLayout> diff --git a/packages/DocumentsUI/res/layout/item_doc_list.xml b/packages/DocumentsUI/res/layout/item_doc_list.xml index 8372eed..84fda9d 100644 --- a/packages/DocumentsUI/res/layout/item_doc_list.xml +++ b/packages/DocumentsUI/res/layout/item_doc_list.xml @@ -25,15 +25,29 @@ android:paddingBottom="8dip" android:orientation="horizontal"> - <ImageView + <FrameLayout android:id="@android:id/icon" android:layout_width="@dimen/icon_size" android:layout_height="@dimen/icon_size" android:layout_marginStart="12dp" android:layout_marginEnd="20dp" - android:layout_gravity="center_vertical" - android:scaleType="centerInside" - android:contentDescription="@null" /> + android:layout_gravity="center_vertical"> + + <ImageView + android:id="@+id/icon_mime" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:scaleType="centerInside" + android:contentDescription="@null" /> + + <ImageView + android:id="@+id/icon_thumb" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:scaleType="centerCrop" + android:contentDescription="@null" /> + + </FrameLayout> <LinearLayout android:layout_width="0dip" @@ -54,8 +68,8 @@ android:layout_weight="1" android:singleLine="true" android:ellipsize="marquee" - android:textAppearance="?android:attr/textAppearanceMedium" - android:textAlignment="viewStart" /> + android:textAlignment="viewStart" + style="@style/TextAppearance.Medium" /> <ImageView android:id="@android:id/icon1" @@ -82,7 +96,7 @@ android:singleLine="true" android:ellipsize="marquee" android:textAlignment="viewStart" - android:textAppearance="?android:attr/textAppearanceSmall" /> + style="@style/TextAppearance.Small" /> <TextView android:id="@+id/size" @@ -94,7 +108,7 @@ android:singleLine="true" android:ellipsize="marquee" android:textAlignment="viewStart" - android:textAppearance="?android:attr/textAppearanceSmall" /> + style="@style/TextAppearance.Small" /> <TextView android:id="@android:id/summary" @@ -106,7 +120,7 @@ android:singleLine="true" android:ellipsize="marquee" android:textAlignment="viewStart" - android:textAppearance="?android:attr/textAppearanceSmall" /> + style="@style/TextAppearance.Small" /> </LinearLayout> diff --git a/packages/DocumentsUI/res/layout/item_loading_grid.xml b/packages/DocumentsUI/res/layout/item_loading_grid.xml new file mode 100644 index 0000000..21be137 --- /dev/null +++ b/packages/DocumentsUI/res/layout/item_loading_grid.xml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2013 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. +--> + +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="@dimen/grid_height" + android:minHeight="?android:attr/listPreferredItemHeight" + android:paddingStart="?android:attr/listPreferredItemPaddingStart" + android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" + android:paddingTop="8dip" + android:paddingBottom="8dip" + android:orientation="horizontal"> + + <ProgressBar + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:indeterminate="true" + style="?android:attr/progressBarStyle" /> + +</FrameLayout> diff --git a/packages/DocumentsUI/res/layout/item_loading.xml b/packages/DocumentsUI/res/layout/item_loading_list.xml index 7da71e3..7da71e3 100644 --- a/packages/DocumentsUI/res/layout/item_loading.xml +++ b/packages/DocumentsUI/res/layout/item_loading_list.xml diff --git a/packages/DocumentsUI/res/layout/item_message_grid.xml b/packages/DocumentsUI/res/layout/item_message_grid.xml index 941340e..b3bdd28 100644 --- a/packages/DocumentsUI/res/layout/item_message_grid.xml +++ b/packages/DocumentsUI/res/layout/item_message_grid.xml @@ -16,44 +16,36 @@ <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" - android:layout_height="180dip" + android:layout_height="@dimen/grid_height" + android:paddingTop="?android:attr/listPreferredItemPaddingStart" + android:paddingStart="?android:attr/listPreferredItemPaddingStart" + android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" android:paddingBottom="?android:attr/listPreferredItemPaddingEnd" - android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"> + android:foreground="@drawable/item_background"> - <FrameLayout + <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@color/chip" - android:foreground="@drawable/item_background" - android:duplicateParentState="true"> - - <LinearLayout - android:layout_width="match_parent" - android:layout_height="match_parent" - android:paddingBottom="6dp" - android:orientation="vertical" - android:gravity="center"> - - <ImageView - android:id="@android:id/icon" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:contentDescription="@null" /> - - <TextView - android:id="@android:id/title" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:singleLine="true" - android:ellipsize="marquee" - android:paddingTop="6dp" - android:paddingStart="?android:attr/listPreferredItemPaddingStart" - android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" - android:textAppearance="?android:attr/textAppearanceSmall" - android:textAlignment="viewStart" /> - - </LinearLayout> - - </FrameLayout> + android:orientation="vertical" + android:gravity="center"> + + <ImageView + android:id="@android:id/icon" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:contentDescription="@null" /> + + <TextView + android:id="@android:id/title" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center" + android:maxLines="4" + android:ellipsize="end" + android:paddingTop="6dp" + android:textAppearance="?android:attr/textAppearanceSmall" + android:textAlignment="viewStart" /> + + </LinearLayout> </FrameLayout> diff --git a/packages/DocumentsUI/res/layout/item_message_list.xml b/packages/DocumentsUI/res/layout/item_message_list.xml index dda3c80..ffda98c 100644 --- a/packages/DocumentsUI/res/layout/item_message_list.xml +++ b/packages/DocumentsUI/res/layout/item_message_list.xml @@ -39,9 +39,9 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" - android:singleLine="true" - android:ellipsize="marquee" - android:textAppearance="?android:attr/textAppearanceMedium" - android:textAlignment="viewStart" /> + android:maxLines="2" + android:ellipsize="end" + android:textAlignment="viewStart" + android:textAppearance="?android:attr/textAppearanceSmall" /> </LinearLayout> diff --git a/packages/DocumentsUI/res/layout/item_root.xml b/packages/DocumentsUI/res/layout/item_root.xml index ce97b57..98d78da 100644 --- a/packages/DocumentsUI/res/layout/item_root.xml +++ b/packages/DocumentsUI/res/layout/item_root.xml @@ -43,8 +43,8 @@ android:layout_height="wrap_content" android:singleLine="true" android:ellipsize="marquee" - android:textAppearance="?android:attr/textAppearanceMedium" - android:textAlignment="viewStart" /> + android:textAlignment="viewStart" + style="@style/TextAppearance.Medium" /> <TextView android:id="@android:id/summary" @@ -52,8 +52,8 @@ android:layout_height="wrap_content" android:singleLine="true" android:ellipsize="marquee" - android:textAppearance="?android:attr/textAppearanceSmall" - android:textAlignment="viewStart" /> + android:textAlignment="viewStart" + style="@style/TextAppearance.Small" /> </LinearLayout> diff --git a/packages/DocumentsUI/res/layout/item_root_header.xml b/packages/DocumentsUI/res/layout/item_root_header.xml index 127b254..6b9857d 100644 --- a/packages/DocumentsUI/res/layout/item_root_header.xml +++ b/packages/DocumentsUI/res/layout/item_root_header.xml @@ -14,6 +14,14 @@ limitations under the License. --> -<TextView xmlns:android="http://schemas.android.com/apk/res/android" - android:id="@android:id/title" - style="?android:attr/listSeparatorTextViewStyle" /> +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingTop="12dp"> + + <TextView + android:id="@android:id/title" + android:textColor="?android:attr/textColorTertiary" + style="?android:attr/listSeparatorTextViewStyle" /> + +</FrameLayout> diff --git a/packages/DocumentsUI/res/layout/item_title.xml b/packages/DocumentsUI/res/layout/item_title.xml index 9594e4e..7eb100a 100644 --- a/packages/DocumentsUI/res/layout/item_title.xml +++ b/packages/DocumentsUI/res/layout/item_title.xml @@ -38,7 +38,7 @@ android:layout_height="wrap_content" android:singleLine="true" android:ellipsize="marquee" - android:textAppearance="?android:attr/textAppearanceMedium" - android:textAlignment="viewStart" /> + android:textAlignment="viewStart" + style="@style/TextAppearance.Medium" /> </LinearLayout> diff --git a/packages/DocumentsUI/res/menu/mode_directory.xml b/packages/DocumentsUI/res/menu/mode_directory.xml index 624e024..0a3645f 100644 --- a/packages/DocumentsUI/res/menu/mode_directory.xml +++ b/packages/DocumentsUI/res/menu/mode_directory.xml @@ -21,12 +21,12 @@ android:showAsAction="always" /> <item android:id="@+id/menu_share" - android:icon="@android:drawable/ic_menu_share" + android:icon="@drawable/ic_menu_share" android:title="@string/menu_share" android:showAsAction="always" /> <item android:id="@+id/menu_delete" - android:icon="@android:drawable/ic_menu_delete" + android:icon="@drawable/ic_menu_delete" android:title="@string/menu_delete" android:showAsAction="always" /> </menu> diff --git a/packages/DocumentsUI/res/values-ro/strings.xml b/packages/DocumentsUI/res/values-ro/strings.xml index 06ab5ff..e0c996f 100644 --- a/packages/DocumentsUI/res/values-ro/strings.xml +++ b/packages/DocumentsUI/res/values-ro/strings.xml @@ -50,5 +50,5 @@ <string name="toast_failed_delete" msgid="2180678019407244069">"Unele documente nu au putut fi șterse"</string> <string name="more" msgid="7117420986529297171">"Mai multe"</string> <string name="loading" msgid="7933681260296021180">"Se încarcă…"</string> - <string name="share_via" msgid="8966594246261344259">"Distribuiţi prin"</string> + <string name="share_via" msgid="8966594246261344259">"Distribuiți prin"</string> </resources> diff --git a/packages/DocumentsUI/res/values-ru/strings.xml b/packages/DocumentsUI/res/values-ru/strings.xml index 3b9c3f3..32368d8 100644 --- a/packages/DocumentsUI/res/values-ru/strings.xml +++ b/packages/DocumentsUI/res/values-ru/strings.xml @@ -50,5 +50,5 @@ <string name="toast_failed_delete" msgid="2180678019407244069">"Не удалось удалить некоторые документы"</string> <string name="more" msgid="7117420986529297171">"Ещё"</string> <string name="loading" msgid="7933681260296021180">"Загрузка…"</string> - <string name="share_via" msgid="8966594246261344259">"Способ отправки"</string> + <string name="share_via" msgid="8966594246261344259">"Поделиться"</string> </resources> diff --git a/packages/DocumentsUI/res/values-sr/strings.xml b/packages/DocumentsUI/res/values-sr/strings.xml index eaec4e5..1575c5b 100644 --- a/packages/DocumentsUI/res/values-sr/strings.xml +++ b/packages/DocumentsUI/res/values-sr/strings.xml @@ -50,5 +50,5 @@ <string name="toast_failed_delete" msgid="2180678019407244069">"Није могуће избрисати неке документе"</string> <string name="more" msgid="7117420986529297171">"Још"</string> <string name="loading" msgid="7933681260296021180">"Учитавање…"</string> - <string name="share_via" msgid="8966594246261344259">"Дељење преко"</string> + <string name="share_via" msgid="8966594246261344259">"Делите преко"</string> </resources> diff --git a/packages/DocumentsUI/res/values-zh-rCN/strings.xml b/packages/DocumentsUI/res/values-zh-rCN/strings.xml index 7b8f2f9..8246372 100644 --- a/packages/DocumentsUI/res/values-zh-rCN/strings.xml +++ b/packages/DocumentsUI/res/values-zh-rCN/strings.xml @@ -50,5 +50,5 @@ <string name="toast_failed_delete" msgid="2180678019407244069">"无法删除部分文档"</string> <string name="more" msgid="7117420986529297171">"更多"</string> <string name="loading" msgid="7933681260296021180">"正在加载..."</string> - <string name="share_via" msgid="8966594246261344259">"分享方式:"</string> + <string name="share_via" msgid="8966594246261344259">"分享方式"</string> </resources> diff --git a/packages/DocumentsUI/res/values/strings.xml b/packages/DocumentsUI/res/values/strings.xml index f4a822d..682ae4a 100644 --- a/packages/DocumentsUI/res/values/strings.xml +++ b/packages/DocumentsUI/res/values/strings.xml @@ -15,54 +15,83 @@ --> <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- Title of the documents application [CHAR LIMIT=32] --> <string name="app_label">Documents</string> + <!-- Action bar title prompting user to choose a location to open a document from [CHAR LIMIT=32] --> <string name="title_open">Open from</string> + <!-- Action bar title prompting user to choose a location to save a document to [CHAR LIMIT=32] --> <string name="title_save">Save to</string> + <!-- Menu item that creates a new directory/folder at the current location [CHAR LIMIT=24] --> <string name="menu_create_dir">Create folder</string> + <!-- Menu item that switches view to show documents as a large-format grid of thumbnails [CHAR LIMIT=24] --> <string name="menu_grid">Grid view</string> + <!-- Menu item that switches view to show documents as a list [CHAR LIMIT=24] --> <string name="menu_list">List view</string> + <!-- Menu item that switches the criteria with which documents are sorted [CHAR LIMIT=24] --> <string name="menu_sort">Sort by</string> + <!-- Menu item that enters a mode to search for documents [CHAR LIMIT=24] --> <string name="menu_search">Search</string> + <!-- Menu item that enters activity to change settings [CHAR LIMIT=24] --> <string name="menu_settings">Settings</string> + <!-- Menu item title that opens the selected documents [CHAR LIMIT=24] --> <string name="menu_open">Open</string> + <!-- Menu item title that saves the current document [CHAR LIMIT=24] --> <string name="menu_save">Save</string> + <!-- Menu item title that shares the selected documents [CHAR LIMIT=24] --> <string name="menu_share">Share</string> + <!-- Menu item title that deletes the selected documents [CHAR LIMIT=24] --> <string name="menu_delete">Delete</string> + <!-- Action mode title summarizing the number of documents selected [CHAR LIMIT=32] --> <string name="mode_selected_count"><xliff:g id="count" example="3">%1$d</xliff:g> selected</string> + <!-- Mode that sorts documents by their display name alphabetically [CHAR LIMIT=24] --> <string name="sort_name">By name</string> + <!-- Mode that sorts documents by their last modified time in descending order; most recent first [CHAR LIMIT=24] --> <string name="sort_date">By date modified</string> + <!-- Mode that sorts documents by their file size in descending order; largest first [CHAR LIMIT=24] --> <string name="sort_size">By size</string> + <!-- Accessibility title to open the drawer showing all roots where documents can be stored [CHAR LIMIT=32] --> <string name="drawer_open">Show roots</string> + <!-- Accessibility title to close the drawer showing all roots where documents can be stored [CHAR LIMIT=32] --> <string name="drawer_close">Hide roots</string> + <!-- Toast shown when saving a document failed with an error [CHAR LIMIT=48] --> <string name="save_error">Failed to save document</string> + <!-- Title of storage root location that contains recently modified or used documents [CHAR LIMIT=24] --> <string name="root_recent">Recent</string> + <!-- Subtitle of storage root indicating the total free space available, in bytes [CHAR LIMIT=24] --> <string name="root_available_bytes"><xliff:g id="size" example="3GB">%1$s</xliff:g> free</string> - <string name="root_type_service">Services</string> + <!-- Header title for list of storage roots that contains cloud services [CHAR LIMIT=24] --> + <string name="root_type_service">Storage services</string> + <!-- Header title for list of storage roots that contains shortcuts to documents that may be available elsewhere [CHAR LIMIT=24] --> <string name="root_type_shortcut">Shortcuts</string> + <!-- Header title for list of storage roots that contains physical devices [CHAR LIMIT=24] --> <string name="root_type_device">Devices</string> + <!-- Header title for list of additional apps that can provide documents [CHAR LIMIT=24] --> <string name="root_type_apps">More apps</string> + <!-- Title for setting that will show all advanced storage devices [CHAR LIMIT=32] --> <string name="pref_advanced_devices">Display advanced devices</string> + <!-- Title for setting that will show file sizes for all documents [CHAR LIMIT=32] --> <string name="pref_file_size">Display file size</string> <string name="pref_device_size">Display device size</string> + <!-- Text shown when a directory of documents is empty [CHAR LIMIT=24] --> <string name="empty">No items</string> + <!-- Toast shown when no app can be found to open the selected document [CHAR LIMIT=48] --> <string name="toast_no_application">Can\'t open file</string> + <!-- Toast shown when some of the selected documents failed to be deleted [CHAR LIMIT=48] --> <string name="toast_failed_delete">Unable to delete some documents</string> - <string name="more">More</string> - <string name="loading">Loading\u2026</string> - + <!-- Title of dialog when prompting user to select an app to share documents with [CHAR LIMIT=32] --> <string name="share_via">Share via</string> </resources> diff --git a/packages/DocumentsUI/res/values/styles.xml b/packages/DocumentsUI/res/values/styles.xml new file mode 100644 index 0000000..59fbd6f --- /dev/null +++ b/packages/DocumentsUI/res/values/styles.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2013 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. +--> + +<resources> + <style name="TextAppearance" /> + + <style name="TextAppearance.Medium"> + <item name="android:textAppearance">?android:attr/textAppearanceMedium</item> + <item name="android:textColor">?android:attr/textColorSecondary</item> + </style> + + <style name="TextAppearance.Small"> + <item name="android:textAppearance">?android:attr/textAppearanceSmall</item> + <item name="android:textColor">?android:attr/textColorTertiary</item> + </style> +</resources> diff --git a/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java b/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java index f9ac3f3..ba5a511 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java +++ b/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java @@ -31,15 +31,18 @@ import android.app.FragmentManager; import android.app.FragmentTransaction; import android.app.LoaderManager.LoaderCallbacks; import android.content.ContentResolver; +import android.content.ContentValues; import android.content.Context; import android.content.Intent; import android.content.Loader; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.Point; +import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; +import android.os.CancellationSignal; import android.provider.DocumentsContract; import android.provider.DocumentsContract.Document; import android.text.format.DateUtils; @@ -55,6 +58,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.AbsListView.MultiChoiceModeListener; +import android.widget.AbsListView.RecyclerListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; @@ -65,6 +69,7 @@ import android.widget.TextView; import android.widget.Toast; import com.android.documentsui.DocumentsActivity.State; +import com.android.documentsui.RecentsProvider.StateColumns; import com.android.documentsui.model.DocumentInfo; import com.android.documentsui.model.RootInfo; import com.android.internal.util.Predicate; @@ -95,6 +100,7 @@ public class DirectoryFragment extends Fragment { private int mLastMode = MODE_UNKNOWN; private int mLastSortOrder = SORT_ORDER_UNKNOWN; + private boolean mLastShowSize = false; private Point mThumbSize; @@ -160,10 +166,12 @@ public class DirectoryFragment extends Fragment { mListView = (ListView) view.findViewById(R.id.list); mListView.setOnItemClickListener(mItemListener); mListView.setMultiChoiceModeListener(mMultiListener); + mListView.setRecyclerListener(mRecycleListener); mGridView = (GridView) view.findViewById(R.id.grid); mGridView.setOnItemClickListener(mItemListener); mGridView.setMultiChoiceModeListener(mMultiListener); + mGridView.setRecyclerListener(mRecycleListener); return view; } @@ -190,11 +198,19 @@ public class DirectoryFragment extends Fragment { case TYPE_NORMAL: contentsUri = DocumentsContract.buildChildDocumentsUri( doc.authority, doc.documentId); - return new DirectoryLoader(context, root, doc, contentsUri); + if (state.action == ACTION_MANAGE) { + contentsUri = DocumentsContract.setManageMode(contentsUri); + } + return new DirectoryLoader( + context, mType, root, doc, contentsUri, state.userSortOrder); case TYPE_SEARCH: contentsUri = DocumentsContract.buildSearchDocumentsUri( doc.authority, doc.documentId, query); - return new DirectoryLoader(context, root, doc, contentsUri); + if (state.action == ACTION_MANAGE) { + contentsUri = DocumentsContract.setManageMode(contentsUri); + } + return new DirectoryLoader( + context, mType, root, doc, contentsUri, state.userSortOrder); case TYPE_RECENT_OPEN: final RootsCache roots = DocumentsApplication.getRootsCache(context); final List<RootInfo> matchingRoots = roots.getMatchingRoots(state); @@ -212,14 +228,14 @@ public class DirectoryFragment extends Fragment { // Push latest state up to UI // TODO: if mode change was racing with us, don't overwrite it - state.mode = result.mode; - state.sortOrder = result.sortOrder; + state.derivedMode = result.mode; + state.derivedSortOrder = result.sortOrder; ((DocumentsActivity) context).onStateChanged(); updateDisplayState(); - if (mLastSortOrder != result.sortOrder) { - mLastSortOrder = result.sortOrder; + if (mLastSortOrder != state.derivedSortOrder) { + mLastSortOrder = state.derivedSortOrder; mListView.smoothScrollToPosition(0); mGridView.smoothScrollToPosition(0); } @@ -244,12 +260,36 @@ public class DirectoryFragment extends Fragment { } public void onUserSortOrderChanged() { - // User change always triggers reload + // Sort order change always triggers reload; we'll trigger state change + // on the flip side. getLoaderManager().restartLoader(mLoaderId, null, mCallbacks); } public void onUserModeChanged() { - // Mode change is just display; no need to reload + final ContentResolver resolver = getActivity().getContentResolver(); + final State state = getDisplayState(this); + + final RootInfo root = getArguments().getParcelable(EXTRA_ROOT); + final DocumentInfo doc = getArguments().getParcelable(EXTRA_DOC); + + final Uri stateUri = RecentsProvider.buildState( + root.authority, root.rootId, doc.documentId); + final ContentValues values = new ContentValues(); + values.put(StateColumns.MODE, state.userMode); + + new AsyncTask<Void, Void, Void>() { + @Override + protected Void doInBackground(Void... params) { + resolver.insert(stateUri, values); + return null; + } + }.execute(); + + // Mode change is just visual change; no need to kick loader, and + // deliver change event immediately. + state.derivedMode = state.userMode; + ((DocumentsActivity) getActivity()).onStateChanged(); + updateDisplayState(); } @@ -258,11 +298,12 @@ public class DirectoryFragment extends Fragment { mFilter = new MimePredicate(state.acceptMimes); - if (mLastMode == state.mode) return; - mLastMode = state.mode; + if (mLastMode == state.derivedMode && mLastShowSize == state.showSize) return; + mLastMode = state.derivedMode; + mLastShowSize = state.showSize; - mListView.setVisibility(state.mode == MODE_LIST ? View.VISIBLE : View.GONE); - mGridView.setVisibility(state.mode == MODE_GRID ? View.VISIBLE : View.GONE); + mListView.setVisibility(state.derivedMode == MODE_LIST ? View.VISIBLE : View.GONE); + mGridView.setVisibility(state.derivedMode == MODE_GRID ? View.VISIBLE : View.GONE); final int choiceMode; if (state.allowMultiple) { @@ -272,7 +313,7 @@ public class DirectoryFragment extends Fragment { } final int thumbSize; - if (state.mode == MODE_GRID) { + if (state.derivedMode == MODE_GRID) { thumbSize = getResources().getDimensionPixelSize(R.dimen.grid_width); mListView.setAdapter(null); mListView.setChoiceMode(ListView.CHOICE_MODE_NONE); @@ -281,7 +322,7 @@ public class DirectoryFragment extends Fragment { mGridView.setNumColumns(GridView.AUTO_FIT); mGridView.setChoiceMode(choiceMode); mCurrentView = mGridView; - } else if (state.mode == MODE_LIST) { + } else if (state.derivedMode == MODE_LIST) { thumbSize = getResources().getDimensionPixelSize(R.dimen.icon_size); mGridView.setAdapter(null); mGridView.setChoiceMode(ListView.CHOICE_MODE_NONE); @@ -289,7 +330,7 @@ public class DirectoryFragment extends Fragment { mListView.setChoiceMode(choiceMode); mCurrentView = mListView; } else { - throw new IllegalStateException("Unknown state " + state.mode); + throw new IllegalStateException("Unknown state " + state.derivedMode); } mThumbSize = new Point(thumbSize, thumbSize); @@ -397,6 +438,20 @@ public class DirectoryFragment extends Fragment { } }; + private RecyclerListener mRecycleListener = new RecyclerListener() { + @Override + public void onMovedToScrapHeap(View view) { + final ImageView iconThumb = (ImageView) view.findViewById(R.id.icon_thumb); + if (iconThumb != null) { + final ThumbnailAsyncTask oldTask = (ThumbnailAsyncTask) iconThumb.getTag(); + if (oldTask != null) { + oldTask.reallyCancel(); + iconThumb.setTag(null); + } + } + } + }; + private void onShareDocuments(List<DocumentInfo> docs) { Intent intent; if (docs.size() == 1) { @@ -472,7 +527,7 @@ public class DirectoryFragment extends Fragment { } } - private static class LoadingFooter extends Footer { + private class LoadingFooter extends Footer { public LoadingFooter() { super(1); } @@ -480,10 +535,19 @@ public class DirectoryFragment extends Fragment { @Override public View getView(View convertView, ViewGroup parent) { final Context context = parent.getContext(); + final State state = getDisplayState(DirectoryFragment.this); + if (convertView == null) { final LayoutInflater inflater = LayoutInflater.from(context); - convertView = inflater.inflate(R.layout.item_loading, parent, false); + if (state.derivedMode == MODE_LIST) { + convertView = inflater.inflate(R.layout.item_loading_list, parent, false); + } else if (state.derivedMode == MODE_GRID) { + convertView = inflater.inflate(R.layout.item_loading_grid, parent, false); + } else { + throw new IllegalStateException(); + } } + return convertView; } } @@ -505,9 +569,9 @@ public class DirectoryFragment extends Fragment { if (convertView == null) { final LayoutInflater inflater = LayoutInflater.from(context); - if (state.mode == MODE_LIST) { + if (state.derivedMode == MODE_LIST) { convertView = inflater.inflate(R.layout.item_message_list, parent, false); - } else if (state.mode == MODE_GRID) { + } else if (state.derivedMode == MODE_GRID) { convertView = inflater.inflate(R.layout.item_message_grid, parent, false); } else { throw new IllegalStateException(); @@ -582,9 +646,9 @@ public class DirectoryFragment extends Fragment { if (convertView == null) { final LayoutInflater inflater = LayoutInflater.from(context); - if (state.mode == MODE_LIST) { + if (state.derivedMode == MODE_LIST) { convertView = inflater.inflate(R.layout.item_doc_list, parent, false); - } else if (state.mode == MODE_GRID) { + } else if (state.derivedMode == MODE_GRID) { convertView = inflater.inflate(R.layout.item_doc_grid, parent, false); } else { throw new IllegalStateException(); @@ -604,7 +668,9 @@ public class DirectoryFragment extends Fragment { final String docSummary = getCursorString(cursor, Document.COLUMN_SUMMARY); final long docSize = getCursorLong(cursor, Document.COLUMN_SIZE); - final ImageView icon = (ImageView) convertView.findViewById(android.R.id.icon); + final View icon = convertView.findViewById(android.R.id.icon); + final ImageView iconMime = (ImageView) convertView.findViewById(R.id.icon_mime); + final ImageView iconThumb = (ImageView) convertView.findViewById(R.id.icon_thumb); final TextView title = (TextView) convertView.findViewById(android.R.id.title); final View line2 = convertView.findViewById(R.id.line2); final ImageView icon1 = (ImageView) convertView.findViewById(android.R.id.icon1); @@ -612,30 +678,49 @@ public class DirectoryFragment extends Fragment { final TextView date = (TextView) convertView.findViewById(R.id.date); final TextView size = (TextView) convertView.findViewById(R.id.size); - final ThumbnailAsyncTask oldTask = (ThumbnailAsyncTask) icon.getTag(); + final ThumbnailAsyncTask oldTask = (ThumbnailAsyncTask) iconThumb.getTag(); if (oldTask != null) { - oldTask.cancel(false); + oldTask.reallyCancel(); + iconThumb.setTag(null); } + iconMime.animate().cancel(); + iconThumb.animate().cancel(); + final boolean supportsThumbnail = (docFlags & Document.FLAG_SUPPORTS_THUMBNAIL) != 0; - final boolean allowThumbnail = (state.mode == MODE_GRID) + final boolean allowThumbnail = (state.derivedMode == MODE_GRID) || MimePredicate.mimeMatches(LIST_THUMBNAIL_MIMES, docMimeType); + boolean cacheHit = false; if (supportsThumbnail && allowThumbnail) { final Uri uri = DocumentsContract.buildDocumentUri(docAuthority, docId); final Bitmap cachedResult = thumbs.get(uri); if (cachedResult != null) { - icon.setImageBitmap(cachedResult); + iconThumb.setImageBitmap(cachedResult); + cacheHit = true; } else { - final ThumbnailAsyncTask task = new ThumbnailAsyncTask(icon, mThumbSize); - icon.setImageBitmap(null); - icon.setTag(task); - task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, uri); + iconThumb.setImageDrawable(null); + final ThumbnailAsyncTask task = new ThumbnailAsyncTask( + uri, iconMime, iconThumb, mThumbSize); + iconThumb.setTag(task); + task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } - } else if (docIcon != 0) { - icon.setImageDrawable(IconUtils.loadPackageIcon(context, docAuthority, docIcon)); + } + + // Always throw MIME icon into place, even when a thumbnail is being + // loaded in background. + if (cacheHit) { + iconMime.setAlpha(0f); + iconThumb.setAlpha(1f); } else { - icon.setImageDrawable(IconUtils.loadMimeIcon(context, docMimeType)); + iconMime.setAlpha(1f); + iconThumb.setAlpha(0f); + if (docIcon != 0) { + iconMime.setImageDrawable( + IconUtils.loadPackageIcon(context, docAuthority, docIcon)); + } else { + iconMime.setImageDrawable(IconUtils.loadMimeIcon(context, docMimeType)); + } } title.setText(docDisplayName); @@ -644,12 +729,19 @@ public class DirectoryFragment extends Fragment { if (mType == TYPE_RECENT_OPEN) { final RootInfo root = roots.getRoot(docAuthority, docRootId); + final Drawable iconDrawable = root.loadIcon(context); icon1.setVisibility(View.VISIBLE); - icon1.setImageDrawable(root.loadIcon(context)); - summary.setText(root.getDirectoryString()); - summary.setVisibility(View.VISIBLE); - summary.setTextAlignment(TextView.TEXT_ALIGNMENT_TEXT_END); - hasLine2 = true; + icon1.setImageDrawable(iconDrawable); + + if (iconDrawable != null && roots.isIconUnique(root)) { + // No summary needed if icon speaks for itself + summary.setVisibility(View.INVISIBLE); + } else { + summary.setText(root.getDirectoryString()); + summary.setVisibility(View.VISIBLE); + summary.setTextAlignment(TextView.TEXT_ALIGNMENT_TEXT_END); + hasLine2 = true; + } } else { icon1.setVisibility(View.GONE); if (docSummary != null) { @@ -734,32 +826,39 @@ public class DirectoryFragment extends Fragment { } private static class ThumbnailAsyncTask extends AsyncTask<Uri, Void, Bitmap> { - private final ImageView mTarget; + private final Uri mUri; + private final ImageView mIconMime; + private final ImageView mIconThumb; private final Point mThumbSize; + private final CancellationSignal mSignal; - public ThumbnailAsyncTask(ImageView target, Point thumbSize) { - mTarget = target; + public ThumbnailAsyncTask( + Uri uri, ImageView iconMime, ImageView iconThumb, Point thumbSize) { + mUri = uri; + mIconMime = iconMime; + mIconThumb = iconThumb; mThumbSize = thumbSize; + mSignal = new CancellationSignal(); } - @Override - protected void onPreExecute() { - mTarget.setTag(this); + public void reallyCancel() { + cancel(false); + mSignal.cancel(); } @Override protected Bitmap doInBackground(Uri... params) { - final Context context = mTarget.getContext(); - final Uri uri = params[0]; + final Context context = mIconThumb.getContext(); Bitmap result = null; try { + // TODO: switch to using unstable provider result = DocumentsContract.getDocumentThumbnail( - context.getContentResolver(), uri, mThumbSize, null); + context.getContentResolver(), mUri, mThumbSize, mSignal); if (result != null) { final ThumbnailCache thumbs = DocumentsApplication.getThumbnailsCache( context, mThumbSize); - thumbs.put(uri, result); + thumbs.put(mUri, result); } } catch (Exception e) { Log.w(TAG, "Failed to load thumbnail: " + e); @@ -769,9 +868,14 @@ public class DirectoryFragment extends Fragment { @Override protected void onPostExecute(Bitmap result) { - if (mTarget.getTag() == this) { - mTarget.setImageBitmap(result); - mTarget.setTag(null); + if (mIconThumb.getTag() == this && result != null) { + mIconThumb.setTag(null); + mIconThumb.setImageBitmap(result); + + mIconMime.setAlpha(1f); + mIconMime.animate().alpha(0f).start(); + mIconThumb.setAlpha(0f); + mIconThumb.animate().alpha(1f).start(); } } } diff --git a/packages/DocumentsUI/src/com/android/documentsui/DirectoryLoader.java b/packages/DocumentsUI/src/com/android/documentsui/DirectoryLoader.java index 72dfa30..334e262 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/DirectoryLoader.java +++ b/packages/DocumentsUI/src/com/android/documentsui/DirectoryLoader.java @@ -62,18 +62,23 @@ class DirectoryResult implements AutoCloseable { public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> { private final ForceLoadContentObserver mObserver = new ForceLoadContentObserver(); + private final int mType; private final RootInfo mRoot; private final DocumentInfo mDoc; private final Uri mUri; + private final int mUserSortOrder; private CancellationSignal mSignal; private DirectoryResult mResult; - public DirectoryLoader(Context context, RootInfo root, DocumentInfo doc, Uri uri) { + public DirectoryLoader(Context context, int type, RootInfo root, DocumentInfo doc, Uri uri, + int userSortOrder) { super(context); + mType = type; mRoot = root; mDoc = doc; mUri = uri; + mUserSortOrder = userSortOrder; } @Override @@ -91,7 +96,6 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> { final DirectoryResult result = new DirectoryResult(); int userMode = State.MODE_UNKNOWN; - int userSortOrder = State.SORT_ORDER_UNKNOWN; // Pick up any custom modes requested by user Cursor cursor = null; @@ -101,7 +105,6 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> { cursor = resolver.query(stateUri, null, null, null, null); if (cursor.moveToFirst()) { userMode = getCursorInt(cursor, StateColumns.MODE); - userSortOrder = getCursorInt(cursor, StateColumns.SORT_ORDER); } } finally { IoUtils.closeQuietly(cursor); @@ -117,8 +120,8 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> { } } - if (userSortOrder != State.SORT_ORDER_UNKNOWN) { - result.sortOrder = userSortOrder; + if (mUserSortOrder != State.SORT_ORDER_UNKNOWN) { + result.sortOrder = mUserSortOrder; } else { if ((mDoc.flags & Document.FLAG_DIR_PREFERS_LAST_MODIFIED) != 0) { result.sortOrder = State.SORT_ORDER_LAST_MODIFIED; @@ -127,7 +130,12 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> { } } - Log.d(TAG, "userMode=" + userMode + ", userSortOrder=" + userSortOrder + " --> mode=" + // Search always uses ranking from provider + if (mType == DirectoryFragment.TYPE_SEARCH) { + result.sortOrder = State.SORT_ORDER_UNKNOWN; + } + + Log.d(TAG, "userMode=" + userMode + ", userSortOrder=" + mUserSortOrder + " --> mode=" + result.mode + ", sortOrder=" + result.sortOrder); try { @@ -136,11 +144,18 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> { mUri, null, null, null, getQuerySortOrder(result.sortOrder), mSignal); cursor.registerContentObserver(mObserver); - final Cursor withRoot = new RootCursorWrapper( - mUri.getAuthority(), mRoot.rootId, cursor, -1); - final Cursor sorted = new SortingCursorWrapper(withRoot, result.sortOrder); + cursor = new RootCursorWrapper(mUri.getAuthority(), mRoot.rootId, cursor, -1); + + if (mType == DirectoryFragment.TYPE_SEARCH) { + // Filter directories out of search results, for now + cursor = new FilteringCursorWrapper(cursor, null, new String[] { + Document.MIME_TYPE_DIR }); + } else { + // Normal directories should have sorting applied + cursor = new SortingCursorWrapper(cursor, result.sortOrder); + } - result.cursor = sorted; + result.cursor = cursor; } catch (Exception e) { Log.d(TAG, "Failed to query", e); result.exception = e; diff --git a/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java b/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java index fe39800..e89d388 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java +++ b/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java @@ -50,6 +50,7 @@ import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; +import android.view.MenuItem.OnActionExpandListener; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; @@ -87,6 +88,7 @@ public class DocumentsActivity extends Activity { private static final String EXTRA_STATE = "state"; private boolean mIgnoreNextNavigation; + private boolean mIgnoreNextCollapse; private RootsCache mRoots; private State mState; @@ -171,10 +173,6 @@ public class DocumentsActivity extends Activity { mState.showAdvanced = SettingsActivity.getDisplayAdvancedDevices(this); if (mState.action == ACTION_MANAGE) { - mState.sortOrder = SORT_ORDER_LAST_MODIFIED; - } - - if (mState.action == ACTION_MANAGE) { final Uri uri = intent.getData(); final String rootId = DocumentsContract.getRootId(uri); final RootInfo root = mRoots.getRoot(uri.getAuthority(), rootId); @@ -238,12 +236,14 @@ public class DocumentsActivity extends Activity { public void onDrawerOpened(View drawerView) { mDrawerToggle.onDrawerOpened(drawerView); updateActionBar(); + invalidateOptionsMenu(); } @Override public void onDrawerClosed(View drawerView) { mDrawerToggle.onDrawerClosed(drawerView); updateActionBar(); + invalidateOptionsMenu(); } @Override @@ -309,7 +309,6 @@ public class DocumentsActivity extends Activity { public boolean onQueryTextSubmit(String query) { mState.currentSearch = query; onCurrentDirectoryChanged(); - mSearchView.setIconified(true); return true; } @@ -319,12 +318,22 @@ public class DocumentsActivity extends Activity { } }); - mSearchView.setOnCloseListener(new OnCloseListener() { + searchMenu.setOnActionExpandListener(new OnActionExpandListener() { @Override - public boolean onClose() { + public boolean onMenuItemActionExpand(MenuItem item) { + return true; + } + + @Override + public boolean onMenuItemActionCollapse(MenuItem item) { + if (mIgnoreNextCollapse) { + mIgnoreNextCollapse = false; + return true; + } + mState.currentSearch = null; onCurrentDirectoryChanged(); - return false; + return true; } }); @@ -346,16 +355,39 @@ public class DocumentsActivity extends Activity { final MenuItem list = menu.findItem(R.id.menu_list); final MenuItem settings = menu.findItem(R.id.menu_settings); + // Open drawer means we hide most actions + if (mDrawerLayout.isDrawerOpen(mRootsContainer)) { + createDir.setVisible(false); + search.setVisible(false); + sort.setVisible(false); + grid.setVisible(false); + list.setVisible(false); + mIgnoreNextCollapse = true; + search.collapseActionView(); + return true; + } + if (cwd != null) { sort.setVisible(true); - grid.setVisible(mState.mode != MODE_GRID); - list.setVisible(mState.mode != MODE_LIST); + grid.setVisible(mState.derivedMode != MODE_GRID); + list.setVisible(mState.derivedMode != MODE_LIST); } else { sort.setVisible(false); grid.setVisible(false); list.setVisible(false); } + if (mState.currentSearch != null) { + // Search uses backend ranking; no sorting + sort.setVisible(false); + + search.expandActionView(); + mSearchView.setQuery(mState.currentSearch, false); + } else { + mIgnoreNextCollapse = true; + search.collapseActionView(); + } + // Only sort by size when visible sortSize.setVisible(mState.showSize); @@ -433,42 +465,25 @@ public class DocumentsActivity extends Activity { * Set state sort order based on explicit user action. */ private void setUserSortOrder(int sortOrder) { - final RootInfo root = getCurrentRoot(); - final DocumentInfo cwd = getCurrentDirectory(); - - // TODO: persist async, then trigger rebind - final Uri stateUri = RecentsProvider.buildState( - root.authority, root.rootId, cwd.documentId); - final ContentValues values = new ContentValues(); - values.put(StateColumns.SORT_ORDER, sortOrder); - getContentResolver().insert(stateUri, values); - + mState.userSortOrder = sortOrder; DirectoryFragment.get(getFragmentManager()).onUserSortOrderChanged(); - onStateChanged(); } /** * Set state mode based on explicit user action. */ private void setUserMode(int mode) { - final RootInfo root = getCurrentRoot(); - final DocumentInfo cwd = getCurrentDirectory(); - - // TODO: persist async, then trigger rebind - final Uri stateUri = RecentsProvider.buildState( - root.authority, root.rootId, cwd.documentId); - final ContentValues values = new ContentValues(); - values.put(StateColumns.MODE, mode); - getContentResolver().insert(stateUri, values); - - mState.mode = mode; - + mState.userMode = mode; DirectoryFragment.get(getFragmentManager()).onUserModeChanged(); - onStateChanged(); } @Override public void onBackPressed() { + if (!mState.stackTouched) { + super.onBackPressed(); + return; + } + final int size = mState.stack.size(); if (size > 1) { mState.stack.pop(); @@ -564,6 +579,7 @@ public class DocumentsActivity extends Activity { } while (mState.stack.size() > itemPosition + 1) { + mState.stackTouched = true; mState.stack.pop(); } onCurrentDirectoryChanged(); @@ -629,6 +645,7 @@ public class DocumentsActivity extends Activity { public void onStackPicked(DocumentStack stack) { mState.stack = stack; + mState.stackTouched = true; onCurrentDirectoryChanged(); } @@ -636,6 +653,7 @@ public class DocumentsActivity extends Activity { // Clear entire backstack and start in new root mState.stack.root = root; mState.stack.clear(); + mState.stackTouched = true; if (!mRoots.isRecentsRoot(root)) { try { @@ -664,13 +682,8 @@ public class DocumentsActivity extends Activity { public void onDocumentPicked(DocumentInfo doc) { final FragmentManager fm = getFragmentManager(); if (doc.isDirectory()) { - // TODO: query display mode user preference for this dir - if (doc.isGridPreferred()) { - mState.mode = MODE_GRID; - } else { - mState.mode = MODE_LIST; - } mState.stack.push(doc); + mState.stackTouched = true; onCurrentDirectoryChanged(); } else if (mState.action == ACTION_OPEN || mState.action == ACTION_GET_CONTENT) { // Explicit file picked, return @@ -774,13 +787,23 @@ public class DocumentsActivity extends Activity { public static class State implements android.os.Parcelable { public int action; - public int mode = MODE_LIST; public String[] acceptMimes; - public int sortOrder = SORT_ORDER_DISPLAY_NAME; + + /** Explicit user choice */ + public int userMode = MODE_UNKNOWN; + /** Derived after loader */ + public int derivedMode = MODE_LIST; + + /** Explicit user choice */ + public int userSortOrder = SORT_ORDER_UNKNOWN; + /** Derived after loader */ + public int derivedSortOrder = SORT_ORDER_DISPLAY_NAME; + public boolean allowMultiple = false; public boolean showSize = false; public boolean localOnly = false; public boolean showAdvanced = false; + public boolean stackTouched = false; /** Current user navigation stack; empty implies recents. */ public DocumentStack stack = new DocumentStack(); @@ -809,13 +832,14 @@ public class DocumentsActivity extends Activity { @Override public void writeToParcel(Parcel out, int flags) { out.writeInt(action); - out.writeInt(mode); + out.writeInt(userMode); out.writeStringArray(acceptMimes); - out.writeInt(sortOrder); + out.writeInt(userSortOrder); out.writeInt(allowMultiple ? 1 : 0); out.writeInt(showSize ? 1 : 0); out.writeInt(localOnly ? 1 : 0); out.writeInt(showAdvanced ? 1 : 0); + out.writeInt(stackTouched ? 1 : 0); DurableUtils.writeToParcel(out, stack); out.writeString(currentSearch); } @@ -825,13 +849,14 @@ public class DocumentsActivity extends Activity { public State createFromParcel(Parcel in) { final State state = new State(); state.action = in.readInt(); - state.mode = in.readInt(); + state.userMode = in.readInt(); state.acceptMimes = in.readStringArray(); - state.sortOrder = in.readInt(); + state.userSortOrder = in.readInt(); state.allowMultiple = in.readInt() != 0; state.showSize = in.readInt() != 0; state.localOnly = in.readInt() != 0; state.showAdvanced = in.readInt() != 0; + state.stackTouched = in.readInt() != 0; DurableUtils.readFromParcel(in, state.stack); state.currentSearch = in.readString(); return state; diff --git a/packages/DocumentsUI/src/com/android/documentsui/DocumentsApplication.java b/packages/DocumentsUI/src/com/android/documentsui/DocumentsApplication.java index 0a6cbc0..180ddef 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/DocumentsApplication.java +++ b/packages/DocumentsUI/src/com/android/documentsui/DocumentsApplication.java @@ -56,7 +56,11 @@ public class DocumentsApplication extends Application { packageFilter.addAction(Intent.ACTION_PACKAGE_CHANGED); packageFilter.addAction(Intent.ACTION_PACKAGE_REMOVED); packageFilter.addDataScheme("package"); - registerReceiver(mPackageReceiver, packageFilter); + registerReceiver(mCacheReceiver, packageFilter); + + final IntentFilter localeFilter = new IntentFilter(); + localeFilter.addAction(Intent.ACTION_LOCALE_CHANGED); + registerReceiver(mCacheReceiver, localeFilter); } @Override @@ -70,7 +74,7 @@ public class DocumentsApplication extends Application { } } - private BroadcastReceiver mPackageReceiver = new BroadcastReceiver() { + private BroadcastReceiver mCacheReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // TODO: narrow changed/removed to only packages that have backends diff --git a/packages/DocumentsUI/src/com/android/documentsui/FilteringCursorWrapper.java b/packages/DocumentsUI/src/com/android/documentsui/FilteringCursorWrapper.java index 60f0103..5f56963 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/FilteringCursorWrapper.java +++ b/packages/DocumentsUI/src/com/android/documentsui/FilteringCursorWrapper.java @@ -34,6 +34,10 @@ public class FilteringCursorWrapper extends AbstractCursor { private int mCount; public FilteringCursorWrapper(Cursor cursor, String[] acceptMimes) { + this(cursor, acceptMimes, null); + } + + public FilteringCursorWrapper(Cursor cursor, String[] acceptMimes, String[] rejectMimes) { mCursor = cursor; final int count = cursor.getCount(); @@ -43,6 +47,9 @@ public class FilteringCursorWrapper extends AbstractCursor { while (cursor.moveToNext()) { final String mimeType = cursor.getString( cursor.getColumnIndex(Document.COLUMN_MIME_TYPE)); + if (rejectMimes != null && MimePredicate.mimeMatches(rejectMimes, mimeType)) { + continue; + } if (MimePredicate.mimeMatches(acceptMimes, mimeType)) { mPosition[mCount++] = cursor.getPosition(); } diff --git a/packages/DocumentsUI/src/com/android/documentsui/RecentsCreateFragment.java b/packages/DocumentsUI/src/com/android/documentsui/RecentsCreateFragment.java index 3642478..140373b 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/RecentsCreateFragment.java +++ b/packages/DocumentsUI/src/com/android/documentsui/RecentsCreateFragment.java @@ -183,12 +183,12 @@ public class RecentsCreateFragment extends Fragment { convertView = inflater.inflate(R.layout.item_doc_list, parent, false); } - final ImageView icon = (ImageView) convertView.findViewById(android.R.id.icon); + final ImageView iconMime = (ImageView) convertView.findViewById(R.id.icon_mime); final TextView title = (TextView) convertView.findViewById(android.R.id.title); final View line2 = convertView.findViewById(R.id.line2); final DocumentStack stack = getItem(position); - icon.setImageDrawable(stack.root.loadIcon(context)); + iconMime.setImageDrawable(stack.root.loadIcon(context)); final Drawable crumb = context.getResources() .getDrawable(R.drawable.ic_breadcrumb_arrow); diff --git a/packages/DocumentsUI/src/com/android/documentsui/RecentsProvider.java b/packages/DocumentsUI/src/com/android/documentsui/RecentsProvider.java index 1fe5d54..af79c93 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/RecentsProvider.java +++ b/packages/DocumentsUI/src/com/android/documentsui/RecentsProvider.java @@ -151,18 +151,18 @@ public class RecentsProvider extends ContentProvider { case URI_RECENT: final long cutoff = System.currentTimeMillis() - MAX_HISTORY_IN_MILLIS; return db.query(TABLE_RECENT, projection, RecentColumns.TIMESTAMP + ">" + cutoff, - null, null, null, null); + null, null, null, sortOrder); case URI_STATE: final String authority = uri.getPathSegments().get(1); final String rootId = uri.getPathSegments().get(2); final String documentId = uri.getPathSegments().get(3); return db.query(TABLE_STATE, projection, StateColumns.AUTHORITY + "=? AND " + StateColumns.ROOT_ID + "=? AND " + StateColumns.DOCUMENT_ID + "=?", - new String[] { authority, rootId, documentId }, null, null, null); + new String[] { authority, rootId, documentId }, null, null, sortOrder); case URI_RESUME: final String packageName = uri.getPathSegments().get(1); return db.query(TABLE_RESUME, projection, ResumeColumns.PACKAGE_NAME + "=?", - new String[] { packageName }, null, null, null); + new String[] { packageName }, null, null, sortOrder); default: throw new UnsupportedOperationException("Unsupported Uri " + uri); } diff --git a/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java b/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java index 8530a9f..b48674cf 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java +++ b/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java @@ -90,7 +90,6 @@ public class RootsCache { if (info.metaData != null && info.metaData.containsKey( DocumentsContract.META_DATA_DOCUMENT_PROVIDER)) { - // TODO: remove deprecated customRoots flag // TODO: populate roots on background thread, and cache results final Uri rootsUri = DocumentsContract.buildRootsUri(info.authority); final ContentProviderClient client = resolver @@ -110,6 +109,8 @@ public class RootsCache { } } } + + Log.d(TAG, "Update found " + mRoots.size() + " roots"); } @Deprecated @@ -135,6 +136,21 @@ public class RootsCache { } @GuardedBy("ActivityThread") + public boolean isIconUnique(RootInfo root) { + for (RootInfo test : mRoots) { + if (Objects.equal(test.authority, root.authority)) { + if (Objects.equal(test.rootId, root.rootId)) { + continue; + } + if (test.icon == root.icon) { + return false; + } + } + } + return true; + } + + @GuardedBy("ActivityThread") public RootInfo getRecentsRoot() { return mRecentsRoot; } diff --git a/packages/DocumentsUI/src/com/android/documentsui/RootsFragment.java b/packages/DocumentsUI/src/com/android/documentsui/RootsFragment.java index efb972d..f3a21c6 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/RootsFragment.java +++ b/packages/DocumentsUI/src/com/android/documentsui/RootsFragment.java @@ -25,6 +25,7 @@ import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.os.Bundle; import android.provider.DocumentsContract.Root; +import android.text.TextUtils; import android.text.format.Formatter; import android.view.LayoutInflater; import android.view.View; @@ -168,7 +169,7 @@ public class RootsFragment extends Fragment { } summary.setText(summaryText); - summary.setVisibility(summaryText != null ? View.VISIBLE : View.GONE); + summary.setVisibility(TextUtils.isEmpty(summaryText) ? View.GONE : View.VISIBLE); return convertView; } diff --git a/packages/DocumentsUI/src/com/android/documentsui/model/RootInfo.java b/packages/DocumentsUI/src/com/android/documentsui/model/RootInfo.java index e0e8acf..b5a198c 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/model/RootInfo.java +++ b/packages/DocumentsUI/src/com/android/documentsui/model/RootInfo.java @@ -26,6 +26,7 @@ import android.graphics.drawable.Drawable; import android.os.Parcel; import android.os.Parcelable; import android.provider.DocumentsContract.Root; +import android.text.TextUtils; import com.android.documentsui.IconUtils; import com.android.documentsui.R; @@ -203,6 +204,6 @@ public class RootInfo implements Durable, Parcelable { } public String getDirectoryString() { - return (summary != null) ? summary : title; + return !TextUtils.isEmpty(summary) ? summary : title; } } diff --git a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java index 226d635..ada3ad7 100644 --- a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java +++ b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java @@ -181,12 +181,12 @@ public class ExternalStorageProvider extends DocumentsProvider { } final RowBuilder row = result.newRow(); - row.offer(Document.COLUMN_DOCUMENT_ID, docId); - row.offer(Document.COLUMN_DISPLAY_NAME, displayName); - row.offer(Document.COLUMN_SIZE, file.length()); - row.offer(Document.COLUMN_MIME_TYPE, mimeType); - row.offer(Document.COLUMN_LAST_MODIFIED, file.lastModified()); - row.offer(Document.COLUMN_FLAGS, flags); + row.add(Document.COLUMN_DOCUMENT_ID, docId); + row.add(Document.COLUMN_DISPLAY_NAME, displayName); + row.add(Document.COLUMN_SIZE, file.length()); + row.add(Document.COLUMN_MIME_TYPE, mimeType); + row.add(Document.COLUMN_LAST_MODIFIED, file.lastModified()); + row.add(Document.COLUMN_FLAGS, flags); } @Override @@ -197,13 +197,13 @@ public class ExternalStorageProvider extends DocumentsProvider { final File path = mIdToPath.get(rootId); final RowBuilder row = result.newRow(); - row.offer(Root.COLUMN_ROOT_ID, root.rootId); - row.offer(Root.COLUMN_ROOT_TYPE, root.rootType); - row.offer(Root.COLUMN_FLAGS, root.flags); - row.offer(Root.COLUMN_ICON, root.icon); - row.offer(Root.COLUMN_TITLE, root.title); - row.offer(Root.COLUMN_DOCUMENT_ID, root.docId); - row.offer(Root.COLUMN_AVAILABLE_BYTES, path.getFreeSpace()); + row.add(Root.COLUMN_ROOT_ID, root.rootId); + row.add(Root.COLUMN_ROOT_TYPE, root.rootType); + row.add(Root.COLUMN_FLAGS, root.flags); + row.add(Root.COLUMN_ICON, root.icon); + row.add(Root.COLUMN_TITLE, root.title); + row.add(Root.COLUMN_DOCUMENT_ID, root.docId); + row.add(Root.COLUMN_AVAILABLE_BYTES, path.getFreeSpace()); } return result; } @@ -267,16 +267,15 @@ public class ExternalStorageProvider extends DocumentsProvider { final LinkedList<File> pending = new LinkedList<File>(); pending.add(parent); - while (!pending.isEmpty() && result.getCount() < 20) { + while (!pending.isEmpty() && result.getCount() < 24) { final File file = pending.removeFirst(); if (file.isDirectory()) { for (File child : file.listFiles()) { pending.add(child); } - } else { - if (file.getName().toLowerCase().contains(query)) { - includeFile(result, null, file); - } + } + if (file.getName().toLowerCase().contains(query)) { + includeFile(result, null, file); } } return result; diff --git a/packages/ExternalStorageProvider/src/com/android/externalstorage/TestDocumentsProvider.java b/packages/ExternalStorageProvider/src/com/android/externalstorage/TestDocumentsProvider.java index 93db592..014c664 100644 --- a/packages/ExternalStorageProvider/src/com/android/externalstorage/TestDocumentsProvider.java +++ b/packages/ExternalStorageProvider/src/com/android/externalstorage/TestDocumentsProvider.java @@ -69,13 +69,13 @@ public class TestDocumentsProvider extends DocumentsProvider { final MatrixCursor result = new MatrixCursor(resolveRootProjection(projection)); final RowBuilder row = result.newRow(); - row.offer(Root.COLUMN_ROOT_ID, MY_ROOT_ID); - row.offer(Root.COLUMN_ROOT_TYPE, Root.ROOT_TYPE_SERVICE); - row.offer(Root.COLUMN_FLAGS, Root.FLAG_SUPPORTS_RECENTS); - row.offer(Root.COLUMN_TITLE, "_Test title which is really long"); - row.offer(Root.COLUMN_SUMMARY, "_Summary which is also super long text"); - row.offer(Root.COLUMN_DOCUMENT_ID, MY_DOC_ID); - row.offer(Root.COLUMN_AVAILABLE_BYTES, 1024); + row.add(Root.COLUMN_ROOT_ID, MY_ROOT_ID); + row.add(Root.COLUMN_ROOT_TYPE, Root.ROOT_TYPE_SERVICE); + row.add(Root.COLUMN_FLAGS, Root.FLAG_SUPPORTS_RECENTS); + row.add(Root.COLUMN_TITLE, "_Test title which is really long"); + row.add(Root.COLUMN_SUMMARY, "_Summary which is also super long text"); + row.add(Root.COLUMN_DOCUMENT_ID, MY_DOC_ID); + row.add(Root.COLUMN_AVAILABLE_BYTES, 1024); return result; } @@ -234,16 +234,16 @@ public class TestDocumentsProvider extends DocumentsProvider { private static void includeFile(MatrixCursor result, String docId) { final RowBuilder row = result.newRow(); - row.offer(Document.COLUMN_DOCUMENT_ID, docId); - row.offer(Document.COLUMN_DISPLAY_NAME, docId); - row.offer(Document.COLUMN_LAST_MODIFIED, System.currentTimeMillis()); + row.add(Document.COLUMN_DOCUMENT_ID, docId); + row.add(Document.COLUMN_DISPLAY_NAME, docId); + row.add(Document.COLUMN_LAST_MODIFIED, System.currentTimeMillis()); if (MY_DOC_ID.equals(docId)) { - row.offer(Document.COLUMN_MIME_TYPE, Document.MIME_TYPE_DIR); + row.add(Document.COLUMN_MIME_TYPE, Document.MIME_TYPE_DIR); } else if (MY_DOC_NULL.equals(docId)) { // No MIME type } else { - row.offer(Document.COLUMN_MIME_TYPE, "application/octet-stream"); + row.add(Document.COLUMN_MIME_TYPE, "application/octet-stream"); } } } diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java index 3f04470..344446f 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java @@ -738,10 +738,12 @@ public class SettingsBackupAgent extends BackupAgentHelper { } } + // Intercept the keys and see if they need special handling + value = mSettingsHelper.onBackupValue(key, value); + if (value == null) { continue; } - // Write the key and value in the intermediary array. byte[] keyBytes = key.getBytes(); totalSize += INTEGER_BYTE_COUNT + keyBytes.length; diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java index a446e40..dd7a828 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java @@ -23,6 +23,8 @@ import android.content.Context; import android.content.res.Configuration; import android.location.LocationManager; import android.media.AudioManager; +import android.media.RingtoneManager; +import android.net.Uri; import android.os.IPowerManager; import android.os.RemoteException; import android.os.ServiceManager; @@ -33,6 +35,7 @@ import android.text.TextUtils; import java.util.Locale; public class SettingsHelper { + private static final String SILENT_RINGTONE = "_silent"; private Context mContext; private AudioManager mAudioManager; @@ -63,10 +66,60 @@ public class SettingsHelper { setAutoRestore(Integer.parseInt(value) == 1); } else if (isAlreadyConfiguredCriticalAccessibilitySetting(name)) { return false; + } else if (Settings.System.RINGTONE.equals(name) + || Settings.System.NOTIFICATION_SOUND.equals(name)) { + setRingtone(name, value); + return false; } return true; } + public String onBackupValue(String name, String value) { + // Special processing for backing up ringtones + if (Settings.System.RINGTONE.equals(name) + || Settings.System.NOTIFICATION_SOUND.equals(name)) { + if (value == null) { + // Silent ringtone + return SILENT_RINGTONE; + } else { + return getCanonicalRingtoneValue(value); + } + } + // Return the original value + return value; + } + + /** + * Sets the ringtone of type specified by the name. + * + * @param name should be Settings.System.RINGTONE or Settings.System.NOTIFICATION_SOUND. + * @param value can be a canonicalized uri or "_silent" to indicate a silent (null) ringtone. + */ + private void setRingtone(String name, String value) { + // If it's null, don't change the default + if (value == null) return; + Uri ringtoneUri = null; + if (SILENT_RINGTONE.equals(value)) { + ringtoneUri = null; + } else { + Uri canonicalUri = Uri.parse(value); + ringtoneUri = mContext.getContentResolver().uncanonicalize(canonicalUri); + if (ringtoneUri == null) { + // Unrecognized or invalid Uri, don't restore + return; + } + } + final int ringtoneType = Settings.System.RINGTONE.equals(name) + ? RingtoneManager.TYPE_RINGTONE : RingtoneManager.TYPE_NOTIFICATION; + RingtoneManager.setActualDefaultRingtoneUri(mContext, ringtoneType, ringtoneUri); + } + + private String getCanonicalRingtoneValue(String value) { + final Uri ringtoneUri = Uri.parse(value); + final Uri canonicalUri = mContext.getContentResolver().canonicalize(ringtoneUri); + return canonicalUri == null ? null : canonicalUri.toString(); + } + private boolean isAlreadyConfiguredCriticalAccessibilitySetting(String name) { // These are the critical accessibility settings that are required for a // blind user to be able to interact with the device. If these settings are diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_1.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_1.png Binary files differindex 645ee4a..b226694 100644 --- a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_1.png +++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_1.png diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_2.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_2.png Binary files differindex 24d26c3..1e9fbfd 100644 --- a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_2.png +++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_2.png diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_3.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_3.png Binary files differindex b1cd0e3..0676919 100644 --- a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_3.png +++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_3.png diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_4.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_4.png Binary files differindex def0e23..3ad9e76 100644 --- a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_4.png +++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_4.png diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_in.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_in.png Binary files differnew file mode 100644 index 0000000..6ff215b --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_in.png diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_inout.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_inout.png Binary files differnew file mode 100644 index 0000000..cf5e825 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_inout.png diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_out.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_out.png Binary files differnew file mode 100644 index 0000000..5d8fd07 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_signal_out.png diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_1.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_1.png Binary files differindex ac66075..c500691 100644 --- a/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_1.png +++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_1.png diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_2.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_2.png Binary files differindex 0a49702..ae87896 100644 --- a/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_2.png +++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_2.png diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_3.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_3.png Binary files differindex 380b1eb..e47ef7a 100644 --- a/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_3.png +++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_3.png diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_4.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_4.png Binary files differindex 756ff1f..9fd1ae6 100644 --- a/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_4.png +++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_4.png diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_in.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_in.png Binary files differnew file mode 100644 index 0000000..ebd2001 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_in.png diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_inout.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_inout.png Binary files differnew file mode 100644 index 0000000..cf5e825 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_inout.png diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_out.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_out.png Binary files differnew file mode 100644 index 0000000..5d8fd07 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_out.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_15.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_15.png Binary files differindex c779e7e..c971443 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_15.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_battery_15.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1.png Binary files differindex cf07aae..717711f 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_1.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2.png Binary files differindex 50aa77f..cdf35b6 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_2.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3.png Binary files differindex 045182c..ce90eb4 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_3.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4.png Binary files differindex 5232169..39a109c 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_signal_4.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_1.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_1.png Binary files differindex 2b0da2c..22f18a0 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_1.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_1.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_2.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_2.png Binary files differindex 24755d9..f7f0159 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_2.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_2.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_3.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_3.png Binary files differindex 3f30896..86b250c 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_3.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_3.png diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_4.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_4.png Binary files differindex 87da72b..f706343 100644 --- a/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_4.png +++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_wifi_signal_4.png diff --git a/packages/SystemUI/res/drawable-hdpi/status_bar_close_on.9.png b/packages/SystemUI/res/drawable-hdpi/status_bar_close_on.9.png Binary files differindex eeee60f..42c773d 100644 --- a/packages/SystemUI/res/drawable-hdpi/status_bar_close_on.9.png +++ b/packages/SystemUI/res/drawable-hdpi/status_bar_close_on.9.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_in.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_in.png Binary files differnew file mode 100644 index 0000000..e6a2f17 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_in.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_inout.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_inout.png Binary files differnew file mode 100644 index 0000000..fd40015 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_inout.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_out.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_out.png Binary files differnew file mode 100644 index 0000000..0a6d20a --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_out.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_1.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_1.png Binary files differindex 395adad..79d3145 100644 --- a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_1.png +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_1.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_2.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_2.png Binary files differindex 4ded923..d83696f 100644 --- a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_2.png +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_2.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_3.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_3.png Binary files differindex 568c296..b6b84a1 100644 --- a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_3.png +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_3.png diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_4.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_4.png Binary files differindex 000f93d..35de22d 100644 --- a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_4.png +++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_4.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_in.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_in.png Binary files differnew file mode 100644 index 0000000..9c8f3e7 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_in.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_inout.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_inout.png Binary files differnew file mode 100644 index 0000000..7e773f0 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_inout.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_out.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_out.png Binary files differnew file mode 100644 index 0000000..2ecfd0b --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_out.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_1.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_1.png Binary files differindex 33a35d0..e432210 100644 --- a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_1.png +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_1.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_2.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_2.png Binary files differindex 71e396e..fc4dbb0 100644 --- a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_2.png +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_2.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_3.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_3.png Binary files differindex b61b1e0..410e8f3 100644 --- a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_3.png +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_3.png diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_4.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_4.png Binary files differindex 7121abb..e222ffd 100644 --- a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_4.png +++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_4.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_in.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_in.png Binary files differnew file mode 100644 index 0000000..f3245a0 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_in.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_inout.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_inout.png Binary files differnew file mode 100644 index 0000000..9f02b9d --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_inout.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_out.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_out.png Binary files differnew file mode 100644 index 0000000..8452087 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_out.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_1.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_1.png Binary files differindex ef91328..584a73a 100644 --- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_1.png +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_1.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_2.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_2.png Binary files differindex ffb3b55..b90b421 100644 --- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_2.png +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_2.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_3.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_3.png Binary files differindex 85eef22..5fdf834 100644 --- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_3.png +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_3.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_4.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_4.png Binary files differindex 5aeb913..ada740a 100644 --- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_4.png +++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_4.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_qs_signal_in.png b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_qs_signal_in.png Binary files differnew file mode 100644 index 0000000..61b0df9 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_qs_signal_in.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_qs_signal_inout.png b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_qs_signal_inout.png Binary files differnew file mode 100644 index 0000000..e450506 --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_qs_signal_inout.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_qs_signal_out.png b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_qs_signal_out.png Binary files differnew file mode 100644 index 0000000..f8b63cb --- /dev/null +++ b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_qs_signal_out.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_1.png b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_1.png Binary files differindex dc4a01e..8103f4d 100644 --- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_1.png +++ b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_1.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_2.png b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_2.png Binary files differindex bb6fd30..22d7a1c 100644 --- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_2.png +++ b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_2.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_3.png b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_3.png Binary files differindex b77c833..29d3ab0 100644 --- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_3.png +++ b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_3.png diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_4.png b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_4.png Binary files differindex 448d79b..6aa4854 100644 --- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_4.png +++ b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/stat_sys_signal_4.png diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_1.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_1.png Binary files differindex ae51eca..2994632 100644 --- a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_1.png +++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_1.png diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_2.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_2.png Binary files differindex 77dcdce..b111939 100644 --- a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_2.png +++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_2.png diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_3.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_3.png Binary files differindex aff279c..98c8e25 100644 --- a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_3.png +++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_3.png diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_4.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_4.png Binary files differindex e64d314..625dbd9 100644 --- a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_4.png +++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_4.png diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_in.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_in.png Binary files differnew file mode 100644 index 0000000..da4ffa2 --- /dev/null +++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_in.png diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_inout.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_inout.png Binary files differnew file mode 100644 index 0000000..e1c7972 --- /dev/null +++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_inout.png diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_out.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_out.png Binary files differnew file mode 100644 index 0000000..b8c8b4e --- /dev/null +++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_signal_out.png diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_1.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_1.png Binary files differindex cafb93d..60e38ad 100644 --- a/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_1.png +++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_1.png diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_2.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_2.png Binary files differindex 55eccf0..8983380 100644 --- a/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_2.png +++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_2.png diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_3.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_3.png Binary files differindex 989427b..ff652df 100644 --- a/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_3.png +++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_3.png diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_4.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_4.png Binary files differindex f2d7963..8dd9c43 100644 --- a/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_4.png +++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_4.png diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_in.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_in.png Binary files differnew file mode 100644 index 0000000..5d0ad7c --- /dev/null +++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_in.png diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_inout.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_inout.png Binary files differnew file mode 100644 index 0000000..e1c7972 --- /dev/null +++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_inout.png diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_out.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_out.png Binary files differnew file mode 100644 index 0000000..b8c8b4e --- /dev/null +++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_out.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_15.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_15.png Binary files differindex 62807cd..b1b675b 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_15.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_battery_15.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1.png Binary files differindex c3c6b93..f3232a2 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_1.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2.png Binary files differindex bb2e9ba..8dbee4b 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_2.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3.png Binary files differindex 6583922..bef1f18 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_3.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4.png Binary files differindex 9b1cbcc..163c740 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_signal_4.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_1.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_1.png Binary files differindex 3fb4427..33ee9a6 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_1.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_1.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_2.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_2.png Binary files differindex abcc317..0b7cbde 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_2.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_2.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_3.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_3.png Binary files differindex a3b2678..a2aa045 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_3.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_3.png diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_4.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_4.png Binary files differindex b4278f2..de79d19 100644 --- a/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_4.png +++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_wifi_signal_4.png diff --git a/packages/SystemUI/res/drawable-mdpi/status_bar_close_on.9.png b/packages/SystemUI/res/drawable-mdpi/status_bar_close_on.9.png Binary files differindex c73ff35..20c8785 100644 --- a/packages/SystemUI/res/drawable-mdpi/status_bar_close_on.9.png +++ b/packages/SystemUI/res/drawable-mdpi/status_bar_close_on.9.png diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_1.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_1.png Binary files differindex 3bbfb4e..abc9358 100644 --- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_1.png +++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_1.png diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_2.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_2.png Binary files differindex 7fc9bd4..0419144 100644 --- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_2.png +++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_2.png diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_3.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_3.png Binary files differindex 56a9a13..515ffe7 100644 --- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_3.png +++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_3.png diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_4.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_4.png Binary files differindex ad06e62..118de2d 100644 --- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_4.png +++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_4.png diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_in.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_in.png Binary files differnew file mode 100644 index 0000000..46fd826 --- /dev/null +++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_in.png diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_inout.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_inout.png Binary files differnew file mode 100644 index 0000000..c824b97 --- /dev/null +++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_inout.png diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_out.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_out.png Binary files differnew file mode 100644 index 0000000..fb9ecd0 --- /dev/null +++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_out.png diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_1.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_1.png Binary files differindex 94666a1..715e60a 100644 --- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_1.png +++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_1.png diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_2.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_2.png Binary files differindex 8e19afd..ed7f5b9 100644 --- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_2.png +++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_2.png diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_3.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_3.png Binary files differindex 62933b0..8f1464b 100644 --- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_3.png +++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_3.png diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_4.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_4.png Binary files differindex e93292b..b32c676 100644 --- a/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_4.png +++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_4.png diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_in.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_in.png Binary files differnew file mode 100644 index 0000000..6cf0a4b --- /dev/null +++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_in.png diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_inout.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_inout.png Binary files differnew file mode 100644 index 0000000..c824b97 --- /dev/null +++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_inout.png diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_out.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_out.png Binary files differnew file mode 100644 index 0000000..fb9ecd0 --- /dev/null +++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_out.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_15.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_15.png Binary files differindex 1e68ac7..94605c9 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_15.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_battery_15.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1.png Binary files differindex 23288de..ac18139 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_1.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2.png Binary files differindex 32e05fe..587d93c 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_2.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3.png Binary files differindex f2f88a1..656d6d0 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_3.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4.png Binary files differindex 7a38994..e8033c8 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_signal_4.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_1.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_1.png Binary files differindex a93e3a8..1253a41 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_1.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_1.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_2.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_2.png Binary files differindex 24b47b2..bcb20af 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_2.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_2.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_3.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_3.png Binary files differindex b4b3f02..ca70a29 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_3.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_3.png diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_4.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_4.png Binary files differindex 758ebe7..8ce2ae9 100644 --- a/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_4.png +++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_wifi_signal_4.png diff --git a/packages/SystemUI/res/drawable-xhdpi/status_bar_close_on.9.png b/packages/SystemUI/res/drawable-xhdpi/status_bar_close_on.9.png Binary files differindex e931314..b4e129c 100644 --- a/packages/SystemUI/res/drawable-xhdpi/status_bar_close_on.9.png +++ b/packages/SystemUI/res/drawable-xhdpi/status_bar_close_on.9.png diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_1.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_1.png Binary files differindex 4a243ca..746b9ea 100644 --- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_1.png +++ b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_1.png diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_2.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_2.png Binary files differindex 37841af..55ba5ab 100644 --- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_2.png +++ b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_2.png diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_3.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_3.png Binary files differindex 39be463..547f875 100644 --- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_3.png +++ b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_3.png diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_4.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_4.png Binary files differindex 5b9b7af..1f65ad5 100644 --- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_4.png +++ b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_4.png diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_in.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_in.png Binary files differnew file mode 100644 index 0000000..1094bc3 --- /dev/null +++ b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_in.png diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_inout.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_inout.png Binary files differnew file mode 100644 index 0000000..1037b02 --- /dev/null +++ b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_inout.png diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_out.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_out.png Binary files differnew file mode 100644 index 0000000..f5595e3 --- /dev/null +++ b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_out.png diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_1.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_1.png Binary files differindex 10818ba..01274a6 100644 --- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_1.png +++ b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_1.png diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_2.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_2.png Binary files differindex 752fee1..a02832d 100644 --- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_2.png +++ b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_2.png diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_3.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_3.png Binary files differindex 684372a..7e55bbb 100644 --- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_3.png +++ b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_3.png diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_4.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_4.png Binary files differindex 9b4b8c7..eeb8989 100644 --- a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_4.png +++ b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_4.png diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_in.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_in.png Binary files differnew file mode 100644 index 0000000..7183a07 --- /dev/null +++ b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_in.png diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_inout.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_inout.png Binary files differnew file mode 100644 index 0000000..3746328 --- /dev/null +++ b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_inout.png diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_out.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_out.png Binary files differnew file mode 100644 index 0000000..dbf54ce --- /dev/null +++ b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_out.png diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_15.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_15.png Binary files differindex d026936..a2bab6d 100644 --- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_15.png +++ b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_battery_15.png diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_signal_1.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_signal_1.png Binary files differindex afacef5..ee20130 100644 --- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_signal_1.png +++ b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_signal_1.png diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_signal_2.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_signal_2.png Binary files differindex 1b1c863..362d06d 100644 --- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_signal_2.png +++ b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_signal_2.png diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_signal_3.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_signal_3.png Binary files differindex 99094e3..b1fd413 100644 --- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_signal_3.png +++ b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_signal_3.png diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_signal_4.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_signal_4.png Binary files differindex 8aff999..1a1862a 100644 --- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_signal_4.png +++ b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_signal_4.png diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_wifi_signal_1.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_wifi_signal_1.png Binary files differindex 3fe77d0..57a4228 100644 --- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_wifi_signal_1.png +++ b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_wifi_signal_1.png diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_wifi_signal_2.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_wifi_signal_2.png Binary files differindex dec522d..c536e7b 100644 --- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_wifi_signal_2.png +++ b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_wifi_signal_2.png diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_wifi_signal_3.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_wifi_signal_3.png Binary files differindex 9e679c2..01ff1b9 100644 --- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_wifi_signal_3.png +++ b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_wifi_signal_3.png diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_wifi_signal_4.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_wifi_signal_4.png Binary files differindex f4c7250..f828068 100644 --- a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_wifi_signal_4.png +++ b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_wifi_signal_4.png diff --git a/packages/SystemUI/res/layout/quick_settings_tile_rssi.xml b/packages/SystemUI/res/layout/quick_settings_tile_rssi.xml index 34506b1..cabfaa5 100644 --- a/packages/SystemUI/res/layout/quick_settings_tile_rssi.xml +++ b/packages/SystemUI/res/layout/quick_settings_tile_rssi.xml @@ -13,32 +13,49 @@ See the License for the specific language governing permissions and limitations under the License. --> -<LinearLayout +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_gravity="top" - android:orientation="vertical"> + android:layout_gravity="top"> <FrameLayout + android:id="@+id/rssi_images" android:layout_marginTop="@dimen/qs_tile_margin_above_icon" android:layout_marginBottom="@dimen/qs_tile_margin_below_icon" android:layout_width="@dimen/qs_tile_icon_size" android:layout_height="@dimen/qs_tile_icon_size" android:layout_gravity="top|center_horizontal" + android:layout_centerHorizontal="true" > <ImageView android:id="@+id/rssi_image" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_gravity="center" + android:layout_centerInParent="true" /> <ImageView android:id="@+id/rssi_overlay_image" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_gravity="center" + android:layout_centerInParent="true" /> </FrameLayout> + <ImageView + android:id="@+id/activity_in" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:src="@drawable/ic_qs_signal_in" + android:layout_toRightOf="@id/rssi_images" + android:layout_alignBottom="@id/rssi_images" + /> + <ImageView + android:id="@+id/activity_out" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:src="@drawable/ic_qs_signal_out" + android:layout_toRightOf="@id/rssi_images" + android:layout_alignBottom="@id/rssi_images" + /> <TextView style="@style/TextAppearance.QuickSettings.TileView" android:id="@+id/rssi_textview" @@ -47,5 +64,7 @@ android:layout_gravity="top|center_horizontal" android:gravity="top|center_horizontal" android:text="@string/quick_settings_rssi_label" + android:layout_centerHorizontal="true" + android:layout_below="@id/rssi_images" /> -</LinearLayout>
\ No newline at end of file +</RelativeLayout>
\ No newline at end of file diff --git a/packages/SystemUI/res/layout/quick_settings_tile_wifi.xml b/packages/SystemUI/res/layout/quick_settings_tile_wifi.xml new file mode 100644 index 0000000..e61c595 --- /dev/null +++ b/packages/SystemUI/res/layout/quick_settings_tile_wifi.xml @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2013 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="match_parent" + android:layout_gravity="top"> + <ImageView + android:id="@+id/image" + android:layout_marginTop="@dimen/qs_tile_margin_above_icon" + android:layout_marginBottom="@dimen/qs_tile_margin_below_icon" + android:layout_width="@dimen/qs_tile_icon_size" + android:layout_height="@dimen/qs_tile_icon_size" + android:layout_gravity="top|center_horizontal" + android:layout_centerHorizontal="true" + android:scaleType="centerInside" + /> + <ImageView + android:id="@+id/activity_in" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:src="@drawable/ic_qs_wifi_in" + android:layout_toRightOf="@id/image" + android:layout_alignBottom="@id/image" + /> + <ImageView + android:id="@+id/activity_out" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:src="@drawable/ic_qs_wifi_out" + android:layout_toRightOf="@id/image" + android:layout_alignBottom="@id/image" + /> + <TextView + style="@style/TextAppearance.QuickSettings.TileView" + android:id="@+id/text" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="top|center_horizontal" + android:gravity="top|center_horizontal" + android:layout_centerHorizontal="true" + android:layout_below="@id/image" + /> +</RelativeLayout>
\ No newline at end of file diff --git a/packages/SystemUI/res/values/arrays.xml b/packages/SystemUI/res/values/arrays.xml index b2c8aee..69f4b4fbe 100644 --- a/packages/SystemUI/res/values/arrays.xml +++ b/packages/SystemUI/res/values/arrays.xml @@ -47,8 +47,8 @@ <item>100</item> </array> <array name="batterymeter_color_values"> - <item>#FFFF3300</item> - <item>#FFFF3300</item> + <item>#FFF75D00</item> + <item>#FFF75D00</item> <item>#FFFFFFFF</item> </array> <array name="batterymeter_bolt_points"> diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java index 119299f..2063563 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java @@ -196,7 +196,8 @@ class SaveImageInBackgroundTask extends AsyncTask<SaveImageInBackgroundData, Voi // Create screenshot directory if it doesn't exist mScreenshotDir.mkdirs(); - // media provider uses seconds, not milliseconds + // media provider uses seconds for DATE_MODIFIED and DATE_ADDED, but milliseconds + // for DATE_TAKEN long dateSeconds = mImageTime / 1000; // Save the screenshot to the MediaStore @@ -205,7 +206,7 @@ class SaveImageInBackgroundTask extends AsyncTask<SaveImageInBackgroundData, Voi values.put(MediaStore.Images.ImageColumns.DATA, mImageFilePath); values.put(MediaStore.Images.ImageColumns.TITLE, mImageFileName); values.put(MediaStore.Images.ImageColumns.DISPLAY_NAME, mImageFileName); - values.put(MediaStore.Images.ImageColumns.DATE_TAKEN, dateSeconds); + values.put(MediaStore.Images.ImageColumns.DATE_TAKEN, mImageTime); values.put(MediaStore.Images.ImageColumns.DATE_ADDED, dateSeconds); values.put(MediaStore.Images.ImageColumns.DATE_MODIFIED, dateSeconds); values.put(MediaStore.Images.ImageColumns.MIME_TYPE, "image/png"); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index 9db2805..814f5db 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -1349,8 +1349,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode { }; boolean panelsEnabled() { - return ((mDisabled & StatusBarManager.DISABLE_EXPAND) == 0 - && mStatusBarWindowState != StatusBarManager.WINDOW_STATE_HIDING); + return (mDisabled & StatusBarManager.DISABLE_EXPAND) == 0; } void makeExpandedVisible() { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java index 0d591ba..68ee2b5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java @@ -16,6 +16,7 @@ package com.android.systemui.statusbar.phone; +import android.animation.ValueAnimator; import android.app.ActivityManagerNative; import android.app.AlertDialog; import android.app.Dialog; @@ -62,6 +63,7 @@ import android.widget.ImageView; import android.widget.TextView; import com.android.systemui.R; +import com.android.systemui.statusbar.phone.QuickSettingsModel.ActivityState; import com.android.systemui.statusbar.phone.QuickSettingsModel.BluetoothState; import com.android.systemui.statusbar.phone.QuickSettingsModel.RSSIState; import com.android.systemui.statusbar.phone.QuickSettingsModel.State; @@ -401,8 +403,9 @@ class QuickSettings { private void addSystemTiles(ViewGroup parent, LayoutInflater inflater) { // Wi-fi - final QuickSettingsBasicTile wifiTile - = new QuickSettingsBasicTile(mContext); + final QuickSettingsTileView wifiTile = (QuickSettingsTileView) + inflater.inflate(R.layout.quick_settings_tile, parent, false); + wifiTile.setContent(R.layout.quick_settings_tile_wifi, inflater); wifiTile.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -433,12 +436,15 @@ class QuickSettings { return true; }} ); } - mModel.addWifiTile(wifiTile, new QuickSettingsModel.RefreshCallback() { + mModel.addWifiTile(wifiTile, new NetworkActivityCallback() { @Override - public void refreshView(QuickSettingsTileView unused, State state) { + public void refreshView(QuickSettingsTileView view, State state) { WifiState wifiState = (WifiState) state; - wifiTile.setImageResource(wifiState.iconId); - wifiTile.setText(wifiState.label); + ImageView iv = (ImageView) view.findViewById(R.id.image); + iv.setImageResource(wifiState.iconId); + setActivity(view, wifiState); + TextView tv = (TextView) view.findViewById(R.id.text); + tv.setText(wifiState.label); wifiTile.setContentDescription(mContext.getString( R.string.accessibility_quick_settings_wifi, wifiState.signalContentDescription, @@ -462,7 +468,7 @@ class QuickSettings { startSettingsActivity(intent); } }); - mModel.addRSSITile(rssiTile, new QuickSettingsModel.RefreshCallback() { + mModel.addRSSITile(rssiTile, new NetworkActivityCallback() { @Override public void refreshView(QuickSettingsTileView view, State state) { RSSIState rssiState = (RSSIState) state; @@ -478,6 +484,8 @@ class QuickSettings { } else { iov.setImageDrawable(null); } + setActivity(view, rssiState); + tv.setText(state.label); view.setContentDescription(mContext.getResources().getString( R.string.accessibility_quick_settings_mobile, @@ -942,4 +950,25 @@ class QuickSettings { } }; + + private abstract static class NetworkActivityCallback + implements QuickSettingsModel.RefreshCallback { + private final long mDefaultDuration = new ValueAnimator().getDuration(); + private final long mShortDuration = mDefaultDuration / 3; + + public void setActivity(View view, ActivityState state) { + setVisibility(view.findViewById(R.id.activity_in), state.activityIn); + setVisibility(view.findViewById(R.id.activity_out), state.activityOut); + } + + private void setVisibility(View view, boolean visible) { + final float newAlpha = visible ? 1 : 0; + if (view.getAlpha() != newAlpha) { + view.animate() + .setDuration(visible ? mShortDuration : mDefaultDuration) + .alpha(newAlpha) + .start(); + } + } + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java index b9e3059..9d0418d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java @@ -70,13 +70,17 @@ class QuickSettingsModel implements BluetoothStateChangeCallback, int batteryLevel; boolean pluggedIn; } - static class RSSIState extends State { + static class ActivityState extends State { + boolean activityIn; + boolean activityOut; + } + static class RSSIState extends ActivityState { int signalIconId; String signalContentDescription; int dataTypeIconId; String dataContentDescription; } - static class WifiState extends State { + static class WifiState extends ActivityState { String signalContentDescription; boolean connected; } @@ -430,6 +434,7 @@ class QuickSettingsModel implements BluetoothStateChangeCallback, // NetworkSignalChanged callback @Override public void onWifiSignalChanged(boolean enabled, int wifiSignalIconId, + boolean activityIn, boolean activityOut, String wifiSignalContentDescription, String enabledDesc) { // TODO: If view is in awaiting state, disable Resources r = mContext.getResources(); @@ -438,6 +443,8 @@ class QuickSettingsModel implements BluetoothStateChangeCallback, boolean wifiNotConnected = (wifiSignalIconId > 0) && (enabledDesc == null); mWifiState.enabled = enabled; mWifiState.connected = wifiConnected; + mWifiState.activityIn = enabled && activityIn; + mWifiState.activityOut = enabled && activityOut; if (wifiConnected) { mWifiState.iconId = wifiSignalIconId; mWifiState.label = removeDoubleQuotes(enabledDesc); @@ -468,7 +475,8 @@ class QuickSettingsModel implements BluetoothStateChangeCallback, @Override public void onMobileDataSignalChanged( boolean enabled, int mobileSignalIconId, String signalContentDescription, - int dataTypeIconId, String dataContentDescription, String enabledDesc) { + int dataTypeIconId, boolean activityIn, boolean activityOut, + String dataContentDescription,String enabledDesc) { if (deviceHasMobileData()) { // TODO: If view is in awaiting state, disable Resources r = mContext.getResources(); @@ -481,6 +489,8 @@ class QuickSettingsModel implements BluetoothStateChangeCallback, mRSSIState.dataTypeIconId = enabled && (dataTypeIconId > 0) && !mWifiState.enabled ? dataTypeIconId : 0; + mRSSIState.activityIn = enabled && activityIn; + mRSSIState.activityOut = enabled && activityOut; mRSSIState.dataContentDescription = enabled && (dataTypeIconId > 0) && !mWifiState.enabled ? dataContentDescription : r.getString(R.string.accessibility_no_data); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java index 1e7e692..a715450 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java @@ -165,9 +165,11 @@ public class NetworkController extends BroadcastReceiver implements DemoMode { public interface NetworkSignalChangedCallback { void onWifiSignalChanged(boolean enabled, int wifiSignalIconId, - String wifitSignalContentDescriptionId, String description); + boolean activityIn, boolean activityOut, + String wifiSignalContentDescriptionId, String description); void onMobileDataSignalChanged(boolean enabled, int mobileSignalIconId, String mobileSignalContentDescriptionId, int dataTypeIconId, + boolean activityIn, boolean activityOut, String dataTypeContentDescriptionId, String description); void onAirplaneModeChanged(boolean enabled); } @@ -313,22 +315,33 @@ public class NetworkController extends BroadcastReceiver implements DemoMode { boolean wifiEnabled = mWifiEnabled && (mWifiConnected || !mHasMobileDataFeature); String wifiDesc = wifiEnabled ? mWifiSsid : null; - cb.onWifiSignalChanged(wifiEnabled, mQSWifiIconId, mContentDescriptionWifi, wifiDesc); - + boolean wifiIn = wifiEnabled && mWifiSsid != null + && (mWifiActivity == WifiManager.DATA_ACTIVITY_INOUT + || mWifiActivity == WifiManager.DATA_ACTIVITY_IN); + boolean wifiOut = wifiEnabled && mWifiSsid != null + && (mWifiActivity == WifiManager.DATA_ACTIVITY_INOUT + || mWifiActivity == WifiManager.DATA_ACTIVITY_OUT); + cb.onWifiSignalChanged(wifiEnabled, mQSWifiIconId, wifiIn, wifiOut, + mContentDescriptionWifi, wifiDesc); + + boolean mobileIn = mDataConnected && (mDataActivity == TelephonyManager.DATA_ACTIVITY_INOUT + || mDataActivity == TelephonyManager.DATA_ACTIVITY_IN); + boolean mobileOut = mDataConnected && (mDataActivity == TelephonyManager.DATA_ACTIVITY_INOUT + || mDataActivity == TelephonyManager.DATA_ACTIVITY_OUT); if (isEmergencyOnly()) { cb.onMobileDataSignalChanged(false, mQSPhoneSignalIconId, - mContentDescriptionPhoneSignal, mQSDataTypeIconId, mContentDescriptionDataType, - null); + mContentDescriptionPhoneSignal, mQSDataTypeIconId, mobileIn, mobileOut, + mContentDescriptionDataType, null); } else { if (mIsWimaxEnabled && mWimaxConnected) { // Wimax is special cb.onMobileDataSignalChanged(true, mQSPhoneSignalIconId, - mContentDescriptionPhoneSignal, mQSDataTypeIconId, + mContentDescriptionPhoneSignal, mQSDataTypeIconId, mobileIn, mobileOut, mContentDescriptionDataType, mNetworkName); } else { // Normal mobile data cb.onMobileDataSignalChanged(mHasMobileDataFeature, mQSPhoneSignalIconId, - mContentDescriptionPhoneSignal, mQSDataTypeIconId, + mContentDescriptionPhoneSignal, mQSDataTypeIconId, mobileIn, mobileOut, mContentDescriptionDataType, mNetworkName); } } @@ -1125,6 +1138,11 @@ public class NetworkController extends BroadcastReceiver implements DemoMode { + " mBluetoothTetherIconId=0x" + Integer.toHexString(mBluetoothTetherIconId)); } + // update QS + for (NetworkSignalChangedCallback cb : mSignalsChangedCallbacks) { + notifySignalsChangedCallbacks(cb); + } + if (mLastPhoneSignalIconId != mPhoneSignalIconId || mLastWifiIconId != mWifiIconId || mLastWimaxIconId != mWimaxIconId @@ -1136,9 +1154,6 @@ public class NetworkController extends BroadcastReceiver implements DemoMode { for (SignalCluster cluster : mSignalClusters) { refreshSignalCluster(cluster); } - for (NetworkSignalChangedCallback cb : mSignalsChangedCallbacks) { - notifySignalsChangedCallbacks(cb); - } } if (mLastAirplaneMode != mAirplaneMode) { diff --git a/packages/services/PacProcessor/src/com/android/pacprocessor/PacService.java b/packages/services/PacProcessor/src/com/android/pacprocessor/PacService.java index 7e76025..c6b76f1 100644 --- a/packages/services/PacProcessor/src/com/android/pacprocessor/PacService.java +++ b/packages/services/PacProcessor/src/com/android/pacprocessor/PacService.java @@ -25,6 +25,9 @@ import android.util.Log; import com.android.net.IProxyService; +import java.net.MalformedURLException; +import java.net.URL; + public class PacService extends Service { private static final String TAG = "PacService"; @@ -68,7 +71,18 @@ public class PacService extends Service { @Override public String resolvePacFile(String host, String url) throws RemoteException { - return mPacNative.makeProxyRequest(url, host); + try { + // Check for characters that could be used for an injection attack. + new URL(url); + for (char c : host.toCharArray()) { + if (!Character.isLetterOrDigit(c) && (c != '.') && (c != '-')) { + throw new RemoteException("Invalid host was passed"); + } + } + return mPacNative.makeProxyRequest(url, host); + } catch (MalformedURLException e) { + throw new RemoteException("Invalid URL was passed"); + } } @Override |