Start implementation of new app info storage page

Things are mostly in the right places, may need some minor location
adjustment on everything and styling for the buttons.

Bug: 19511439
Change-Id: If7730285d6ddc36e32cc8bc119885a8e215c0eb5
This commit is contained in:
Jason Monk
2015-02-26 11:33:22 -05:00
parent ad99996ffb
commit 60a09ea238
20 changed files with 371 additions and 373 deletions

View File

@@ -0,0 +1,58 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2015 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.
-->
<!-- Clear cache section -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/all_details"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:orientation="vertical">
<FrameLayout
android:id="@+id/cache_size"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="8dip">
<TextView
android:text="@string/cache_size_label"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:maxLines="1"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="?android:textColorPrimary"
android:gravity="center_vertical" />
<TextView
android:id="@+id/cache_size_text"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:gravity="right"
android:maxLines="1" />
</FrameLayout>
<include
android:id="@+id/clear_cache_button"
layout="@layout/single_button_panel" />
<Space
android:layout_width="match_parent"
android:layout_height="10dp" />
</LinearLayout>

View File

@@ -0,0 +1,151 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2015 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/all_details"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:orientation="vertical">
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/category_title"
android:layout_width="match_parent"
android:layout_height="@dimen/dashboard_category_title_height"
android:singleLine="true"
android:gravity="center_vertical"
android:textAppearance="@style/TextAppearance.CategoryTitle"
android:textAlignment="viewStart"
android:text="@string/storage_label"
/>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="0dip">
<TextView
android:id="@+id/total_size_prefix"
android:text="@string/total_size_label"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:textColor="?android:textColorPrimary"
android:maxLines="1" />
<TextView
android:id="@+id/total_size_text"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:gravity="right"
android:maxLines="1" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="3dip">
<TextView
android:id="@+id/application_size_prefix"
android:text="@string/application_size_label"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:textColor="?android:textColorPrimary"
android:maxLines="1" />
<TextView
android:id="@+id/application_size_text"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:gravity="right"
android:maxLines="1" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="3dip">
<TextView
android:id="@+id/external_code_size_prefix"
android:text="@string/external_code_size_label"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:textColor="?android:textColorPrimary"
android:maxLines="1" />
<TextView
android:id="@+id/external_code_size_text"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:gravity="right"
android:maxLines="1" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="3dip">
<TextView
android:id="@+id/data_size_prefix"
android:text="@string/data_size_label"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:textColor="?android:textColorPrimary"
android:maxLines="1" />
<TextView
android:id="@+id/data_size_text"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:gravity="right"
android:maxLines="1" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="3dip">
<TextView
android:id="@+id/external_data_size_prefix"
android:text="@string/external_data_size_label"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:textColor="?android:textColorPrimary"
android:maxLines="1" />
<TextView
android:id="@+id/external_data_size_text"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:gravity="right"
android:maxLines="1" />
</FrameLayout>
<include
android:id="@+id/clear_data_button"
layout="@layout/single_button_panel" />
<Space
android:layout_width="match_parent"
android:layout_height="10dp" />
</LinearLayout>

View File

@@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2015 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.
-->
<!--
Defines a panel with one button in the same layout as the two button layout.
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="bottom"
android:paddingTop="4dip"
android:orientation="horizontal">
<Button
android:id="@+id/button"
android:layout_width="120dip"
android:layout_weight="0.4"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical" />
<Space
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="0.2" />
<Space
android:layout_width="120dip"
android:layout_weight="0.4"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"/>
</LinearLayout>

View File

