Use SeekBar instead of Slider in GalleryActivity to be compatible with old devices

This commit is contained in:
seven332 committed 2016-03-20 22:22:16 +08:00
1 parent 9ad1c9b050
commit 6c08f068d0
5 files changed
+151 -56

No files matched your search

@@ -36,6 +36,7 @@ import android.view.View;
import android.view.WindowManager;
import android.webkit.MimeTypeMap;
import android.widget.FrameLayout;
import android.widget.SeekBar;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
@@ -53,12 +54,12 @@ import com.hippo.ehviewer.gallery.gl.GalleryPageView;
import com.hippo.ehviewer.gallery.gl.GalleryView;
import com.hippo.ehviewer.gallery.gl.ImageView;
import com.hippo.ehviewer.widget.GalleryGuideView;
import com.hippo.ehviewer.widget.ReversibleSeekBar;
import com.hippo.gl.glrenderer.ImageTexture;
import com.hippo.gl.view.GLRootView;
import com.hippo.image.Image;
import com.hippo.unifile.UniFile;
import com.hippo.util.SystemUiHelper;
import com.hippo.widget.Slider;
import com.hippo.yorozuya.AnimationUtils;
import com.hippo.yorozuya.ConcurrentPool;
import com.hippo.yorozuya.SimpleAnimatorListener;
@@ -68,7 +69,7 @@ import com.hippo.yorozuya.ViewUtils;
import java.io.File;
public class GalleryActivity extends EhActivity
implements GalleryProviderListener, Slider.OnSetProgressListener,
implements GalleryProviderListener, SeekBar.OnSeekBarChangeListener,
GalleryView.Listener {
public static final String ACTION_DIR = "dir";
@@ -107,13 +108,13 @@ public class GalleryActivity extends EhActivity
@Nullable
private View mBattery;
@Nullable
private View mSliderPanel;
private View mSeekBarPanel;
@Nullable
private TextView mLeftText;
@Nullable
private TextView mRightText;
@Nullable
private Slider mSlider;
private ReversibleSeekBar mSeekBar;
private int mLayoutMode;
private int mSize;
@@ -124,8 +125,8 @@ public class GalleryActivity extends EhActivity
private final Runnable mRequestLayoutSliderTask = new Runnable() {
@Override
public void run() {
if (mSliderPanel != null) {
mSliderPanel.requestLayout();
if (mSeekBarPanel != null) {
mSeekBarPanel.requestLayout();
}
}
};
@@ -133,8 +134,8 @@ public class GalleryActivity extends EhActivity
private final SimpleAnimatorListener mHideSliderListener = new SimpleAnimatorListener() {
@Override
public void onAnimationEnd(Animator animation) {
if (mSliderPanel != null) {
mSliderPanel.setVisibility(View.INVISIBLE);
if (mSeekBarPanel != null) {
mSeekBarPanel.setVisibility(View.INVISIBLE);
}
}
};
@@ -142,8 +143,8 @@ public class GalleryActivity extends EhActivity
private final Runnable mHideSliderRunnable = new Runnable() {
@Override
public void run() {
if (mSliderPanel != null) {
hideSlider(mSliderPanel);
if (mSeekBarPanel != null) {
hideSlider(mSeekBarPanel);
}
}
};
@@ -259,11 +260,11 @@ public class GalleryActivity extends EhActivity
mClock.setVisibility(Settings.getShowClock() ? View.VISIBLE : View.GONE);
mBattery.setVisibility(Settings.getShowBattery() ? View.VISIBLE : View.GONE);
mSliderPanel = findViewById(R.id.slider_panel);
mLeftText = (TextView) mSliderPanel.findViewById(R.id.left);
mRightText = (TextView) mSliderPanel.findViewById(R.id.right);
mSlider = (Slider) mSliderPanel.findViewById(R.id.slider);
mSlider.setOnSetProgressListener(this);
mSeekBarPanel = findViewById(R.id.seek_bar_panel);
mLeftText = (TextView) mSeekBarPanel.findViewById(R.id.left);
mRightText = (TextView) mSeekBarPanel.findViewById(R.id.right);
mSeekBar = (ReversibleSeekBar) mSeekBarPanel.findViewById(R.id.seek_bar);
mSeekBar.setOnSeekBarChangeListener(this);
mSize = mGalleryProvider.size();
mCurrentIndex = startPage;
@@ -277,10 +278,10 @@ public class GalleryActivity extends EhActivity
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
//if (Settings.getGuideGallery()) {
if (Settings.getGuideGallery()) {
FrameLayout mainLayout = (FrameLayout) ViewUtils.$$(this, R.id.main);
mainLayout.addView(new GalleryGuideView(this));
//}
}
}
@Override
@@ -297,10 +298,10 @@ public class GalleryActivity extends EhActivity
mGalleryProvider = null;
}
mSliderPanel = null;
mSeekBarPanel = null;
mLeftText = null;
mRightText = null;
mSlider = null;
mSeekBar = null;
}
@Override
@@ -429,7 +430,7 @@ public class GalleryActivity extends EhActivity
@SuppressLint("SetTextI18n")
private void updateSlider() {
if (mSlider == null || mRightText == null || mLeftText == null || mSize <= 0 || mCurrentIndex < 0) {
if (mSeekBar == null || mRightText == null || mLeftText == null || mSize <= 0 || mCurrentIndex < 0) {
return;
}
@@ -438,16 +439,16 @@ public class GalleryActivity extends EhActivity
if (mLayoutMode == GalleryView.LAYOUT_MODE_RIGHT_TO_LEFT) {
start = mRightText;
end = mLeftText;
mSlider.setReverse(true);
mSeekBar.setReverse(true);
} else {
start = mLeftText;
end = mRightText;
mSlider.setReverse(false);
mSeekBar.setReverse(false);
}
start.setText(Integer.toString(mCurrentIndex + 1));
end.setText(Integer.toString(mSize));
mSlider.setRange(1, mSize);
mSlider.setProgress(mCurrentIndex + 1);
mSeekBar.setMax(mSize - 1);
mSeekBar.setProgress(mCurrentIndex);
}
@Override
@@ -530,21 +531,31 @@ public class GalleryActivity extends EhActivity
}
@Override
public void onSetProgress(Slider slider, int newProgress, int oldProgress,
boolean byUser, boolean confirm) {
if (confirm && byUser && mGalleryView != null) {
mGalleryView.setCurrentPage(newProgress - 1);
@SuppressLint("SetTextI18n")
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
TextView start;
if (mLayoutMode == GalleryView.LAYOUT_MODE_RIGHT_TO_LEFT) {
start = mRightText;
} else {
start = mLeftText;
}
if (fromUser && null != start) {
start.setText(Integer.toString(progress + 1));
}
}
@Override
public void onFingerDown() {
public void onStartTrackingTouch(SeekBar seekBar) {
SimpleHandler.getInstance().removeCallbacks(mHideSliderRunnable);
}
@Override
public void onFingerUp() {
public void onStopTrackingTouch(SeekBar seekBar) {
SimpleHandler.getInstance().postDelayed(mHideSliderRunnable, HIDE_SLIDER_DELAY);
int progress = seekBar.getProgress();
if (progress != mCurrentIndex && null != mGalleryView) {
mGalleryView.setCurrentPage(progress);
}
}
@Override
@@ -786,16 +797,16 @@ public class GalleryActivity extends EhActivity
}
private void onTapSliderArea() {
if (mSliderPanel == null || mSize <= 0 || mCurrentIndex < 0) {
if (mSeekBarPanel == null || mSize <= 0 || mCurrentIndex < 0) {
return;
}
SimpleHandler.getInstance().removeCallbacks(mHideSliderRunnable);
if (mSliderPanel.getVisibility() == View.VISIBLE) {
hideSlider(mSliderPanel);
if (mSeekBarPanel.getVisibility() == View.VISIBLE) {
hideSlider(mSeekBarPanel);
} else {
showSlider(mSliderPanel);
showSlider(mSeekBarPanel);
SimpleHandler.getInstance().postDelayed(mHideSliderRunnable, HIDE_SLIDER_DELAY);
}
}
@@ -0,0 +1,75 @@
/*
* Copyright 2016 Hippo Seven
*
* 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.hippo.ehviewer.widget;
import android.content.Context;
import android.graphics.Canvas;
import android.support.v7.widget.AppCompatSeekBar;
import android.util.AttributeSet;
import android.view.MotionEvent;
public class ReversibleSeekBar extends AppCompatSeekBar {
private boolean mReverse;
public ReversibleSeekBar(Context context) {
super(context);
}
public ReversibleSeekBar(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ReversibleSeekBar(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public void setReverse(boolean reverse) {
mReverse = reverse;
invalidate();
}
@Override
public void draw(Canvas canvas) {
int saveCount = 0;
if (mReverse) {
saveCount = canvas.save();
float px = this.getWidth() / 2.0f;
float py = this.getHeight() / 2.0f;
canvas.scale(-1, 1, px, py);
}
super.draw(canvas);
if (mReverse) {
canvas.restoreToCount(saveCount);
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float x = 0.0f, y = 0.0f;
if (mReverse) {
x = event.getX();
y = event.getY();
event.setLocation(getWidth() - x, y);
}
boolean result = super.onTouchEvent(event);
if (mReverse) {
event.setLocation(x, y);
}
return result;
}
}
@@ -22,48 +22,47 @@ import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.SeekBar;
import com.hippo.widget.Slider;
public class SeekBarPanel extends LinearLayout {
public class SliderPanel extends LinearLayout {
private SeekBar mSeekBar;
private Slider mSlider;
public SliderPanel(Context context) {
public SeekBarPanel(Context context) {
super(context);
}
public SliderPanel(Context context, AttributeSet attrs) {
public SeekBarPanel(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SliderPanel(Context context, AttributeSet attrs, int defStyleAttr) {
public SeekBarPanel(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public void onViewAdded(View child) {
if (child instanceof Slider) {
mSlider = (Slider) child;
if (child instanceof SeekBar) {
mSeekBar = (SeekBar) child;
}
}
@Override
public void onViewRemoved(View child) {
if (child == mSlider) {
mSlider = null;
if (child == mSeekBar) {
mSeekBar = null;
}
}
@Override
public boolean onTouchEvent(@NonNull MotionEvent event) {
if (mSlider == null) {
if (mSeekBar == null) {
return super.onTouchEvent(event);
} else {
final float offsetX = -mSlider.getLeft();
final float offsetY = -mSlider.getTop();
final float offsetX = -mSeekBar.getLeft();
final float offsetY = -mSeekBar.getTop();
event.offsetLocation(offsetX, offsetY);
mSlider.onTouchEvent(event);
mSeekBar.onTouchEvent(event);
event.offsetLocation(-offsetX, -offsetY);
return true;
}