diff options
author | Alex Ning <chineseperson5@gmail.com> | 2018-10-01 05:45:02 +0000 |
---|---|---|
committer | Alex Ning <chineseperson5@gmail.com> | 2018-10-01 05:45:02 +0000 |
commit | 17ccccfa0e80df0eea1894382cfe85f7e47bcaef (patch) | |
tree | 6fff8dae78aab1d490dc51f5fa66273a0c3a2c61 /app/src/main | |
parent | 1bd9ba61c6cccd1fc318f1698fddc0d13e4723cf (diff) | |
download | infinity-for-reddit-17ccccfa0e80df0eea1894382cfe85f7e47bcaef.tar infinity-for-reddit-17ccccfa0e80df0eea1894382cfe85f7e47bcaef.tar.gz infinity-for-reddit-17ccccfa0e80df0eea1894382cfe85f7e47bcaef.tar.bz2 infinity-for-reddit-17ccccfa0e80df0eea1894382cfe85f7e47bcaef.tar.lz infinity-for-reddit-17ccccfa0e80df0eea1894382cfe85f7e47bcaef.tar.xz infinity-for-reddit-17ccccfa0e80df0eea1894382cfe85f7e47bcaef.tar.zst infinity-for-reddit-17ccccfa0e80df0eea1894382cfe85f7e47bcaef.zip |
Add an error view when loading the image fails in ViewImageActivity.
Diffstat (limited to '')
4 files changed, 114 insertions, 37 deletions
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/ViewImageActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/ViewImageActivity.java index af75b8b2..de897af7 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/ViewImageActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/ViewImageActivity.java @@ -24,10 +24,12 @@ import android.support.v7.app.AppCompatActivity; import android.text.Spannable; import android.text.SpannableString; import android.text.style.ForegroundColorSpan; +import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; +import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.Toast; @@ -59,6 +61,10 @@ public class ViewImageActivity extends AppCompatActivity { static final String IMAGE_URL_KEY = "IUK"; static final String FILE_NAME_KEY = "FNK"; + private ProgressBar mProgressBar; + private GestureImageView mImageView; + private LinearLayout mLoadErrorLinearLayout; + private boolean isActionBarHidden = false; private boolean isDownloading = false; @@ -72,6 +78,8 @@ public class ViewImageActivity extends AppCompatActivity { private float touchY = -1.0f; private float zoom = 1.0f; + private boolean isSwiping = false; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -88,8 +96,20 @@ public class ViewImageActivity extends AppCompatActivity { setTitle(text); final RelativeLayout relativeLayout = findViewById(R.id.parent_relative_layout_view_image_activity); - final GestureImageView imageView = findViewById(R.id.image_view_view_image_activity); - final ProgressBar progressBar = findViewById(R.id.progress_bar_view_image_activity); + mImageView = findViewById(R.id.image_view_view_image_activity); + mProgressBar = findViewById(R.id.progress_bar_view_image_activity); + mLoadErrorLinearLayout = findViewById(R.id.load_image_error_linear_layout_view_image_activity); + + mLoadErrorLinearLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if(!isSwiping) { + mProgressBar.setVisibility(View.VISIBLE); + mLoadErrorLinearLayout.setVisibility(View.GONE); + loadImage(); + } + } + }); final float pxHeight = getResources().getDisplayMetrics().heightPixels; @@ -134,10 +154,13 @@ public class ViewImageActivity extends AppCompatActivity { } }); + loadImage(); + swipe = new Swipe(); swipe.setListener(new SimpleSwipeListener() { @Override public void onSwipingUp(final MotionEvent event) { + isSwiping = true; float nowY = event.getY(); float offset; if (touchY == -1.0f) { @@ -147,21 +170,22 @@ public class ViewImageActivity extends AppCompatActivity { } totalLengthY += offset; touchY = nowY; - imageView.animate() + mImageView.animate() + .y(totalLengthY) + .setDuration(0) + .start(); + mLoadErrorLinearLayout.animate() .y(totalLengthY) .setDuration(0) .start(); + Log.i("total length", Float.toString(totalLengthY)); } @Override public boolean onSwipedUp(final MotionEvent event) { - imageView.animate() - .y(0) - .setDuration(300) - .start(); - + Log.i("total length", Float.toString(totalLengthY)); if (totalLengthY < -pxHeight / 8) { - imageView.animate() + mImageView.animate() .y(-pxHeight) .setDuration(300) .setListener(new Animator.AnimatorListener() { @@ -186,8 +210,17 @@ public class ViewImageActivity extends AppCompatActivity { } }) .start(); + mLoadErrorLinearLayout.animate() + .y(-pxHeight) + .setDuration(300) + .start(); } else { - imageView.animate() + isSwiping = false; + mImageView.animate() + .y(0) + .setDuration(300) + .start(); + mLoadErrorLinearLayout.animate() .y(0) .setDuration(300) .start(); @@ -200,6 +233,7 @@ public class ViewImageActivity extends AppCompatActivity { @Override public void onSwipingDown(final MotionEvent event) { + isSwiping = true; float nowY = event.getY(); float offset; if (touchY == -1.0f) { @@ -209,7 +243,11 @@ public class ViewImageActivity extends AppCompatActivity { } totalLengthY += offset; touchY = nowY; - imageView.animate() + mImageView.animate() + .y(totalLengthY) + .setDuration(0) + .start(); + mLoadErrorLinearLayout.animate() .y(totalLengthY) .setDuration(0) .start(); @@ -218,7 +256,7 @@ public class ViewImageActivity extends AppCompatActivity { @Override public boolean onSwipedDown(final MotionEvent event) { if (totalLengthY > pxHeight / 8) { - imageView.animate() + mImageView.animate() .y(pxHeight) .setDuration(300) .setListener(new Animator.AnimatorListener() { @@ -243,8 +281,17 @@ public class ViewImageActivity extends AppCompatActivity { } }) .start(); + mLoadErrorLinearLayout.animate() + .y(pxHeight) + .setDuration(300) + .start(); } else { - imageView.animate() + isSwiping = false; + mImageView.animate() + .y(0) + .setDuration(300) + .start(); + mLoadErrorLinearLayout.animate() .y(0) .setDuration(300) .start(); @@ -257,7 +304,7 @@ public class ViewImageActivity extends AppCompatActivity { } }); - imageView.getController().addOnStateChangeListener(new GestureController.OnStateChangeListener() { + mImageView.getController().addOnStateChangeListener(new GestureController.OnStateChangeListener() { @Override public void onStateChanged(State state) { zoom = state.getZoom(); @@ -269,22 +316,9 @@ public class ViewImageActivity extends AppCompatActivity { } }); - imageView.getController().getSettings().setPanEnabled(true); - - Glide.with(this).load(mImageUrl).listener(new RequestListener<Drawable>() { - @Override - public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) { - return false; - } - - @Override - public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) { - progressBar.setVisibility(View.GONE); - return false; - } - }).apply(new RequestOptions().fitCenter()).into(imageView); + mImageView.getController().getSettings().setPanEnabled(true); - imageView.setOnClickListener(new View.OnClickListener() { + mImageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (isActionBarHidden) { @@ -307,6 +341,23 @@ public class ViewImageActivity extends AppCompatActivity { }); } + private void loadImage() { + Glide.with(this).load(mImageUrl).listener(new RequestListener<Drawable>() { + @Override + public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) { + mProgressBar.setVisibility(View.GONE); + mLoadErrorLinearLayout.setVisibility(View.VISIBLE); + return false; + } + + @Override + public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) { + mProgressBar.setVisibility(View.GONE); + return false; + } + }).apply(new RequestOptions().fitCenter()).into(mImageView); + } + @Override public boolean onCreateOptionsMenu(Menu menu) { mMenu = menu; diff --git a/app/src/main/res/drawable/ic_error_outline_white_24dp.xml b/app/src/main/res/drawable/ic_error_outline_white_24dp.xml new file mode 100644 index 00000000..93db1791 --- /dev/null +++ b/app/src/main/res/drawable/ic_error_outline_white_24dp.xml @@ -0,0 +1,5 @@ +<vector android:height="24dp" android:tint="#FFFFFF" + android:viewportHeight="24.0" android:viewportWidth="24.0" + android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> + <path android:fillColor="#FF000000" android:pathData="M11,15h2v2h-2zM11,7h2v6h-2zM11.99,2C6.47,2 2,6.48 2,12s4.47,10 9.99,10C17.52,22 22,17.52 22,12S17.52,2 11.99,2zM12,20c-4.42,0 -8,-3.58 -8,-8s3.58,-8 8,-8 8,3.58 8,8 -3.58,8 -8,8z"/> +</vector> diff --git a/app/src/main/res/layout/activity_view_image.xml b/app/src/main/res/layout/activity_view_image.xml index 066557bd..3ffcb7ff 100644 --- a/app/src/main/res/layout/activity_view_image.xml +++ b/app/src/main/res/layout/activity_view_image.xml @@ -20,4 +20,21 @@ android:layout_height="match_parent" app:gest_fillViewport="true" /> + <LinearLayout + android:id="@+id/load_image_error_linear_layout_view_image_activity" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:visibility="gone"> + + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:drawableTop="@drawable/ic_error_outline_white_24dp" + android:layout_gravity="center" + android:gravity="center" + android:textColor="@android:color/white" + android:text="@string/tap_to_retry" /> + + </LinearLayout> + </RelativeLayout> diff --git a/app/src/main/res/layout/item_post.xml b/app/src/main/res/layout/item_post.xml index c34ee582..2813669a 100644 --- a/app/src/main/res/layout/item_post.xml +++ b/app/src/main/res/layout/item_post.xml @@ -11,6 +11,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" + android:background="#FFFFFF" android:id="@+id/linear_layout_view_post_detail"> <RelativeLayout @@ -18,9 +19,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="8dp" - android:layout_marginLeft="16dp" android:layout_marginStart="16dp" - android:layout_marginRight="16dp" android:layout_marginEnd="16dp" android:layout_marginTop="16dp"> @@ -34,11 +33,13 @@ <TextView android:id="@+id/subreddit_text_view_best_post_item" android:layout_width="wrap_content" - android:layout_height="wrap_content" + android:layout_height="match_parent" android:layout_marginStart="16dp" + android:layout_marginEnd="8dp" android:layout_toStartOf="@id/stickied_post_image_view_best_post_item" android:layout_toEndOf="@id/subreddit_icon_circle_image_view_best_post_item" android:layout_centerVertical="true" + android:gravity="center_vertical" android:textColor="#E91E63"/> <ImageView @@ -48,14 +49,16 @@ android:layout_toStartOf="@id/post_time_text_view_best_post_item" android:layout_marginStart="8dp" android:layout_marginEnd="8dp" - android:tint="@color/colorPrimary"/> + android:tint="@color/colorPrimary" + android:visibility="gone"/> <TextView android:id="@+id/post_time_text_view_best_post_item" android:layout_width="wrap_content" - android:layout_height="wrap_content" + android:layout_height="match_parent" android:layout_alignParentEnd="true" - android:layout_centerVertical="true"/> + android:layout_centerVertical="true" + android:gravity="center_vertical"/> </RelativeLayout> @@ -82,7 +85,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/rounded_corner" - android:layout_marginEnd="16dp" + android:layout_marginEnd="8dp" android:layout_centerVertical="true" android:textColor="@android:color/white"/> @@ -92,6 +95,7 @@ android:layout_height="24dp" android:layout_toEndOf="@id/type_text_view_item_best_post" android:layout_centerVertical="true" + android:layout_marginStart="8dp" android:visibility="gone"/> <TextView @@ -224,6 +228,6 @@ <View android:layout_width="match_parent" android:layout_height="1dp" - android:background="#E0E0E0"/> + android:background="#F0F0F0"/> </LinearLayout>
\ No newline at end of file |