@@ -1,306 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2015 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.
-->
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:scrollbarStyle="@integer/preference_scrollbar_style">
<LinearLayout
android:id="@+id/all_details"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:paddingBottom="5dip"
android:orientation="vertical">
<TextView
style="?android:attr/listSeparatorTextViewStyle"
android:layout_marginTop="8dip"
android:text="@string/storage_label" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:baselineAligned="true"
android:paddingTop="-1dip">
<TextView
android:id="@+id/total_size_prefix"
android:text="@string/total_size_label"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:maxLines="1"
android:paddingTop="6dip" />
<ImageView
android:id="@+id/info_size_dots"
android:src="@drawable/dotted_line_480px"
android:layout_width="0dip"
android:layout_weight="1"
android:layout_height="1px"
android:layout_gravity="bottom"
android:layout_marginStart="1dip"
android:layout_marginEnd="1dip"
android:layout_marginBottom="4dip"
android:scaleType="center"
android:contentDescription="@null" />
<TextView
android:id="@+id/total_size_text"
android:paddingTop="6dip"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:maxLines="1" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:baselineAligned="true"
android:paddingTop="-1dip">
<TextView
android:id="@+id/application_size_prefix"
android:text="@string/application_size_label"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:maxLines="1"
android:paddingTop="6dip" />
<ImageView
android:id="@+id/info_size_dots"
android:src="@drawable/dotted_line_480px"
android:layout_width="0dip"
android:layout_weight="1"
android:layout_height="1px"
android:layout_gravity="bottom"
android:layout_marginStart="1dip"
android:layout_marginEnd="1dip"
android:layout_marginBottom="4dip"
android:scaleType="center"
android:contentDescription="@null" />
<TextView
android:id="@+id/application_size_text"
android:textAppearance="?android:attr/textAppearanceMedium"
android:paddingTop="6dip"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:maxLines="1" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:baselineAligned="true"
android:paddingTop="-1dip">
<TextView
android:id="@+id/external_code_size_prefix"
android:text="@string/external_code_size_label"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:maxLines="1"
android:paddingTop="6dip" />
<ImageView
android:id="@+id/info_size_dots"
android:src="@drawable/dotted_line_480px"
android:layout_width="0dip"
android:layout_weight="1"
android:layout_height="1px"
android:layout_gravity="bottom"
android:layout_marginStart="1dip"
android:layout_marginEnd="1dip"
android:layout_marginBottom="4dip"
android:scaleType="center"
android:contentDescription="@null" />
<TextView
android:id="@+id/external_code_size_text"
android:textAppearance="?android:attr/textAppearanceMedium"
android:paddingTop="6dip"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:maxLines="1" />
</LinearLayout>
<LinearLayout
android:id="@+id/info_size"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:baselineAligned="true"
android:paddingTop="-1dip">
<TextView
android:id="@+id/data_size_prefix"
android:text="@string/data_size_label"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:maxLines="1"
android:paddingTop="6dip" />
<ImageView
android:id="@+id/info_size_dots"
android:src="@drawable/dotted_line_480px"
android:layout_width="0dip"
android:layout_weight="1"
android:layout_height="1px"
android:layout_gravity="bottom"
android:layout_marginStart="1dip"
android:layout_marginEnd="1dip"
android:layout_marginBottom="4dip"
android:scaleType="center"
android:contentDescription="@null" />
<TextView
android:id="@+id/data_size_text"
android:textAppearance="?android:attr/textAppearanceMedium"
android:paddingTop="6dip"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:maxLines="1" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:baselineAligned="true"
android:paddingTop="-1dip">
<TextView
android:id="@+id/external_data_size_prefix"
android:text="@string/external_data_size_label"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:maxLines="1"
android:paddingTop="6dip" />
<ImageView
android:id="@+id/info_size_dots"
android:src="@drawable/dotted_line_480px"
android:layout_width="0dip"
android:layout_weight="1"
android:layout_height="1px"
android:layout_gravity="bottom"
android:layout_marginStart="1dip"
android:layout_marginEnd="1dip"
android:layout_marginBottom="4dip"
android:scaleType="center"
android:contentDescription="@null" />
<TextView
android:id="@+id/external_data_size_text"
android:textAppearance="?android:attr/textAppearanceMedium"
android:paddingTop="6dip"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:maxLines="1" />
</LinearLayout>
<!-- Clear data and install location buttons -->
<include
layout="@layout/two_buttons_panel"
android:id="@+id/data_buttons_panel"/>
</LinearLayout>
<!-- Clear cache section -->
<RelativeLayout
android:id="@+id/cache_panel"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/cache_header"
style="?android:attr/listSeparatorTextViewStyle"
android:layout_marginTop="8dip"
android:text="@string/cache_header_label" />
<LinearLayout
android:id="@+id/cache_size"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:baselineAligned="true"
android:layout_below="@id/cache_header"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:paddingTop="-1dip">
<TextView
android:text="@string/cache_size_label"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:maxLines="1"
android:textAppearance="?android:attr/textAppearanceMedium"
android:paddingTop="6dip"
android:gravity="center_vertical" />
<ImageView
android:src="@drawable/dotted_line_480px"
android:layout_width="0dip"
android:layout_weight="1"
android:layout_height="1px"
android:layout_gravity="bottom"
android:layout_marginStart="1dip"
android:layout_marginEnd="1dip"
android:layout_marginBottom="4dip"
android:scaleType="center"
android:contentDescription="@null" />
<TextView
android:id="@+id/cache_size_text"
android:textAppearance="?android:attr/textAppearanceMedium"
android:paddingTop="6dip"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:maxLines="1" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/cache_size"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:paddingTop="4dip"
android:orientation="horizontal">
<View
android:layout_width="120dip"
android:layout_height="0dip"
android:layout_weight="0.4" />
<View
android:layout_width="0dip"
android:layout_height="0dip"
android:visibility="invisible"
android:layout_weight="0.2" />
<Button
android:id="@+id/clear_cache_button"
android:layout_width="120dip"
android:layout_height="wrap_content"
android:layout_weight="0.4"
android:text="@string/clear_cache_btn_text" />
</LinearLayout>
</RelativeLayout>
</LinearLayout>
</ScrollView>

