diff options
author | Jeff Sharkey <jsharkey@android.com> | 2011-08-30 19:59:36 -0700 |
---|---|---|
committer | Jeff Sharkey <jsharkey@android.com> | 2011-08-30 20:00:51 -0700 |
commit | 7a7ea2bf2f8d0760cc3f6768b6b4bb0f6f7f0d7d (patch) | |
tree | 3d058685b2cb376691dd1e4cb82015c1d550e89c | |
parent | 9ca0ef5732d2d25f367b5fa01e8b6562f82d788d (diff) | |
download | packages_apps_Settings-7a7ea2bf2f8d0760cc3f6768b6b4bb0f6f7f0d7d.zip packages_apps_Settings-7a7ea2bf2f8d0760cc3f6768b6b4bb0f6f7f0d7d.tar.gz packages_apps_Settings-7a7ea2bf2f8d0760cc3f6768b6b4bb0f6f7f0d7d.tar.bz2 |
Sync asset drop and smoother animation.
Bug: 5233703
Change-Id: I3fa52da71b78dcfa7842047b427c5121d3ac7e68
39 files changed, 137 insertions, 72 deletions
diff --git a/res/drawable-hdpi/ic_list_sync_anim0.png b/res/drawable-hdpi/ic_list_sync_anim0.png Binary files differdeleted file mode 100755 index dc78905..0000000 --- a/res/drawable-hdpi/ic_list_sync_anim0.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_list_sync_anim1.png b/res/drawable-hdpi/ic_list_sync_anim1.png Binary files differdeleted file mode 100755 index 5fe6b4f..0000000 --- a/res/drawable-hdpi/ic_list_sync_anim1.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_list_sync_anim2.png b/res/drawable-hdpi/ic_list_sync_anim2.png Binary files differdeleted file mode 100755 index d9d68ed..0000000 --- a/res/drawable-hdpi/ic_list_sync_anim2.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_list_sync_anim3.png b/res/drawable-hdpi/ic_list_sync_anim3.png Binary files differdeleted file mode 100755 index 7275c29..0000000 --- a/res/drawable-hdpi/ic_list_sync_anim3.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_sync_anim_holo.png b/res/drawable-hdpi/ic_sync_anim_holo.png Binary files differnew file mode 100644 index 0000000..bc8dc58 --- /dev/null +++ b/res/drawable-hdpi/ic_sync_anim_holo.png diff --git a/res/drawable-hdpi/ic_sync_error.png b/res/drawable-hdpi/ic_sync_error.png Binary files differnew file mode 100644 index 0000000..914d44d --- /dev/null +++ b/res/drawable-hdpi/ic_sync_error.png diff --git a/res/drawable-hdpi/ic_sync_error_holo.png b/res/drawable-hdpi/ic_sync_error_holo.png Binary files differnew file mode 100644 index 0000000..3e34bd0 --- /dev/null +++ b/res/drawable-hdpi/ic_sync_error_holo.png diff --git a/res/drawable-hdpi/ic_sync_green_holo.png b/res/drawable-hdpi/ic_sync_green_holo.png Binary files differnew file mode 100644 index 0000000..2588f3d --- /dev/null +++ b/res/drawable-hdpi/ic_sync_green_holo.png diff --git a/res/drawable-hdpi/ic_sync_grey_holo.png b/res/drawable-hdpi/ic_sync_grey_holo.png Binary files differnew file mode 100644 index 0000000..4c7060d --- /dev/null +++ b/res/drawable-hdpi/ic_sync_grey_holo.png diff --git a/res/drawable-hdpi/ic_sync_red_holo.png b/res/drawable-hdpi/ic_sync_red_holo.png Binary files differnew file mode 100644 index 0000000..b65520d --- /dev/null +++ b/res/drawable-hdpi/ic_sync_red_holo.png diff --git a/res/drawable-mdpi/ic_list_sync_anim0.png b/res/drawable-mdpi/ic_list_sync_anim0.png Binary files differdeleted file mode 100644 index 981a72e..0000000 --- a/res/drawable-mdpi/ic_list_sync_anim0.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_list_sync_anim1.png b/res/drawable-mdpi/ic_list_sync_anim1.png Binary files differdeleted file mode 100644 index 4581ba2..0000000 --- a/res/drawable-mdpi/ic_list_sync_anim1.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_list_sync_anim2.png b/res/drawable-mdpi/ic_list_sync_anim2.png Binary files differdeleted file mode 100644 index b745916..0000000 --- a/res/drawable-mdpi/ic_list_sync_anim2.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_list_sync_anim3.png b/res/drawable-mdpi/ic_list_sync_anim3.png Binary files differdeleted file mode 100644 index 43e453d..0000000 --- a/res/drawable-mdpi/ic_list_sync_anim3.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_sync_anim_holo.png b/res/drawable-mdpi/ic_sync_anim_holo.png Binary files differnew file mode 100644 index 0000000..66db062 --- /dev/null +++ b/res/drawable-mdpi/ic_sync_anim_holo.png diff --git a/res/drawable-mdpi/ic_sync_error.png b/res/drawable-mdpi/ic_sync_error.png Binary files differnew file mode 100644 index 0000000..2b98bca --- /dev/null +++ b/res/drawable-mdpi/ic_sync_error.png diff --git a/res/drawable-mdpi/ic_sync_error_holo.png b/res/drawable-mdpi/ic_sync_error_holo.png Binary files differnew file mode 100644 index 0000000..dd3958e --- /dev/null +++ b/res/drawable-mdpi/ic_sync_error_holo.png diff --git a/res/drawable-mdpi/ic_sync_green_holo.png b/res/drawable-mdpi/ic_sync_green_holo.png Binary files differnew file mode 100644 index 0000000..1c981b6 --- /dev/null +++ b/res/drawable-mdpi/ic_sync_green_holo.png diff --git a/res/drawable-mdpi/ic_sync_grey_holo.png b/res/drawable-mdpi/ic_sync_grey_holo.png Binary files differnew file mode 100644 index 0000000..bb4267f --- /dev/null +++ b/res/drawable-mdpi/ic_sync_grey_holo.png diff --git a/res/drawable-mdpi/ic_sync_red_holo.png b/res/drawable-mdpi/ic_sync_red_holo.png Binary files differnew file mode 100644 index 0000000..36fe6b8 --- /dev/null +++ b/res/drawable-mdpi/ic_sync_red_holo.png diff --git a/res/drawable-xhdpi/ic_list_sync_anim0.png b/res/drawable-xhdpi/ic_list_sync_anim0.png Binary files differdeleted file mode 100644 index 9909f6a..0000000 --- a/res/drawable-xhdpi/ic_list_sync_anim0.png +++ /dev/null diff --git a/res/drawable-xhdpi/ic_list_sync_anim1.png b/res/drawable-xhdpi/ic_list_sync_anim1.png Binary files differdeleted file mode 100644 index f751f2a..0000000 --- a/res/drawable-xhdpi/ic_list_sync_anim1.png +++ /dev/null diff --git a/res/drawable-xhdpi/ic_list_sync_anim2.png b/res/drawable-xhdpi/ic_list_sync_anim2.png Binary files differdeleted file mode 100644 index 374db6a..0000000 --- a/res/drawable-xhdpi/ic_list_sync_anim2.png +++ /dev/null diff --git a/res/drawable-xhdpi/ic_list_sync_anim3.png b/res/drawable-xhdpi/ic_list_sync_anim3.png Binary files differdeleted file mode 100644 index ec3fde6..0000000 --- a/res/drawable-xhdpi/ic_list_sync_anim3.png +++ /dev/null diff --git a/res/drawable-xhdpi/ic_sync_anim_holo.png b/res/drawable-xhdpi/ic_sync_anim_holo.png Binary files differnew file mode 100644 index 0000000..d315e95 --- /dev/null +++ b/res/drawable-xhdpi/ic_sync_anim_holo.png diff --git a/res/drawable-xhdpi/ic_sync_error.png b/res/drawable-xhdpi/ic_sync_error.png Binary files differnew file mode 100644 index 0000000..b9a5357 --- /dev/null +++ b/res/drawable-xhdpi/ic_sync_error.png diff --git a/res/drawable-xhdpi/ic_sync_error_holo.png b/res/drawable-xhdpi/ic_sync_error_holo.png Binary files differnew file mode 100644 index 0000000..85f19bf --- /dev/null +++ b/res/drawable-xhdpi/ic_sync_error_holo.png diff --git a/res/drawable-xhdpi/ic_sync_green_holo.png b/res/drawable-xhdpi/ic_sync_green_holo.png Binary files differnew file mode 100644 index 0000000..95e2d7d --- /dev/null +++ b/res/drawable-xhdpi/ic_sync_green_holo.png diff --git a/res/drawable-xhdpi/ic_sync_grey_holo.png b/res/drawable-xhdpi/ic_sync_grey_holo.png Binary files differnew file mode 100644 index 0000000..10cc48a --- /dev/null +++ b/res/drawable-xhdpi/ic_sync_grey_holo.png diff --git a/res/drawable-xhdpi/ic_sync_red_holo.png b/res/drawable-xhdpi/ic_sync_red_holo.png Binary files differnew file mode 100644 index 0000000..c4b9136 --- /dev/null +++ b/res/drawable-xhdpi/ic_sync_red_holo.png diff --git a/res/drawable/ic_list_sync_anim.xml b/res/drawable/ic_list_sync_anim.xml index b6965c5..e70c300 100644 --- a/res/drawable/ic_list_sync_anim.xml +++ b/res/drawable/ic_list_sync_anim.xml @@ -17,12 +17,8 @@ ** limitations under the License. */ --> -<animation-list - xmlns:android="http://schemas.android.com/apk/res/android" - android:oneshot="false"> - <item android:drawable="@drawable/ic_list_sync_anim0" android:duration="150" /> - <item android:drawable="@drawable/ic_list_sync_anim1" android:duration="150" /> - <item android:drawable="@drawable/ic_list_sync_anim2" android:duration="150" /> - <item android:drawable="@drawable/ic_list_sync_anim3" android:duration="150" /> -</animation-list> +<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android" + android:drawable="@drawable/ic_sync_anim_holo" + android:pivotX="50%" + android:pivotY="50%" /> diff --git a/res/layout/account_sync_screen.xml b/res/layout/account_sync_screen.xml index 5a4bc59..d54d750 100644 --- a/res/layout/account_sync_screen.xml +++ b/res/layout/account_sync_screen.xml @@ -37,7 +37,10 @@ <TextView android:id="@+id/sync_settings_error_info" android:layout_width="match_parent" android:layout_height="wrap_content" - android:text="@string/sync_is_failing" /> + android:layout_margin="8dip" + android:text="@string/sync_is_failing" + android:drawablePadding="8dip" + android:drawableLeft="@drawable/ic_sync_error_holo" /> <!-- <LinearLayout android:id="@+id/remove_account_area" diff --git a/res/layout/manage_accounts_screen.xml b/res/layout/manage_accounts_screen.xml index ce86920..2717805 100644 --- a/res/layout/manage_accounts_screen.xml +++ b/res/layout/manage_accounts_screen.xml @@ -34,6 +34,9 @@ <TextView android:id="@+id/sync_settings_error_info" android:layout_width="match_parent" android:layout_height="wrap_content" - android:text="@string/sync_is_failing" /> + android:layout_margin="8dip" + android:text="@string/sync_is_failing" + android:drawablePadding="8dip" + android:drawableLeft="@drawable/ic_sync_error_holo" /> </LinearLayout> diff --git a/res/layout/preference_widget_sync_toggle.xml b/res/layout/preference_widget_sync_toggle.xml index 6eaa86e..5057aab 100644 --- a/res/layout/preference_widget_sync_toggle.xml +++ b/res/layout/preference_widget_sync_toggle.xml @@ -23,34 +23,23 @@ android:gravity="center_vertical|right"> <ImageView - android:id="@+android:id/sync_failed" - android:src="@drawable/ic_list_syncerror" + android:id="@+id/sync_failed" + android:src="@drawable/ic_sync_error_holo" android:layout_width="wrap_content" - android:layout_marginLeft="6sp" - android:layout_marginBottom="2sp" + android:layout_marginRight="8dip" android:layout_height="wrap_content" /> - <ImageView - android:id="@+android:id/sync_active" + <com.android.settings.widget.AnimatedImageView + android:id="@+id/sync_active" android:src="@drawable/ic_list_sync_anim" android:layout_width="wrap_content" - android:layout_marginLeft="6sp" - android:layout_marginBottom="2sp" - android:layout_height="wrap_content" /> - - <ImageView - android:id="@+android:id/sync_pending" - android:src="@drawable/ic_list_sync_anim0" - android:layout_width="wrap_content" - android:layout_marginLeft="6sp" - android:layout_marginBottom="2sp" - android:layout_height="wrap_content" /> + android:layout_height="wrap_content" + android:layout_marginRight="8dip" /> <CheckBox xmlns:android="http://schemas.android.com/apk/res/android" - android:id="@+android:id/checkbox" + android:id="@android:id/checkbox" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginRight="4sp" android:layout_gravity="center_vertical" android:focusable="false" android:clickable="false" /> diff --git a/src/com/android/settings/AccountPreference.java b/src/com/android/settings/AccountPreference.java index f76d5cb..824420d 100644 --- a/src/com/android/settings/AccountPreference.java +++ b/src/com/android/settings/AccountPreference.java @@ -112,16 +112,16 @@ public class AccountPreference extends Preference { int res; switch (status) { case SYNC_ENABLED: - res = R.drawable.ic_sync_green; + res = R.drawable.ic_sync_green_holo; break; case SYNC_DISABLED: - res = R.drawable.ic_sync_grey; + res = R.drawable.ic_sync_grey_holo; break; case SYNC_ERROR: - res = R.drawable.ic_sync_red; + res = R.drawable.ic_sync_red_holo; break; default: - res = R.drawable.ic_sync_red; + res = R.drawable.ic_sync_red_holo; Log.e(TAG, "Unknown sync status: " + status); } return res; diff --git a/src/com/android/settings/accounts/AccountSyncSettings.java b/src/com/android/settings/accounts/AccountSyncSettings.java index e70cbad..82f9844 100644 --- a/src/com/android/settings/accounts/AccountSyncSettings.java +++ b/src/com/android/settings/accounts/AccountSyncSettings.java @@ -158,8 +158,6 @@ public class AccountSyncSettings extends AccountPreferenceBase { mErrorInfoView = (TextView) rootView.findViewById(R.id.sync_settings_error_info); mErrorInfoView.setVisibility(View.GONE); - mErrorInfoView.setCompoundDrawablesWithIntrinsicBounds( - getResources().getDrawable(R.drawable.ic_list_syncerror), null, null, null); mUserId = (TextView) rootView.findViewById(R.id.user_id); mProviderId = (TextView) rootView.findViewById(R.id.provider_id); diff --git a/src/com/android/settings/accounts/ManageAccountsSettings.java b/src/com/android/settings/accounts/ManageAccountsSettings.java index 05f74dd..4902d8a 100644 --- a/src/com/android/settings/accounts/ManageAccountsSettings.java +++ b/src/com/android/settings/accounts/ManageAccountsSettings.java @@ -110,9 +110,6 @@ public class ManageAccountsSettings extends AccountPreferenceBase mErrorInfoView = (TextView)view.findViewById(R.id.sync_settings_error_info); mErrorInfoView.setVisibility(View.GONE); - mErrorInfoView.setCompoundDrawablesWithIntrinsicBounds( - activity.getResources().getDrawable(R.drawable.ic_list_syncerror), - null, null, null); mAutoSyncCheckbox = (CheckBoxPreference) findPreference(AUTO_SYNC_CHECKBOX_KEY); diff --git a/src/com/android/settings/accounts/SyncStateCheckBoxPreference.java b/src/com/android/settings/accounts/SyncStateCheckBoxPreference.java index 4b9ca81..13081dd 100644 --- a/src/com/android/settings/accounts/SyncStateCheckBoxPreference.java +++ b/src/com/android/settings/accounts/SyncStateCheckBoxPreference.java @@ -16,17 +16,15 @@ package com.android.settings.accounts; -import com.android.settings.R; - +import android.accounts.Account; import android.content.Context; -import android.graphics.drawable.AnimationDrawable; -import android.os.Handler; import android.preference.CheckBoxPreference; import android.util.AttributeSet; import android.view.View; -import android.widget.ImageView; import android.widget.TextView; -import android.accounts.Account; + +import com.android.settings.R; +import com.android.settings.widget.AnimatedImageView; public class SyncStateCheckBoxPreference extends CheckBoxPreference { @@ -59,35 +57,16 @@ public class SyncStateCheckBoxPreference extends CheckBoxPreference { @Override public void onBindView(View view) { super.onBindView(view); - ImageView syncActiveView = (ImageView) view.findViewById(R.id.sync_active); - View syncPendingView = view.findViewById(R.id.sync_pending); - View syncFailedView = view.findViewById(R.id.sync_failed); - - syncActiveView.setVisibility(mIsActive ? View.VISIBLE : View.GONE); - final AnimationDrawable anim = (AnimationDrawable) syncActiveView.getDrawable(); - boolean showError; - boolean showPending; - if (mIsActive) { - new Handler(getContext().getMainLooper()).post(new Runnable() { - public void run() { - anim.start(); - } - }); - showPending = false; - showError = false; - } else { - anim.stop(); - if (mIsPending) { - showPending = true; - showError = false; - } else { - showPending = false; - showError = mFailed; - } - } + final AnimatedImageView syncActiveView = (AnimatedImageView) view.findViewById( + R.id.sync_active); + final View syncFailedView = view.findViewById(R.id.sync_failed); + + final boolean activeVisible = mIsActive || mIsPending; + syncActiveView.setVisibility(activeVisible ? View.VISIBLE : View.GONE); + syncActiveView.setAnimating(mIsActive); - syncFailedView.setVisibility(showError ? View.VISIBLE : View.GONE); - syncPendingView.setVisibility((showPending && !mIsActive) ? View.VISIBLE : View.GONE); + final boolean failedVisible = mFailed && !activeVisible; + syncFailedView.setVisibility(failedVisible ? View.VISIBLE : View.GONE); View checkBox = view.findViewById(android.R.id.checkbox); if (mOneTimeSyncMode) { diff --git a/src/com/android/settings/widget/AnimatedImageView.java b/src/com/android/settings/widget/AnimatedImageView.java new file mode 100644 index 0000000..671d718 --- /dev/null +++ b/src/com/android/settings/widget/AnimatedImageView.java @@ -0,0 +1,100 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.widget; + +import android.content.Context; +import android.graphics.drawable.AnimatedRotateDrawable; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.view.View; +import android.widget.ImageView; + +public class AnimatedImageView extends ImageView { + private AnimatedRotateDrawable mDrawable; + private boolean mAnimating; + + public AnimatedImageView(Context context) { + super(context); + } + + public AnimatedImageView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + private void updateDrawable() { + if (isShown() && mDrawable != null) { + mDrawable.stop(); + } + final Drawable drawable = getDrawable(); + if (drawable instanceof AnimatedRotateDrawable) { + mDrawable = (AnimatedRotateDrawable) drawable; + // TODO: define in drawable xml once we have public attrs. + mDrawable.setFramesCount(56); + mDrawable.setFramesDuration(32); + if (isShown() && mAnimating) { + mDrawable.start(); + } + } else { + mDrawable = null; + } + } + + private void updateAnimating() { + if (mDrawable != null) { + if (isShown() && mAnimating) { + mDrawable.start(); + } else { + mDrawable.stop(); + } + } + } + + @Override + public void setImageDrawable(Drawable drawable) { + super.setImageDrawable(drawable); + updateDrawable(); + } + + @Override + public void setImageResource(int resid) { + super.setImageResource(resid); + updateDrawable(); + } + + @Override + public void onAttachedToWindow() { + super.onAttachedToWindow(); + updateAnimating(); + } + + @Override + public void onDetachedFromWindow() { + super.onDetachedFromWindow(); + updateAnimating(); + } + + public void setAnimating(boolean animating) { + mAnimating = animating; + updateAnimating(); + } + + @Override + protected void onVisibilityChanged(View changedView, int vis) { + super.onVisibilityChanged(changedView, vis); + updateAnimating(); + } +} |