Java tutorial
/******************************************************************************* * Copyright 2011, 2012 Chris Banes. * * 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.handmark.pulltorefresh.library.internal; import com.dwdesign.tweetings.R; import com.dwdesign.tweetings.Constants; import com.dwdesign.tweetings.activity.HomeActivity; import com.dwdesign.tweetings.service.TweetingsService; import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.content.res.ColorStateList; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.Canvas; import android.graphics.drawable.Drawable; import android.media.AudioManager; import android.media.MediaPlayer; import android.support.v4.app.FragmentActivity; import android.text.Html; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; import com.handmark.pulltorefresh.library.PullToRefreshBase.Mode; public class LoadingLayout extends FrameLayout implements Constants { static final int DEFAULT_ROTATION_ANIMATION_DURATION = 600; private final ImageView mHeaderArrow; private final ProgressBar mHeaderProgress; private final TextView mHeaderText; private final TextView mSubHeaderText; private String mPullLabel; private String mRefreshingLabel; private String mReleaseLabel; private MediaPlayer mPlayer; private final Mode mMode; private final Animation mRotateAnimation; private boolean mArrowRotated; private final AudioManager audioManager; private SharedPreferences mPreferences; private final Context mContext; private boolean hasPlayedSound = false; public LoadingLayout(final Context context, final Mode mode, final TypedArray attrs) { super(context); final ViewGroup header = (ViewGroup) LayoutInflater.from(context).inflate(R.layout.pull_to_refresh_header, this); mMode = mode; mHeaderText = (TextView) header.findViewById(R.id.pull_to_refresh_text); mSubHeaderText = (TextView) header.findViewById(R.id.pull_to_refresh_sub_text); mHeaderProgress = (ProgressBar) header.findViewById(R.id.pull_to_refresh_progress); mHeaderArrow = (ImageView) header.findViewById(R.id.pull_to_refresh_arrow); mRotateAnimation = AnimationUtils.loadAnimation(getContext(), R.anim.pull_to_refresh_rotate); audioManager = (AudioManager) context.getSystemService(Activity.AUDIO_SERVICE); mPreferences = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); mContext = context; switch (mode) { case PULL_UP_TO_REFRESH: // Load in labels mPullLabel = context.getString(R.string.pull_to_refresh_from_bottom_pull_label); mRefreshingLabel = context.getString(R.string.pull_to_refresh_from_bottom_refreshing_label); mReleaseLabel = context.getString(R.string.pull_to_refresh_from_bottom_release_label); rotateArrow(); break; case PULL_DOWN_TO_REFRESH: default: // Load in labels mPullLabel = context.getString(R.string.pull_to_refresh_pull_label); mRefreshingLabel = context.getString(R.string.pull_to_refresh_refreshing_label); mReleaseLabel = context.getString(R.string.pull_to_refresh_release_label); break; } if (attrs.hasValue(R.styleable.PullToRefresh_ptrHeaderTextColor)) { final ColorStateList colors = attrs.getColorStateList(R.styleable.PullToRefresh_ptrHeaderTextColor); setTextColor(null != colors ? colors : ColorStateList.valueOf(0xFF000000)); } if (attrs.hasValue(R.styleable.PullToRefresh_ptrHeaderSubTextColor)) { final ColorStateList colors = attrs.getColorStateList(R.styleable.PullToRefresh_ptrHeaderSubTextColor); setSubTextColor(null != colors ? colors : ColorStateList.valueOf(0xFF000000)); } if (attrs.hasValue(R.styleable.PullToRefresh_ptrHeaderBackground)) { final Drawable background = attrs.getDrawable(R.styleable.PullToRefresh_ptrHeaderBackground); if (null != background) { setBackgroundDrawable(background); } } reset(); } public LoadingLayout(final Context context, final TypedArray attrs, final int defStyle) { this(context, Mode.PULL_DOWN_TO_REFRESH, attrs); } public void pullToRefresh() { if (mArrowRotated) { mHeaderArrow.startAnimation(mRotateAnimation); rotateArrow(); mArrowRotated = false; } mHeaderText.setText(Html.fromHtml(mPullLabel)); } public void refreshing() { if (hasPlayedSound) { hasPlayedSound = false; boolean isMuted = false; switch (audioManager.getRingerMode()) { case AudioManager.RINGER_MODE_NORMAL: isMuted = false; break; case AudioManager.RINGER_MODE_SILENT: isMuted = true; break; case AudioManager.RINGER_MODE_VIBRATE: isMuted = true; break; } if (mPreferences.getBoolean(PREFERENCE_KEY_SOUND_NAVIGATION, true)) { if (isMuted != true) { if (mPlayer != null) { if (mPlayer.isPlaying()) { mPlayer.stop(); } mPlayer.release(); } mPlayer = MediaPlayer.create(mContext, R.raw.release); mPlayer.start(); } } } mHeaderText.setText(Html.fromHtml(mRefreshingLabel)); mHeaderArrow.setVisibility(View.INVISIBLE); mHeaderProgress.setVisibility(View.VISIBLE); mSubHeaderText.setVisibility(View.GONE); } public void releaseToRefresh() { if (!mArrowRotated) { mHeaderArrow.startAnimation(mRotateAnimation); rotateArrow(); mArrowRotated = true; if (!hasPlayedSound) { hasPlayedSound = true; boolean isMuted = false; switch (audioManager.getRingerMode()) { case AudioManager.RINGER_MODE_NORMAL: isMuted = false; break; case AudioManager.RINGER_MODE_SILENT: isMuted = true; break; case AudioManager.RINGER_MODE_VIBRATE: isMuted = true; break; } if (mPreferences.getBoolean(PREFERENCE_KEY_SOUND_NAVIGATION, true)) { if (isMuted != true) { if (mPlayer != null) { if (mPlayer.isPlaying()) { mPlayer.stop(); } mPlayer.release(); } mPlayer = MediaPlayer.create(mContext, R.raw.pulldown); mPlayer.start(); } } } } mHeaderText.setText(Html.fromHtml(mReleaseLabel)); } public void reset() { mHeaderText.setText(Html.fromHtml(mPullLabel)); mHeaderArrow.setImageResource(R.drawable.pull_to_refresh_arrow); mHeaderArrow.setVisibility(View.VISIBLE); mHeaderProgress.setVisibility(View.INVISIBLE); mArrowRotated = false; if (mMode == Mode.PULL_UP_TO_REFRESH) { rotateArrow(); } if (TextUtils.isEmpty(mSubHeaderText.getText())) { mSubHeaderText.setVisibility(View.GONE); } else { mSubHeaderText.setVisibility(View.VISIBLE); } } public void setPullLabel(final String pullLabel) { mPullLabel = pullLabel; } public void setRefreshingLabel(final String refreshingLabel) { mRefreshingLabel = refreshingLabel; } public void setReleaseLabel(final String releaseLabel) { mReleaseLabel = releaseLabel; } public void setSubHeaderText(final CharSequence label) { if (TextUtils.isEmpty(label)) { mSubHeaderText.setVisibility(View.GONE); } else { mSubHeaderText.setText(label); mSubHeaderText.setVisibility(View.VISIBLE); } } public void setSubTextColor(final ColorStateList color) { mSubHeaderText.setTextColor(color); } public void setSubTextColor(final int color) { setSubTextColor(ColorStateList.valueOf(color)); } public void setTextColor(final ColorStateList color) { mHeaderText.setTextColor(color); mSubHeaderText.setTextColor(color); } public void setTextColor(final int color) { setTextColor(ColorStateList.valueOf(color)); } private void rotateArrow() { final Drawable drawable = mHeaderArrow.getDrawable(); final Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Config.ARGB_8888); final Canvas canvas = new Canvas(bitmap); canvas.save(); canvas.rotate(180.0f, canvas.getWidth() / 2.0f, canvas.getHeight() / 2.0f); drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); drawable.draw(canvas); canvas.restore(); mHeaderArrow.setImageBitmap(bitmap); } }