View File

@@ -6053,15 +6053,18 @@
<string name="storage_summary_format"><xliff:g id="size" example="30.00MB">%1$s</xliff:g> used in <xliff:g id="storage_type" example="internal storage">%2$s</xliff:g></string>
<!-- Summary describing internal storage for applications [CHAR LIMIT=25] -->
<string name="storage_type_internal">internal storage</string>
<string name="storage_type_internal">Internal storage</string>
<!-- Summary describing external storage for applications [CHAR LIMIT=25] -->
<string name="storage_type_external">external storage</string>
<string name="storage_type_external">External storage</string>
<!-- Title for data usage screen when entered from app info [CHAR LIMIT=30] -->
<string name="app_data_usage">App data usage</string>
<!-- Summary for data usage preference [CHAR LIMIT=15] -->
<string name="data_summary_format"><xliff:g id="size" example="30.00MB">%1$s</xliff:g> used since <xliff:g id="date" example="Jan 12">%2$s</xliff:g></string>
<!-- Title of storage preference to control where app is stored -->
<string name="storage_used">Storage used</string>
<!-- App notification summary with notifications enabled [CHAR LIMIT=40] -->
<string name="notifications_enabled">On</string>
<!-- App notification summary with notifications disabled [CHAR LIMIT=40] -->

View File

@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2015 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.
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/application_info_label">
<com.android.settings.DropDownPreference
android:key="app_location_setting"
android:title="@string/storage_used"
android:summary="@string/storage_type_internal"
android:selectable="true" />
<com.android.settings.applications.LayoutPreference
android:key="storage_settings"
android:layout="@layout/app_storage_settings" />
<com.android.settings.applications.LayoutPreference
android:key="cache_settings"
android:layout="@layout/app_cache_settings" />
</PreferenceScreen>

View File

@@ -19,7 +19,7 @@
android:key="battery_saver">
<!-- Turn on automatically -->
<com.android.settings.notification.DropDownPreference
<com.android.settings.DropDownPreference
android:key="turn_on_automatically"
android:title="@string/battery_saver_turn_on_automatically_title"
android:persistent="false" />

View File

@@ -81,7 +81,7 @@
android:entryValues="@array/entryvalues_font_size"
android:dialogTitle="@string/dialog_title_font_size" />
<com.android.settings.notification.DropDownPreference
<com.android.settings.DropDownPreference
android:key="auto_rotate"
android:title="@string/display_auto_rotate_title" />

View File

@@ -16,7 +16,7 @@
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/application_info_label">
<com.android.settings.applications.HeaderPreference
<com.android.settings.applications.LayoutPreference
android:key="header_view"
android:layout="@layout/installed_app_details" />

View File

@@ -105,7 +105,7 @@
android:persistent="false" />
<!-- When device is locked -->
<com.android.settings.notification.DropDownPreference
<com.android.settings.DropDownPreference
android:key="lock_screen_notifications"
android:title="@string/lock_screen_notifications_title"
android:persistent="false" />

View File

@@ -60,13 +60,13 @@
android:persistent="false" />
<!-- Dock speaker plays -->
<com.android.settings.notification.DropDownPreference
<com.android.settings.DropDownPreference
android:key="dock_audio_media"
android:title="@string/dock_audio_media_title"
android:persistent="false" />
<!-- Emergency tone -->
<com.android.settings.notification.DropDownPreference
<com.android.settings.DropDownPreference
android:key="emergency_tone"
android:title="@string/emergency_tone_title"
android:persistent="false" />

View File

@@ -20,7 +20,7 @@
android:title="@string/zen_mode_settings_title" >
<!-- When calls and notifications arrive -->
<com.android.settings.notification.DropDownPreference
<com.android.settings.DropDownPreference
android:key="zen_mode"
android:title="@string/zen_mode_option_title"
android:persistent="false" />
@@ -50,7 +50,7 @@
android:switchTextOff=""
android:switchTextOn="" />
<com.android.settings.notification.DropDownPreference
<com.android.settings.DropDownPreference
android:key="starred"
android:title="@string/zen_mode_from"
android:persistent="false" />
@@ -79,7 +79,7 @@
<!-- Start time/End time added and removed here! :-) -->
<!-- Interruptions allowed -->
<com.android.settings.notification.DropDownPreference
<com.android.settings.DropDownPreference
android:key="downtime_mode"
android:title="@string/zen_mode_downtime_mode_title"
android:order="100"

View File

@@ -17,8 +17,7 @@
package com.android.settings;
import com.android.internal.view.RotationPolicy;
import com.android.settings.notification.DropDownPreference;
import com.android.settings.notification.DropDownPreference.Callback;
import com.android.settings.DropDownPreference.Callback;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.android.settings.notification;
package com.android.settings;
import android.content.Context;
import android.preference.Preference;

View File

@@ -32,10 +32,8 @@ import android.os.Message;
import android.os.RemoteException;
import android.text.format.Formatter;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
@@ -43,8 +41,10 @@ import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.applications.ApplicationsState.AppEntry;
import com.android.settings.applications.ApplicationsState.Callbacks;
import com.android.settings.DropDownPreference;
public class AppStorageSettings extends AppInfoWithHeader implements OnClickListener, Callbacks {
public class AppStorageSettings extends AppInfoWithHeader
implements OnClickListener, Callbacks, DropDownPreference.Callback {
private static final String TAG = AppStorageSettings.class.getSimpleName();
//internal constants used in Handler
@@ -65,6 +65,10 @@ public class AppStorageSettings extends AppInfoWithHeader implements OnClickList
private static final int DLG_CANNOT_CLEAR_DATA = DLG_BASE + 2;
private static final int DLG_MOVE_FAILED = DLG_BASE + 3;
private static final String KEY_MOVE_PREFERENCE = "app_location_setting";
private static final String KEY_STORAGE_SETTINGS = "storage_settings";
private static final String KEY_CACHE_SETTINGS = "cache_settings";
private CanBeOnSdCardChecker mCanBeOnSdCardChecker;
private TextView mTotalSize;
private TextView mAppSize;
@@ -76,7 +80,8 @@ public class AppStorageSettings extends AppInfoWithHeader implements OnClickList
private TextView mCacheSize;
private Button mClearDataButton;
private Button mClearCacheButton;
private Button mMoveAppButton;
private DropDownPreference mMoveDropDown;
private boolean mMoveInProgress = false;
private boolean mCanClearData = true;
@@ -102,17 +107,14 @@ public class AppStorageSettings extends AppInfoWithHeader implements OnClickList
super.onCreate(savedInstanceState);
mCanBeOnSdCardChecker = new CanBeOnSdCardChecker();
addPreferencesFromResource(R.xml.app_storage_settings);
setupViews();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.storage_settings, container, false);
final ViewGroup allDetails = (ViewGroup)view.findViewById(R.id.all_details);
Utils.forceCustomPadding(allDetails, true /* additive padding */);
private void setupViews() {
mComputingStr = getActivity().getText(R.string.computing_size);
mInvalidSizeStr = getActivity().getText(R.string.invalid_size_value);
LayoutPreference view = (LayoutPreference) findPreference(KEY_STORAGE_SETTINGS);
// Set default values on sizes
mTotalSize = (TextView) view.findViewById(R.id.total_size_text);
@@ -125,17 +127,18 @@ public class AppStorageSettings extends AppInfoWithHeader implements OnClickList
((View) mExternalCodeSize.getParent()).setVisibility(View.GONE);
((View) mExternalDataSize.getParent()).setVisibility(View.GONE);
}
mClearDataButton = (Button) view.findViewById(R.id.clear_data_button)
.findViewById(R.id.button);
// Initialize clear data and move install location buttons
View data_buttons_panel = view.findViewById(R.id.data_buttons_panel);
mMoveAppButton = (Button) data_buttons_panel.findViewById(R.id.left_button);
mMoveDropDown = (DropDownPreference) findPreference(KEY_MOVE_PREFERENCE);
mMoveDropDown.setCallback(this);
view = (LayoutPreference) findPreference(KEY_CACHE_SETTINGS);
// Cache section
mCacheSize = (TextView) view.findViewById(R.id.cache_size_text);
mClearCacheButton = (Button)view.findViewById(R.id.clear_cache_button);
mClearDataButton = (Button) data_buttons_panel.findViewById(R.id.right_button);
return view;
mClearCacheButton = (Button) view.findViewById(R.id.clear_cache_button)
.findViewById(R.id.button);
mClearCacheButton.setText(R.string.clear_cache_btn_text);
}
@Override
@@ -157,16 +160,24 @@ public class AppStorageSettings extends AppInfoWithHeader implements OnClickList
} else {
showDialogInner(DLG_CLEAR_DATA, 0);
}
} else if (v == mMoveAppButton) {
}
}
@Override
public boolean onItemSelected(int pos, Object value) {
boolean selectedExternal = (Boolean) value;
boolean isExternal = (mAppEntry.info.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0;
if (selectedExternal ^ isExternal) {
if (mPackageMoveObserver == null) {
mPackageMoveObserver = new PackageMoveObserver();
}
int moveFlags = (mAppEntry.info.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0 ?
PackageManager.MOVE_INTERNAL : PackageManager.MOVE_EXTERNAL_MEDIA;
int moveFlags = selectedExternal ? PackageManager.MOVE_EXTERNAL_MEDIA
: PackageManager.MOVE_INTERNAL;
mMoveInProgress = true;
refreshButtons();
mPm.movePackage(mAppEntry.info.packageName, mPackageMoveObserver, moveFlags);
}
return true;
}
private String getSizeStr(long size) {
@@ -248,16 +259,26 @@ public class AppStorageSettings extends AppInfoWithHeader implements OnClickList
retrieveAppEntry();
refreshButtons();
refreshSizeInfo();
boolean isExternal = (mAppEntry.info.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0;
mMoveDropDown.setSelectedItem(isExternal ? 1 : 0);
return true;
}
private void refreshButtons() {
if (!mMoveInProgress) {
initMoveButton();
initMoveDropDown();
initDataButtons();
} else {
mMoveAppButton.setText(R.string.moving);
mMoveAppButton.setEnabled(false);
mMoveDropDown.setSummary(R.string.moving);
mMoveDropDown.setSelectable(false);
}
}
private void updateMoveEnabled(boolean enabled) {
mMoveDropDown.clearItems();
mMoveDropDown.addItem(R.string.storage_type_internal, false);
if (enabled) {
mMoveDropDown.addItem(R.string.storage_type_external, true);
}
}
@@ -287,30 +308,22 @@ public class AppStorageSettings extends AppInfoWithHeader implements OnClickList
}
}
private void initMoveButton() {
private void initMoveDropDown() {
if (Environment.isExternalStorageEmulated()) {
mMoveAppButton.setVisibility(View.INVISIBLE);
updateMoveEnabled(false);
return;
}
boolean dataOnly = (mPackageInfo == null) && (mAppEntry != null);
boolean moveDisable = true;
if (dataOnly) {
mMoveAppButton.setText(R.string.move_app);
} else if ((mAppEntry.info.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0) {
mMoveAppButton.setText(R.string.move_app_to_internal);
if ((mAppEntry.info.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0) {
// Always let apps move to internal storage from sdcard.
moveDisable = false;
} else {
mMoveAppButton.setText(R.string.move_app_to_sdcard);
mCanBeOnSdCardChecker.init();
moveDisable = !mCanBeOnSdCardChecker.check(mAppEntry.info);
}
if (moveDisable || mAppControlRestricted) {
mMoveAppButton.setEnabled(false);
} else {
mMoveAppButton.setOnClickListener(this);
mMoveAppButton.setEnabled(true);
}
updateMoveEnabled(!moveDisable);
mMoveDropDown.setSelectable(!mAppControlRestricted);
}
/*

View File

@@ -109,7 +109,7 @@ public class InstalledAppDetails extends AppInfoBase
private boolean mInitialized;
private boolean mShowUninstalled;
private HeaderPreference mHeader;
private LayoutPreference mHeader;
private Button mUninstallButton;
private boolean mUpdatedSysApp = false;
private TextView mAppVersion;
@@ -259,7 +259,7 @@ public class InstalledAppDetails extends AppInfoBase
}
private void handleHeader() {
mHeader = (HeaderPreference) findPreference(KEY_HEADER);
mHeader = (LayoutPreference) findPreference(KEY_HEADER);
// Get Control button panel
View btnPanel = mHeader.findViewById(R.id.control_buttons_panel);

View File

@@ -27,18 +27,18 @@ import android.view.ViewGroup;
import com.android.settings.R;
import com.android.settings.Utils;
public class HeaderPreference extends Preference {
public class LayoutPreference extends Preference {
private View mRootView;
public HeaderPreference(Context context, AttributeSet attrs) {
public LayoutPreference(Context context, AttributeSet attrs) {
super(context, attrs);
final TypedArray a = context.obtainStyledAttributes(
attrs, com.android.internal.R.styleable.Preference, 0, 0);
int layoutResource = a.getResourceId(com.android.internal.R.styleable.Preference_layout,
0);
if (layoutResource == 0) {
throw new IllegalArgumentException("HeaderPreference requires a layout to be defined");
throw new IllegalArgumentException("LayoutPreference requires a layout to be defined");
}
// Need to create view now so that findViewById can be called immediately.
final View view = LayoutInflater.from(getContext())

View File

@@ -49,6 +49,7 @@ import android.provider.Settings;
import android.util.Log;
import com.android.internal.widget.LockPatternUtils;
import com.android.settings.DropDownPreference;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.Utils;

View File

@@ -26,6 +26,7 @@ import android.preference.Preference.OnPreferenceChangeListener;
import android.provider.Settings.Global;
import android.provider.Settings.System;
import com.android.settings.DropDownPreference;
import com.android.settings.SettingsPreferenceFragment;
/** Helper to manage a two-state or dropdown preference bound to a global or system setting. */

View File

@@ -50,6 +50,7 @@ import android.util.SparseArray;
import android.widget.ScrollView;
import android.widget.TimePicker;
import com.android.settings.DropDownPreference;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.search.BaseSearchIndexProvider;