From e56f8ae8228cfc0398773ba0947e0e225bea9358 Mon Sep 17 00:00:00 2001 From: Gautam Chibde Date: Tue, 15 May 2018 13:19:42 +0530 Subject: [PATCH 1/3] Created custom class for toolbar --- folioreader/res/layout/folio_activity.xml | 88 +--------- folioreader/res/layout/folio_toolbar.xml | 73 +++++++++ .../ui/folio/activity/FolioActivity.java | 152 ++++-------------- .../view/ConfigBottomSheetDialogFragment.java | 14 +- .../java/com/folioreader/view/FolioToolbar.kt | 102 ++++++++++++ .../folioreader/view/FolioToolbarCallback.kt | 7 + .../folioreader/view/MediaControllerView.kt | 6 +- .../folioreader/view/ObservableWebView.java | 7 +- 8 files changed, 223 insertions(+), 226 deletions(-) create mode 100644 folioreader/res/layout/folio_toolbar.xml create mode 100644 folioreader/src/main/java/com/folioreader/view/FolioToolbar.kt create mode 100644 folioreader/src/main/java/com/folioreader/view/FolioToolbarCallback.kt diff --git a/folioreader/res/layout/folio_activity.xml b/folioreader/res/layout/folio_activity.xml index d601eed67..be99caae4 100644 --- a/folioreader/res/layout/folio_activity.xml +++ b/folioreader/res/layout/folio_activity.xml @@ -12,94 +12,10 @@ android:layout_height="match_parent" app:direction="vertical" /> - - - - - - - - - - - - - - - - - - - - - - - + android:layout_height="?android:attr/actionBarSize" /> + + + + + + + + + + + + + + + + + + + + diff --git a/folioreader/src/main/java/com/folioreader/ui/folio/activity/FolioActivity.java b/folioreader/src/main/java/com/folioreader/ui/folio/activity/FolioActivity.java index 12badb4a8..1b545a0b4 100644 --- a/folioreader/src/main/java/com/folioreader/ui/folio/activity/FolioActivity.java +++ b/folioreader/src/main/java/com/folioreader/ui/folio/activity/FolioActivity.java @@ -16,23 +16,15 @@ package com.folioreader.ui.folio.activity; import android.Manifest; -import android.annotation.TargetApi; import android.content.Intent; import android.content.pm.PackageManager; -import android.os.Build; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.util.Log; -import android.view.View; -import android.view.animation.AccelerateInterpolator; -import android.view.animation.DecelerateInterpolator; -import android.widget.ImageView; -import android.widget.TextView; import android.widget.Toast; import com.folioreader.Config; @@ -50,9 +42,10 @@ import com.folioreader.ui.folio.presenter.MainPresenter; import com.folioreader.util.AppUtil; import com.folioreader.util.FileUtil; -import com.folioreader.util.UiUtil; import com.folioreader.view.ConfigBottomSheetDialogFragment; import com.folioreader.view.DirectionalViewpager; +import com.folioreader.view.FolioToolbar; +import com.folioreader.view.FolioToolbarCallback; import com.folioreader.view.MediaControllerCallback; import com.folioreader.view.MediaControllerView; import com.folioreader.view.ObservableWebView; @@ -80,7 +73,8 @@ public class FolioActivity ObservableWebView.ToolBarListener, ConfigBottomSheetDialogFragment.ConfigDialogCallback, MainMvpView, - MediaControllerCallback{ + MediaControllerCallback, + FolioToolbarCallback { private static final String TAG = "FolioActivity"; @@ -99,20 +93,16 @@ public enum EpubSourceType { private String bookFileName; private static final String HIGHLIGHT_ITEM = "highlight_item"; - public boolean mIsActionBarVisible; private DirectionalViewpager mFolioPageViewPager; - private Toolbar mToolbar; + private FolioToolbar toolbar; private int mChapterPosition; private FolioPageFragmentAdapter mFolioPageFragmentAdapter; private ReadPosition entryReadPosition; - private ConfigBottomSheetDialogFragment mConfigBottomSheetDialogFragment; - private TextView title; private List mSpineReferenceList = new ArrayList<>(); private EpubServer mEpubServer; - private boolean mIsNightMode; private Config mConfig; private String mBookId; private String mEpubFilePath; @@ -122,6 +112,7 @@ public enum EpubSourceType { @Override protected void onCreate(Bundle savedInstanceState) { + setConfig(); super.onCreate(savedInstanceState); setContentView(R.layout.folio_activity); @@ -134,52 +125,32 @@ protected void onCreate(Bundle savedInstanceState) { mEpubFilePath = getIntent().getExtras() .getString(FolioActivity.INTENT_EPUB_SOURCE_PATH); } - setConfig(); mediaControllerView = findViewById(R.id.media_controller_view); - mediaControllerView.onInit(); mediaControllerView.setListeners(this); - if (!mConfig.isShowTts()) { - findViewById(R.id.btn_speaker).setVisibility(View.GONE); - } - - title = (TextView) findViewById(R.id.lbl_center); - - initColors(); - if (ContextCompat.checkSelfPermission(FolioActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(FolioActivity.this, Constants.getWriteExternalStoragePerms(), Constants.WRITE_EXTERNAL_STORAGE_REQUEST); } else { setupBook(); } - mToolbar = (Toolbar) findViewById(R.id.toolbar); - - findViewById(R.id.btn_drawer).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Intent intent = new Intent(FolioActivity.this, ContentHighlightActivity.class); - intent.putExtra(CHAPTER_SELECTED, mSpineReferenceList.get(mChapterPosition).href); - intent.putExtra(FolioReader.INTENT_BOOK_ID, mBookId); - intent.putExtra(Constants.BOOK_TITLE, bookFileName); - startActivityForResult(intent, ACTION_CONTENT_HIGHLIGHT); - overridePendingTransition(R.anim.slide_in_up, R.anim.slide_out_up); - } - }); + toolbar = findViewById(R.id.toolbar); + toolbar.setListeners(this); + } - findViewById(R.id.btn_speaker).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - mediaControllerView.show(); - } - }); + @Override + public void showMediaController() { + mediaControllerView.show(); + } - mIsNightMode = mConfig.isNightMode(); - if (mIsNightMode) { - mToolbar.setBackgroundColor(ContextCompat.getColor(FolioActivity.this, R.color.black)); - title.setTextColor(ContextCompat.getColor(FolioActivity.this, R.color.white)); - mediaControllerView.setNightMode(); - } + @Override + public void startContentHighlightActivity() { + Intent intent = new Intent(FolioActivity.this, ContentHighlightActivity.class); + intent.putExtra(CHAPTER_SELECTED, mSpineReferenceList.get(mChapterPosition).href); + intent.putExtra(FolioReader.INTENT_BOOK_ID, mBookId); + intent.putExtra(Constants.BOOK_TITLE, bookFileName); + startActivityForResult(intent, ACTION_CONTENT_HIGHLIGHT); + overridePendingTransition(R.anim.slide_in_up, R.anim.slide_out_up); } private void initBook(String mEpubFileName, int mEpubRawId, String mEpubFilePath, EpubSourceType mEpubSourceType) { @@ -208,12 +179,6 @@ private void addEpub(String path) throws IOException { private void getEpubResource() { } - @Override - protected void onPostCreate(Bundle savedInstanceState) { - super.onPostCreate(savedInstanceState); - configDrawerLayoutButtons(); - } - @Override public void onOrientationChange(int orentation) { if (orentation == 0) { @@ -252,7 +217,7 @@ public void onPageSelected(int position) { @Override public void onPageScrollStateChanged(int state) { if (state == DirectionalViewpager.SCROLL_STATE_IDLE) { - title.setText(mSpineReferenceList.get(mChapterPosition).bookTitle); + toolbar.setTitle(mSpineReferenceList.get(mChapterPosition).bookTitle); } } }); @@ -271,11 +236,11 @@ public void onPageScrollStateChanged(int state) { * 1. id * 2. href * 3. index + * * @param readPosition Last read position * @return index of the chapter */ private int getChapterIndex(ReadPosition readPosition) { - if (readPosition == null) { return 0; @@ -294,7 +259,6 @@ private int getChapterIndex(ReadPosition readPosition) { } private int getChapterIndex(String caseString, String value) { - for (int i = 0; i < mSpineReferenceList.size(); i++) { switch (caseString) { case "id": @@ -308,37 +272,14 @@ private int getChapterIndex(String caseString, String value) { return 0; } - private void configDrawerLayoutButtons() { - findViewById(R.id.btn_close).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } - }); - - findViewById(R.id.btn_config).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - mConfigBottomSheetDialogFragment = new ConfigBottomSheetDialogFragment(); - mConfigBottomSheetDialogFragment.show(getSupportFragmentManager(), mConfigBottomSheetDialogFragment.getTag()); - } - }); - } - @Override - public void hideOrshowToolBar() { - if (mIsActionBarVisible) { - toolbarAnimateHide(); - } else { - toolbarAnimateShow(); - } + public void showConfigBottomSheetDialogFragment() { + new ConfigBottomSheetDialogFragment().show(getSupportFragmentManager(), ConfigBottomSheetDialogFragment.class.getSimpleName()); } @Override - public void hideToolBarIfVisible() { - if (mIsActionBarVisible) { - toolbarAnimateHide(); - } + public void hideOrShowToolBar() { + toolbar.showOrHideIfVisible(); } @Override @@ -347,7 +288,6 @@ public void setPagerToPosition(String href) { @Override public ReadPosition getEntryReadPosition() { - if (entryReadPosition != null) { ReadPosition tempReadPosition = entryReadPosition; entryReadPosition = null; @@ -363,36 +303,12 @@ public void goToChapter(String href) { if (spine.href.contains(href)) { mChapterPosition = mSpineReferenceList.indexOf(spine); mFolioPageViewPager.setCurrentItem(mChapterPosition); - title.setText(spine.getChapterTitle()); + toolbar.setTitle(spine.getChapterTitle()); break; } } } - private void toolbarAnimateShow() { - if (!mIsActionBarVisible) { - mToolbar.animate().translationY(0).setInterpolator(new DecelerateInterpolator(2)).start(); - mIsActionBarVisible = true; - } - } - - private void toolbarAnimateHide() { - mIsActionBarVisible = false; - mToolbar.animate().translationY(-mToolbar.getHeight()).setInterpolator(new AccelerateInterpolator(2)).start(); - } - - @TargetApi(Build.VERSION_CODES.LOLLIPOP) - private void toolbarSetElevation(float elevation) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - mToolbar.setElevation(elevation); - } - } - - public HighlightImpl setCurrentPagerPostion(HighlightImpl highlightImpl) { -// highlight.setCurrentPagerPostion(mFolioPageViewPager.getCurrentItem()); - return highlightImpl; - } - @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == ACTION_CONTENT_HIGHLIGHT && resultCode == RESULT_OK && data.hasExtra(TYPE)) { @@ -404,7 +320,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (selectedChapterHref.contains(spine.href)) { mChapterPosition = mSpineReferenceList.indexOf(spine); mFolioPageViewPager.setCurrentItem(mChapterPosition); - title.setText(data.getStringExtra(Constants.BOOK_TITLE)); + toolbar.setTitle(data.getStringExtra(Constants.BOOK_TITLE)); EventBus.getDefault().post(new AnchorIdEvent(selectedChapterHref)); break; } @@ -435,7 +351,7 @@ public int getChapterPosition() { public void onLoadPublication(EpubPublication publication) { mSpineReferenceList.addAll(publication.spines); if (publication.metadata.title != null) { - title.setText(publication.metadata.title); + toolbar.setTitle(publication.metadata.title); } if (mBookId == null) { @@ -478,14 +394,6 @@ public void pause() { public void onError() { } - - public void initColors() { - UiUtil.setColorToImage(this, mConfig.getThemeColor(), ((ImageView) findViewById(R.id.btn_close)).getDrawable()); - UiUtil.setColorToImage(this, mConfig.getThemeColor(), ((ImageView) findViewById(R.id.btn_drawer)).getDrawable()); - UiUtil.setColorToImage(this, mConfig.getThemeColor(), ((ImageView) findViewById(R.id.btn_config)).getDrawable()); - UiUtil.setColorToImage(this, mConfig.getThemeColor(), ((ImageView) findViewById(R.id.btn_speaker)).getDrawable()); - } - private void setupBook() { bookFileName = FileUtil.getEpubFilename(this, mEpubSourceType, mEpubFilePath, mEpubRawId); initBook(bookFileName, mEpubRawId, mEpubFilePath, mEpubSourceType); diff --git a/folioreader/src/main/java/com/folioreader/view/ConfigBottomSheetDialogFragment.java b/folioreader/src/main/java/com/folioreader/view/ConfigBottomSheetDialogFragment.java index 5d627ca38..92bfed525 100644 --- a/folioreader/src/main/java/com/folioreader/view/ConfigBottomSheetDialogFragment.java +++ b/folioreader/src/main/java/com/folioreader/view/ConfigBottomSheetDialogFragment.java @@ -319,19 +319,9 @@ public void onClick(View v) { private void setToolBarColor() { if (mIsNightMode) { - ((Activity) getContext()). - findViewById(R.id.toolbar). - setBackgroundColor(getContext().getResources().getColor(R.color.white)); - ((TextView) ((Activity) getContext()). - findViewById(R.id.lbl_center)). - setTextColor(getResources().getColor(R.color.black)); + ((FolioToolbar) ((Activity) getContext()).findViewById(R.id.toolbar)).setNightMode(); } else { - ((Activity) getContext()). - findViewById(R.id.toolbar). - setBackgroundColor(getContext().getResources().getColor(R.color.black)); - ((TextView) ((Activity) getContext()). - findViewById(R.id.lbl_center)). - setTextColor(getResources().getColor(R.color.white)); + ((FolioToolbar) ((Activity) getContext()).findViewById(R.id.toolbar)).setDayMode(); } } diff --git a/folioreader/src/main/java/com/folioreader/view/FolioToolbar.kt b/folioreader/src/main/java/com/folioreader/view/FolioToolbar.kt new file mode 100644 index 000000000..57f84fb03 --- /dev/null +++ b/folioreader/src/main/java/com/folioreader/view/FolioToolbar.kt @@ -0,0 +1,102 @@ +package com.folioreader.view + +import android.app.Activity +import android.content.Context +import android.support.v4.content.ContextCompat +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.View +import android.view.animation.AccelerateInterpolator +import android.view.animation.DecelerateInterpolator +import android.widget.RelativeLayout +import com.folioreader.Config +import com.folioreader.R +import com.folioreader.util.AppUtil +import com.folioreader.util.UiUtil +import kotlinx.android.synthetic.main.folio_toolbar.view.* + +/** + * Created by gautam on 15/5/18. + */ +class FolioToolbar : RelativeLayout { + private lateinit var config: Config + private var visible: Boolean = false + lateinit var callback: FolioToolbarCallback + + constructor(context: Context) : this(context, null, 0) + constructor(context: Context, attributes: AttributeSet?) : this(context, attributes, 0) + constructor(context: Context, attributes: AttributeSet?, defStyle: Int) : super(context, attributes, defStyle) { + LayoutInflater.from(context).inflate(R.layout.folio_toolbar, this) + init() + } + + private fun init() { + config = AppUtil.getSavedConfig(context) + if (config.isNightMode) setNightMode() + if (!config.isShowTts) btn_speaker.visibility = View.GONE + initColors() + initListeners() + } + + private fun initColors() { + UiUtil.setColorToImage(context, config.themeColor, btn_close.drawable) + UiUtil.setColorToImage(context, config.themeColor, btn_drawer.drawable) + UiUtil.setColorToImage(context, config.themeColor, btn_config.drawable) + UiUtil.setColorToImage(context, config.themeColor, btn_speaker.drawable) + } + + private fun initListeners() { + btn_drawer.setOnClickListener { + callback.startContentHighlightActivity() + } + btn_close.setOnClickListener { + (context as Activity).finish() + } + btn_config.setOnClickListener { + callback.showConfigBottomSheetDialogFragment() + } + btn_speaker.setOnClickListener { + callback.showMediaController() + } + } + + fun setListeners(callback: FolioToolbarCallback) { + this.callback = callback + } + + fun setTitle(title: String) { + label_center.text = title + } + + fun showOrHideIfVisible() { + if (visible) { + hide() + } else { + show() + } + visible = !visible + } + + private fun show() { + this.animate().translationY(0f) + .setInterpolator(DecelerateInterpolator(2f)) + .start() + } + + fun setNightMode() { + toolbar_container.setBackgroundColor(ContextCompat.getColor(context, R.color.black)) + label_center.setTextColor(ContextCompat.getColor(context, R.color.white)) + } + + fun setDayMode() { + toolbar_container.setBackgroundColor(ContextCompat.getColor(context, R.color.white)) + label_center.setTextColor(ContextCompat.getColor(context, R.color.black)) + } + + private fun hide() { + this.animate().translationY((-this.height) + .toFloat()) + .setInterpolator(AccelerateInterpolator(2f)) + .start() + } +} diff --git a/folioreader/src/main/java/com/folioreader/view/FolioToolbarCallback.kt b/folioreader/src/main/java/com/folioreader/view/FolioToolbarCallback.kt new file mode 100644 index 000000000..14b90ff05 --- /dev/null +++ b/folioreader/src/main/java/com/folioreader/view/FolioToolbarCallback.kt @@ -0,0 +1,7 @@ +package com.folioreader.view + +interface FolioToolbarCallback { + fun startContentHighlightActivity() + fun showConfigBottomSheetDialogFragment() + fun showMediaController() +} \ No newline at end of file diff --git a/folioreader/src/main/java/com/folioreader/view/MediaControllerView.kt b/folioreader/src/main/java/com/folioreader/view/MediaControllerView.kt index 4e528135b..7a9f14f86 100644 --- a/folioreader/src/main/java/com/folioreader/view/MediaControllerView.kt +++ b/folioreader/src/main/java/com/folioreader/view/MediaControllerView.kt @@ -31,9 +31,10 @@ class MediaControllerView : RelativeLayout { constructor(context: Context, attributes: AttributeSet?) : this(context, attributes, 0) constructor(context: Context, attributes: AttributeSet?, defStyle: Int) : super(context, attributes, defStyle) { LayoutInflater.from(context).inflate(R.layout.view_audio_player, this) + init() } - fun onInit() { + private fun init() { config = AppUtil.getSavedConfig(context) btn_one_and_half_speed.text = Html.fromHtml(context.getString(R.string.one_and_half_speed)) btn_half_speed.text = Html.fromHtml(context.getString(R.string.half_speed_text)) @@ -42,6 +43,7 @@ class MediaControllerView : RelativeLayout { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { playback_speed_Layout.visibility = View.GONE } + if (config.isNightMode) setNightMode() initColors() initListeners() } @@ -132,7 +134,7 @@ class MediaControllerView : RelativeLayout { play_button.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.play_icon)) } - fun setNightMode() { + private fun setNightMode() { container.setBackgroundColor(ContextCompat.getColor(context, R.color.night)) } diff --git a/folioreader/src/main/java/com/folioreader/view/ObservableWebView.java b/folioreader/src/main/java/com/folioreader/view/ObservableWebView.java index afae6c378..d472a31d3 100644 --- a/folioreader/src/main/java/com/folioreader/view/ObservableWebView.java +++ b/folioreader/src/main/java/com/folioreader/view/ObservableWebView.java @@ -28,8 +28,7 @@ public interface SeekBarListener { } public interface ToolBarListener { - void hideOrshowToolBar(); - void hideToolBarIfVisible(); + void hideOrShowToolBar(); } private ScrollListener mScrollListener; @@ -81,7 +80,7 @@ public boolean onTouchEvent(MotionEvent event) { if (mToolBarListener != null && (Math.abs(event.getX() - mDownPosX) < MOVE_THRESHOLD_DP || Math.abs(event.getY() - mDownPosY) < MOVE_THRESHOLD_DP)) { - mToolBarListener.hideOrshowToolBar(); + mToolBarListener.hideOrShowToolBar(); } break; } @@ -90,7 +89,7 @@ public boolean onTouchEvent(MotionEvent event) { @Override protected void onScrollChanged(int l, int t, int oldl, int oldt) { - if (mToolBarListener != null) mToolBarListener.hideToolBarIfVisible(); + if (mToolBarListener != null) mToolBarListener.hideOrShowToolBar(); if (mScrollListener != null) mScrollListener.onScrollChange(t); super.onScrollChanged(l, t, oldl, oldt); } From 50771708ad55afdc191af3ababe9cdf002d4cd4e Mon Sep 17 00:00:00 2001 From: Gautam Chibde Date: Tue, 15 May 2018 16:27:59 +0530 Subject: [PATCH 2/3] convert bottom sheet dialog to kotlin --- folioreader/res/layout/view_config.xml | 69 ++-- folioreader/res/values/strings.xml | 2 + .../ui/folio/activity/FolioActivity.java | 4 +- .../view/ConfigBottomSheetDialogFragment.java | 340 ------------------ .../view/ConfigBottomSheetDialogFragment.kt | 225 ++++++++++++ 5 files changed, 273 insertions(+), 367 deletions(-) delete mode 100644 folioreader/src/main/java/com/folioreader/view/ConfigBottomSheetDialogFragment.java create mode 100644 folioreader/src/main/java/com/folioreader/view/ConfigBottomSheetDialogFragment.kt diff --git a/folioreader/res/layout/view_config.xml b/folioreader/res/layout/view_config.xml index fcc7ed791..2af64d0b0 100644 --- a/folioreader/res/layout/view_config.xml +++ b/folioreader/res/layout/view_config.xml @@ -1,46 +1,51 @@ - + android:background="@color/white" + android:orientation="vertical"> + + + + + + + + + + - + + + + + android:background="@color/grey_color" + android:visibility="gone" /> + + android:visibility="gone" + android:weightSum="4.0"> + + - - \ No newline at end of file + + \ No newline at end of file diff --git a/folioreader/res/values/strings.xml b/folioreader/res/values/strings.xml index c9867a1bd..0ae3da5f8 100644 --- a/folioreader/res/values/strings.xml +++ b/folioreader/res/values/strings.xml @@ -91,4 +91,6 @@ Dictionary Wikipedia Cannot open epub it needs storage access ! + horizontal + vertical diff --git a/folioreader/src/main/java/com/folioreader/ui/folio/activity/FolioActivity.java b/folioreader/src/main/java/com/folioreader/ui/folio/activity/FolioActivity.java index 1b545a0b4..07d57f19d 100644 --- a/folioreader/src/main/java/com/folioreader/ui/folio/activity/FolioActivity.java +++ b/folioreader/src/main/java/com/folioreader/ui/folio/activity/FolioActivity.java @@ -180,8 +180,8 @@ private void getEpubResource() { } @Override - public void onOrientationChange(int orentation) { - if (orentation == 0) { + public void onOrientationChange(int orientation) { + if (orientation == 0) { mFolioPageViewPager.setDirection(DirectionalViewpager.Direction.VERTICAL); mFolioPageFragmentAdapter = new FolioPageFragmentAdapter(getSupportFragmentManager(), diff --git a/folioreader/src/main/java/com/folioreader/view/ConfigBottomSheetDialogFragment.java b/folioreader/src/main/java/com/folioreader/view/ConfigBottomSheetDialogFragment.java deleted file mode 100644 index 92bfed525..000000000 --- a/folioreader/src/main/java/com/folioreader/view/ConfigBottomSheetDialogFragment.java +++ /dev/null @@ -1,340 +0,0 @@ -package com.folioreader.view; - -import android.animation.Animator; -import android.animation.ArgbEvaluator; -import android.animation.ValueAnimator; -import android.app.Activity; -import android.graphics.drawable.Drawable; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.design.widget.BottomSheetBehavior; -import android.support.design.widget.BottomSheetDialog; -import android.support.design.widget.BottomSheetDialogFragment; -import android.support.design.widget.CoordinatorLayout; -import android.support.v4.content.ContextCompat; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.view.ViewTreeObserver; -import android.widget.FrameLayout; -import android.widget.ImageView; -import android.widget.RelativeLayout; -import android.widget.SeekBar; -import android.widget.TextView; - -import com.folioreader.Config; -import com.folioreader.Constants; -import com.folioreader.R; -import com.folioreader.model.event.ReloadDataEvent; -import com.folioreader.util.AppUtil; -import com.folioreader.util.UiUtil; - -import org.greenrobot.eventbus.EventBus; - - -/** - * Created by mobisys2 on 11/16/2016. - */ - -public class ConfigBottomSheetDialogFragment extends BottomSheetDialogFragment implements View.OnClickListener { - - public static final int DAY_BUTTON = 30; - public static final int NIGHT_BUTTON = 31; - private static final int FADE_DAY_NIGHT_MODE = 500; - - private CoordinatorLayout.Behavior mBehavior; - private boolean mIsNightMode = false; - - - private RelativeLayout mContainer; - private ImageView mDayButton; - private ImageView mNightButton; - private SeekBar mFontSizeSeekBar; - private View mDialogView; - private ConfigDialogCallback mConfigDialogCallback; - private Config mConfig; - - public interface ConfigDialogCallback { - void onOrientationChange(int orentation); - } - - @Nullable - @Override - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - return inflater.inflate(R.layout.view_config, container); - } - - @Override - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { - @Override - public void onGlobalLayout() { - BottomSheetDialog dialog = (BottomSheetDialog) getDialog(); - FrameLayout bottomSheet = (FrameLayout) - dialog.findViewById(android.support.design.R.id.design_bottom_sheet); - BottomSheetBehavior behavior = BottomSheetBehavior.from(bottomSheet); - behavior.setState(BottomSheetBehavior.STATE_EXPANDED); - behavior.setPeekHeight(0); - } - }); - - mDialogView = view; - mConfig = AppUtil.getSavedConfig(getActivity()); - initViews(); - } - - @Override - public void onDestroy() { - super.onDestroy(); - mDialogView.getViewTreeObserver().addOnGlobalLayoutListener(null); - } - - private void initViews() { - inflateView(); - configFonts(); - mFontSizeSeekBar.setProgress(mConfig.getFontSize()); - configSeekBar(); - selectFont(mConfig.getFont(), false); - mIsNightMode = mConfig.isNightMode(); - if (mIsNightMode) { - mContainer.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.night)); - } else { - mContainer.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.white)); - } - - if (mIsNightMode) { - mDayButton.setSelected(false); - mNightButton.setSelected(true); - UiUtil.setColorToImage(getActivity(), mConfig.getThemeColor(), mNightButton.getDrawable()); - UiUtil.setColorToImage(getActivity(), R.color.app_gray, mDayButton.getDrawable()); - } else { - mDayButton.setSelected(true); - mNightButton.setSelected(false); - UiUtil.setColorToImage(getActivity(), mConfig.getThemeColor(), mDayButton.getDrawable()); - UiUtil.setColorToImage(getActivity(), R.color.app_gray, mNightButton.getDrawable()); - } - - mConfigDialogCallback = (ConfigDialogCallback) getActivity(); - } - - private void inflateView() { - mContainer = (RelativeLayout) mDialogView.findViewById(R.id.container); - mFontSizeSeekBar = (SeekBar) mDialogView.findViewById(R.id.seekbar_font_size); - mDayButton = (ImageView) mDialogView.findViewById(R.id.day_button); - mNightButton = (ImageView) mDialogView.findViewById(R.id.night_button); - mDayButton.setTag(DAY_BUTTON); - mNightButton.setTag(NIGHT_BUTTON); - mDayButton.setOnClickListener(this); - mNightButton.setOnClickListener(this); - mDialogView.findViewById(R.id.btn_vertical_orentation).setSelected(true); - } - - - private void configFonts() { - ((StyleableTextView) mDialogView.findViewById(R.id.btn_font_andada)).setTextColor(UiUtil.getColorList(getActivity(), mConfig.getThemeColor(), R.color.grey_color)); - ((StyleableTextView) mDialogView.findViewById(R.id.btn_font_lato)).setTextColor(UiUtil.getColorList(getActivity(), mConfig.getThemeColor(), R.color.grey_color)); - ((StyleableTextView) mDialogView.findViewById(R.id.btn_font_lora)).setTextColor(UiUtil.getColorList(getActivity(), mConfig.getThemeColor(), R.color.grey_color)); - ((StyleableTextView) mDialogView.findViewById(R.id.btn_font_raleway)).setTextColor(UiUtil.getColorList(getActivity(), mConfig.getThemeColor(), R.color.grey_color)); - mDialogView.findViewById(R.id.btn_font_andada).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - selectFont(Constants.FONT_ANDADA, true); - } - }); - - mDialogView.findViewById(R.id.btn_font_lato).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - selectFont(Constants.FONT_LATO, true); - } - }); - - mDialogView.findViewById(R.id.btn_font_lora).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - selectFont(Constants.FONT_LORA, true); - } - }); - - mDialogView.findViewById(R.id.btn_font_raleway).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - selectFont(Constants.FONT_RALEWAY, true); - } - }); - - - mDialogView.findViewById(R.id.btn_horizontal_orentation).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - mConfigDialogCallback.onOrientationChange(1); - mDialogView.findViewById(R.id.btn_horizontal_orentation).setSelected(true); - mDialogView.findViewById(R.id.btn_vertical_orentation).setSelected(false); - } - }); - - mDialogView.findViewById(R.id.btn_vertical_orentation).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - mConfigDialogCallback.onOrientationChange(0); - mDialogView.findViewById(R.id.btn_horizontal_orentation).setSelected(false); - mDialogView.findViewById(R.id.btn_vertical_orentation).setSelected(true); - } - }); - } - - private void selectFont(int selectedFont, boolean isReloadNeeded) { - if (selectedFont == Constants.FONT_ANDADA) { - mDialogView.findViewById(R.id.btn_font_andada).setSelected(true); - mDialogView.findViewById(R.id.btn_font_lato).setSelected(false); - mDialogView.findViewById(R.id.btn_font_lora).setSelected(false); - mDialogView.findViewById(R.id.btn_font_raleway).setSelected(false); - } else if (selectedFont == Constants.FONT_LATO) { - mDialogView.findViewById(R.id.btn_font_andada).setSelected(false); - mDialogView.findViewById(R.id.btn_font_lato).setSelected(true); - mDialogView.findViewById(R.id.btn_font_lora).setSelected(false); - mDialogView.findViewById(R.id.btn_font_raleway).setSelected(false); - } else if (selectedFont == Constants.FONT_LORA) { - mDialogView.findViewById(R.id.btn_font_andada).setSelected(false); - mDialogView.findViewById(R.id.btn_font_lato).setSelected(false); - mDialogView.findViewById(R.id.btn_font_lora).setSelected(true); - mDialogView.findViewById(R.id.btn_font_raleway).setSelected(false); - } else if (selectedFont == Constants.FONT_RALEWAY) { - mDialogView.findViewById(R.id.btn_font_andada).setSelected(false); - mDialogView.findViewById(R.id.btn_font_lato).setSelected(false); - mDialogView.findViewById(R.id.btn_font_lora).setSelected(false); - mDialogView.findViewById(R.id.btn_font_raleway).setSelected(true); - } - - mConfig.setFont(selectedFont); - //if (mConfigDialogCallback != null) mConfigDialogCallback.onConfigChange(); - if (isAdded() && isReloadNeeded) { - AppUtil.saveConfig(getActivity(),mConfig); - EventBus.getDefault().post(new ReloadDataEvent()); - } - } - - private void toggleBlackTheme() { - - int day = getResources().getColor(R.color.white); - int night = getResources().getColor(R.color.night); - int darkNight = getResources().getColor(R.color.dark_night); - final int diffNightDark = night - darkNight; - - ValueAnimator colorAnimation = ValueAnimator.ofObject(new ArgbEvaluator(), - mIsNightMode ? night : day, mIsNightMode ? day : night); - colorAnimation.setDuration(FADE_DAY_NIGHT_MODE); - colorAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { - - @Override - public void onAnimationUpdate(ValueAnimator animator) { - int value = (int) animator.getAnimatedValue(); - mContainer.setBackgroundColor(value); - } - }); - - colorAnimation.addListener(new Animator.AnimatorListener() { - @Override - public void onAnimationStart(Animator animator) { - } - - @Override - public void onAnimationEnd(Animator animator) { - mIsNightMode = !mIsNightMode; - mConfig.setNightMode(mIsNightMode); - AppUtil.saveConfig(getActivity(),mConfig); - EventBus.getDefault().post(new ReloadDataEvent()); - } - - @Override - public void onAnimationCancel(Animator animator) { - } - - @Override - public void onAnimationRepeat(Animator animator) { - } - }); - - colorAnimation.setDuration(FADE_DAY_NIGHT_MODE); - colorAnimation.start(); - } - - private void configSeekBar() { - Drawable thumbDrawable = ContextCompat.getDrawable(getActivity(), R.drawable.seekbar_thumb); - UiUtil.setColorToImage(getActivity(), mConfig.getThemeColor(), (thumbDrawable)); - UiUtil.setColorToImage(getActivity(), R.color.grey_color, mFontSizeSeekBar.getProgressDrawable()); - mFontSizeSeekBar.setThumb(thumbDrawable); - - mFontSizeSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { - @Override - public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { - mConfig.setFontSize(progress); - AppUtil.saveConfig(getActivity(),mConfig); - EventBus.getDefault().post(new ReloadDataEvent()); - } - - @Override - public void onStartTrackingTouch(SeekBar seekBar) { - } - - @Override - public void onStopTrackingTouch(SeekBar seekBar) { - } - }); - } - - - @Override - public void onClick(View v) { - switch (((Integer) v.getTag())) { - case DAY_BUTTON: - if (mIsNightMode) { - mIsNightMode = true; - toggleBlackTheme(); - mDayButton.setSelected(true); - mNightButton.setSelected(false); - setToolBarColor(); - setAudioPlayerBackground(); - UiUtil.setColorToImage(getActivity(), R.color.app_gray, mNightButton.getDrawable()); - UiUtil.setColorToImage(getActivity(), mConfig.getThemeColor(), mDayButton.getDrawable()); - } - break; - case NIGHT_BUTTON: - if (!mIsNightMode) { - mIsNightMode = false; - toggleBlackTheme(); - mDayButton.setSelected(false); - mNightButton.setSelected(true); - UiUtil.setColorToImage(getActivity(), mConfig.getThemeColor(), mNightButton.getDrawable()); - UiUtil.setColorToImage(getActivity(), R.color.app_gray, mDayButton.getDrawable()); - setToolBarColor(); - setAudioPlayerBackground(); - } - break; - default: - break; - } - } - - private void setToolBarColor() { - if (mIsNightMode) { - ((FolioToolbar) ((Activity) getContext()).findViewById(R.id.toolbar)).setNightMode(); - } else { - ((FolioToolbar) ((Activity) getContext()).findViewById(R.id.toolbar)).setDayMode(); - } - - } - - private void setAudioPlayerBackground() { - if (mIsNightMode) { - ((Activity) getContext()). - findViewById(R.id.container). - setBackgroundColor(ContextCompat.getColor(getContext(), R.color.white)); - } else { - ((Activity) getContext()). - findViewById(R.id.container). - setBackgroundColor(ContextCompat.getColor(getContext(), R.color.night)); - } - } -} diff --git a/folioreader/src/main/java/com/folioreader/view/ConfigBottomSheetDialogFragment.kt b/folioreader/src/main/java/com/folioreader/view/ConfigBottomSheetDialogFragment.kt new file mode 100644 index 000000000..3c663c0e4 --- /dev/null +++ b/folioreader/src/main/java/com/folioreader/view/ConfigBottomSheetDialogFragment.kt @@ -0,0 +1,225 @@ +package com.folioreader.view + +import android.animation.Animator +import android.animation.ArgbEvaluator +import android.animation.ValueAnimator +import android.app.Activity +import android.os.Bundle +import android.support.design.widget.BottomSheetBehavior +import android.support.design.widget.BottomSheetDialog +import android.support.design.widget.BottomSheetDialogFragment +import android.support.v4.content.ContextCompat +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.FrameLayout +import android.widget.SeekBar +import com.folioreader.Config +import com.folioreader.Constants +import com.folioreader.R +import com.folioreader.model.event.ReloadDataEvent +import com.folioreader.util.AppUtil +import com.folioreader.util.UiUtil +import kotlinx.android.synthetic.main.view_config.* +import org.greenrobot.eventbus.EventBus + +/** + * Created by mobisys2 on 11/16/2016. + */ +class ConfigBottomSheetDialogFragment : BottomSheetDialogFragment() { + private lateinit var callback: ConfigDialogCallback + private lateinit var config: Config + private var isNightMode = false + + interface ConfigDialogCallback { + fun onOrientationChange(orientation: Int) + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + return inflater.inflate(R.layout.view_config, container) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + view.viewTreeObserver.addOnGlobalLayoutListener { + val dialog = dialog as BottomSheetDialog + val bottomSheet = dialog.findViewById(android.support.design.R.id.design_bottom_sheet) as FrameLayout? + val behavior = BottomSheetBehavior.from(bottomSheet!!) + behavior.state = BottomSheetBehavior.STATE_EXPANDED + behavior.peekHeight = 0 + } + + config = AppUtil.getSavedConfig(activity) + initViews() + } + + override fun onDestroy() { + super.onDestroy() + view?.viewTreeObserver?.addOnGlobalLayoutListener(null) + } + + private fun initViews() { + inflateView() + configFonts() + view_config_font_size_seek_bar.progress = config.fontSize + configSeekBar() + selectFont(config.font, false) + isNightMode = config.isNightMode + if (isNightMode) { + container.setBackgroundColor(ContextCompat.getColor(context!!, R.color.night)) + } else { + container.setBackgroundColor(ContextCompat.getColor(context!!, R.color.white)) + } + + if (isNightMode) { + view_config_ib_day_mode.isSelected = false + view_config_ib_night_mode.isSelected = true + UiUtil.setColorToImage(activity, config.themeColor, view_config_ib_night_mode.drawable) + UiUtil.setColorToImage(activity, R.color.app_gray, view_config_ib_day_mode.drawable) + } else { + view_config_ib_day_mode.isSelected = true + view_config_ib_night_mode.isSelected = false + UiUtil.setColorToImage(activity, config.themeColor, view_config_ib_day_mode!!.drawable) + UiUtil.setColorToImage(activity, R.color.app_gray, view_config_ib_night_mode.drawable) + } + + callback = activity as ConfigDialogCallback + } + + private fun inflateView() { + view_config_ib_day_mode.setOnClickListener { + isNightMode = true + toggleBlackTheme() + view_config_ib_day_mode.isSelected = true + view_config_ib_night_mode.isSelected = false + setToolBarColor() + setAudioPlayerBackground() + UiUtil.setColorToImage(activity, R.color.app_gray, view_config_ib_night_mode.drawable) + UiUtil.setColorToImage(activity, config.themeColor, view_config_ib_day_mode.drawable) + } + view_config_ib_night_mode.setOnClickListener { + isNightMode = false + toggleBlackTheme() + view_config_ib_day_mode.isSelected = false + view_config_ib_night_mode.isSelected = true + UiUtil.setColorToImage(activity, config.themeColor, view_config_ib_day_mode.drawable) + UiUtil.setColorToImage(activity, R.color.app_gray, view_config_ib_night_mode.drawable) + setToolBarColor() + setAudioPlayerBackground() + } + btn_vertical_orientation.isSelected = true + } + + private fun configFonts() { + view_config_font_andada.setTextColor(UiUtil.getColorList(activity, config.themeColor, R.color.grey_color)) + view_config_font_lato.setTextColor(UiUtil.getColorList(activity, config.themeColor, R.color.grey_color)) + view_config_font_lora.setTextColor(UiUtil.getColorList(activity, config.themeColor, R.color.grey_color)) + view_config_font_raleway.setTextColor(UiUtil.getColorList(activity, config.themeColor, R.color.grey_color)) + view_config_font_andada.setOnClickListener { selectFont(Constants.FONT_ANDADA, true) } + view_config_font_lato.setOnClickListener { selectFont(Constants.FONT_LATO, true) } + view_config_font_lora.setOnClickListener { selectFont(Constants.FONT_LORA, true) } + view_config_font_raleway.setOnClickListener { selectFont(Constants.FONT_RALEWAY, true) } + btn_horizontal_orientation.setOnClickListener { + callback.onOrientationChange(1) + btn_horizontal_orientation.isSelected = true + btn_vertical_orientation.isSelected = false + } + + btn_vertical_orientation.setOnClickListener { + callback.onOrientationChange(0) + btn_horizontal_orientation.isSelected = false + btn_vertical_orientation.isSelected = true + } + } + + private fun selectFont(selectedFont: Int, isReloadNeeded: Boolean) { + when (selectedFont) { + Constants.FONT_ANDADA -> setSelectedFont(true, false, false, false) + Constants.FONT_LATO -> setSelectedFont(false, true, false, false) + Constants.FONT_LORA -> setSelectedFont(false, false, true, false) + Constants.FONT_RALEWAY -> setSelectedFont(false, false, false, true) + } + config.font = selectedFont + if (isAdded && isReloadNeeded) { + AppUtil.saveConfig(activity, config) + EventBus.getDefault().post(ReloadDataEvent()) + } + } + + private fun setSelectedFont(andada: Boolean, lato: Boolean, lora: Boolean, raleway: Boolean) { + view_config_font_andada.isSelected = andada + view_config_font_lato.isSelected = lato + view_config_font_lora.isSelected = lora + view_config_font_raleway.isSelected = raleway + } + + private fun toggleBlackTheme() { + val day = ContextCompat.getColor(context!!, R.color.white) + val night = ContextCompat.getColor(context!!, R.color.night) + val colorAnimation = ValueAnimator.ofObject(ArgbEvaluator(), + if (isNightMode) night else day, if (isNightMode) day else night) + colorAnimation.duration = FADE_DAY_NIGHT_MODE.toLong() + colorAnimation.addUpdateListener { animator -> + val value = animator.animatedValue as Int + container.setBackgroundColor(value) + } + + colorAnimation.addListener(object : Animator.AnimatorListener { + override fun onAnimationStart(animator: Animator) {} + + override fun onAnimationEnd(animator: Animator) { + isNightMode = !isNightMode + config.isNightMode = isNightMode + AppUtil.saveConfig(activity, config) + EventBus.getDefault().post(ReloadDataEvent()) + } + + override fun onAnimationCancel(animator: Animator) {} + + override fun onAnimationRepeat(animator: Animator) {} + }) + + colorAnimation.duration = FADE_DAY_NIGHT_MODE.toLong() + colorAnimation.start() + } + + private fun configSeekBar() { + val thumbDrawable = ContextCompat.getDrawable(activity!!, R.drawable.seekbar_thumb) + UiUtil.setColorToImage(activity, config.themeColor, thumbDrawable) + UiUtil.setColorToImage(activity, R.color.grey_color, view_config_font_size_seek_bar.progressDrawable) + view_config_font_size_seek_bar.thumb = thumbDrawable + + view_config_font_size_seek_bar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener { + override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { + config.fontSize = progress + AppUtil.saveConfig(activity, config) + EventBus.getDefault().post(ReloadDataEvent()) + } + + override fun onStartTrackingTouch(seekBar: SeekBar) {} + + override fun onStopTrackingTouch(seekBar: SeekBar) {} + }) + } + + private fun setToolBarColor() { + if (isNightMode) { + ((context as Activity).findViewById(R.id.toolbar) as FolioToolbar).setDayMode() + } else { + ((context as Activity).findViewById(R.id.toolbar) as FolioToolbar).setNightMode() + } + + } + + private fun setAudioPlayerBackground() { + if (isNightMode) { + (context as Activity).findViewById(R.id.container).setBackgroundColor(ContextCompat.getColor(context!!, R.color.white)) + } else { + (context as Activity).findViewById(R.id.container).setBackgroundColor(ContextCompat.getColor(context!!, R.color.night)) + } + } + + companion object { + const val FADE_DAY_NIGHT_MODE = 500 + } +} From c021c4540779fcee19b1742ba705fa7e0bbfada6 Mon Sep 17 00:00:00 2001 From: Gautam Chibde Date: Tue, 15 May 2018 19:06:44 +0530 Subject: [PATCH 3/3] Constraint layout for view_config --- folioreader/build.gradle | 1 + .../ic_format_font_black_24dp.png | Bin 0 -> 606 bytes .../ic_format_font_black_36dp.png | Bin 0 -> 763 bytes .../ic_format_font_black_24dp.png | Bin 0 -> 470 bytes .../ic_format_font_black_36dp.png | Bin 0 -> 606 bytes .../ic_format_font_black_24dp.png | Bin 0 -> 574 bytes .../ic_format_font_black_36dp.png | Bin 0 -> 711 bytes .../res/drawable-xhdpi/icon_font_big.png | Bin 888 -> 0 bytes .../res/drawable-xhdpi/icon_font_small.png | Bin 576 -> 0 bytes .../ic_format_font_black_24dp.png | Bin 0 -> 711 bytes .../ic_format_font_black_36dp.png | Bin 0 -> 1034 bytes .../ic_format_font_black_24dp.png | Bin 0 -> 954 bytes .../ic_format_font_black_36dp.png | Bin 0 -> 1438 bytes folioreader/res/layout/view_config.xml | 369 ++++++++++-------- .../view/ConfigBottomSheetDialogFragment.kt | 16 +- .../java/com/folioreader/view/FolioToolbar.kt | 6 +- sample/build.gradle | 1 + 17 files changed, 214 insertions(+), 179 deletions(-) create mode 100644 folioreader/res/drawable-hdpi/ic_format_font_black_24dp.png create mode 100644 folioreader/res/drawable-hdpi/ic_format_font_black_36dp.png create mode 100644 folioreader/res/drawable-mdpi/ic_format_font_black_24dp.png create mode 100644 folioreader/res/drawable-mdpi/ic_format_font_black_36dp.png create mode 100644 folioreader/res/drawable-xhdpi/ic_format_font_black_24dp.png create mode 100644 folioreader/res/drawable-xhdpi/ic_format_font_black_36dp.png delete mode 100644 folioreader/res/drawable-xhdpi/icon_font_big.png delete mode 100644 folioreader/res/drawable-xhdpi/icon_font_small.png create mode 100644 folioreader/res/drawable-xxhdpi/ic_format_font_black_24dp.png create mode 100644 folioreader/res/drawable-xxhdpi/ic_format_font_black_36dp.png create mode 100644 folioreader/res/drawable-xxxhdpi/ic_format_font_black_24dp.png create mode 100644 folioreader/res/drawable-xxxhdpi/ic_format_font_black_36dp.png diff --git a/folioreader/build.gradle b/folioreader/build.gradle index 955bbc5f2..95ecdb680 100644 --- a/folioreader/build.gradle +++ b/folioreader/build.gradle @@ -87,6 +87,7 @@ dependencies { implementation project(':webViewMarker') //noinspection GradleDependency + implementation 'com.android.support.constraint:constraint-layout:1.1.0' implementation "com.android.support:appcompat-v7:$ANDROID_LIB_VERSION" implementation "com.android.support:recyclerview-v7:$ANDROID_LIB_VERSION" implementation "com.android.support:support-v4:$ANDROID_LIB_VERSION" diff --git a/folioreader/res/drawable-hdpi/ic_format_font_black_24dp.png b/folioreader/res/drawable-hdpi/ic_format_font_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..f09d60053cbcb2c7d2b631f2533613c1c3de840d GIT binary patch literal 606 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBSkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+eS5K)hhiu0R{01Y44~ zy9wy$!fk$L9koEv$x0Bg+K;z{-T^vIq4!@nYk@t{+fUEoj#smSWmJFwd zeG@ebXY+Z9B`~rrXpGe06n1c&5U}C!&6BK(pOyxv{J#D3-^aPkvQ}4|*C*vL_B1-O zK4*HBtvtm6 zUrc9}6_~fvWyga}SNvK(Gx!Kv8uZ-kRo%lEntJoHtoD=DTt-JD_ocJX% z)aJU)x)~ZfWV#+sx$F37LfSOfor_gZh!nD#DGG08ah)&A>)7T|zJ=xLsWr=3C9`%c zX1qREH00*eR>LE6Wo}eict4El-Ic6u(fdE~S3<@5Q}LoIh09GHgUX`>Rn98Bet6Sp zW8Sn>r+XI<+h$o_eOO<}{)THo^^YSeXMtg+TH+c}l9E`GYL#4+3Zxi}3=A!F4NP?n zO+yTgtPG5-jLo$T46F4$pc15vV}}WJ7UTx>ZtQajI@< xQ6@uLW=^V=zP^4*Zh?MoVtQtBwyv*ZmUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZKG z?d}4kf#9d}?s_1_S>O>_45U54*zIJt9nknao-U3d8Ta1KH1s=cAmR`o_VrGv*4Wc}rD&WtcP#Hs)+U(6_~9;+1gbm237g&AwzL zsXHt6RsQZNVyA8tYnU>|InArty(E9_lJ{H^Qor;X;tu}%8gb;*yE@H+Fr% zn?qgYi`S~C7An8V(n;L6?H23r>FbWoxf+&}bS_I<&G7lnF4r@a+mZx6Pg*N+WKW8B z)S2jQOOEbI^$t3dy-nrlo;2^SRaZAoe%kMHOlp1KYk@CsbuO#_IDS+AfMr3rVDXuf zqk5J1rmBe8AH3e%`6=j2o%$3Z?kaU2RWXxj#iLE!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YPV z+ua371Hn({-St3vU!owsn=JJa>R%5=^wu}7_On%fl~v#yE{%ikYTW(jnnYKdz^NlIc#s#S7P zDv)9@GBC8zH89mRGz~E{vNABTGB(#XFt9Q(*mN)+7(7TCa`RI%(<*UmI6UY1N1z4` zkPXFU=~hXJ#i_cbMVSm~nK`Le`uh4Mxdr;UiRqci*}8_oQI=8ZPU+pV_SysWFnGH9 KxvX|k1|%Oc%$NbBSkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+eS5K)hhiu0R{01Y44~ zy9wy$!fk$L9koEv$x0Bg+K;z{-T^vIq4!@nYk@t{+fUEoj#smSWmJFwd zeG@ebXY+Z9B`~rrXpGe06n1c&5U}C!&6BK(pOyxv{J#D3-^aPkvQ}4|*C*vL_B1-O zK4*HBtvtm6 zUrc9}6_~fvWyga}SNvK(Gx!Kv8uZ-kRo%lEntJoHtoD=DTt-JD_ocJX% z)aJU)x)~ZfWV#+sx$F37LfSOfor_gZh!nD#DGG08ah)&A>)7T|zJ=xLsWr=3C9`%c zX1qREH00*eR>LE6Wo}eict4El-Ic6u(fdE~S3<@5Q}LoIh09GHgUX`>Rn98Bet6Sp zW8Sn>r+XI<+h$o_eOO<}{)THo^^YSeXMtg+TH+c}l9E`GYL#4+3Zxi}3=A!F4NP?n zO+yTgtPG5-jLo$T46F4$pc15vV}}WJ7UTx>ZtQajI@< xQ6@uLW=^V=zP^4*Zh?MoVtQtBwys6CNq}Ezk$Z2+^jknZ44$rjF6*2UngHGP*USI_ literal 0 HcmV?d00001 diff --git a/folioreader/res/drawable-xhdpi/ic_format_font_black_24dp.png b/folioreader/res/drawable-xhdpi/ic_format_font_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..df5019d8df16c4ec85d8896b7979e59e04a8a5a1 GIT binary patch literal 574 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCmUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)pVryh>nTu$sZZAYL$MSD+10f-TA0 z-33Sk!B6Mi^+1ZVz$3C4NPB>>+sSM@AmhKMi(^Q}y|*(Gxta}lTJM+5d@Hf@!wmBe z9!B~P>Nu6QnQb-GpTPbzHTZL_$V8@z9x8|Cm^UyU;7QP2BY8mlKzHH~Ps1Pk)UrDs z9{P}7tHWq=TrG6}?)I9LdAg_M-u_anytlKmpQWLc>423EL(`Y#JFIT;uIDlM#&TiW zv40U4^Z7Q&Mrr->W&HMS;Tv=I8@JyxUC8=7u{NB+{o7pzj=s0M89i>6Gb(u8E@zyu z*`HtG#O>wm7MuNf6)d*<^9CgC*K|1T!S>)CcZe)i+d(p$IR=E$Eu8m1!DX>nG5&HAIMm4+@Az@Shqag8WR zNi0dVN-jzTQVd20h8DU8rn-ivA%;d)21ZuK=Gq1ZRt5%}4#oqc0ZBt{eoAIqC2kFe z=RE%i)Sv;fp|~vFDk-rzRkyS#lOZiLC)G+{U%w=`KtDGzJu^95H_6m8)GyT1Npww+ QAy5y4r>mdKI;Vst00zm*?EnA( literal 0 HcmV?d00001 diff --git a/folioreader/res/drawable-xhdpi/ic_format_font_black_36dp.png b/folioreader/res/drawable-xhdpi/ic_format_font_black_36dp.png new file mode 100644 index 0000000000000000000000000000000000000000..34253119659ad7d61c274d3d119554daab8acb47 GIT binary patch literal 711 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!Ea{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YPV z+ua371Hn({-St3cTYI=KZxBY z+-aV&`rQ|;b8_YaCoGKrI)60@{a2Ad_!# zIP;v`f#CN?bt+gt6fd5#^KH}t)I7{spvJQX2*&3>Pr?( zsyf7}bm|qS`id>{0-8ELRXK64TB+WnuxQ;pgQl$4k+A{%9X1P>9_M{rrSgKyY|>-5 z3%d7h)9-LSIuZo5QS9puQI{K69*0c`wbf%4Ec?1cBqg%n+OZ|q_8m*)^<=db&zqH( zPTyJ;u`FZRa{EFv$EFr=NUnIuuU7Xws6~+r6hW#bt`Q|Ei6yC4$wjF^iowXh&_dV1 zRM*fn#L&pfz{twjT-(6F%D`aL!FXVLK+=$#pOTqYiCe?rInO@=HE4irC@xF4N=htF z)h#W`WJt@*Nww0~*DuK}(9caw&rHtN%?Vy!0@TCc>FVdQ&MBb@0K$w2 A=>Px# literal 0 HcmV?d00001 diff --git a/folioreader/res/drawable-xhdpi/icon_font_big.png b/folioreader/res/drawable-xhdpi/icon_font_big.png deleted file mode 100644 index d630d811b8e674407aaacbaa7076517e13c5071f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 888 zcmV-;1Bd*HP)Po*omT;T`|BS9uA=<#DGT}vK#Jm zL!NO6293y9Ltq*GF5w6anQX-H%wjn*^u ze;rdseWJ^G2j9e0_UW~l0=&4UkmsfgC15DbV;k5)>?LM2)2lFvJFlPhi3KnD>`x(su>_yE zI1HX^`rtPhF(I14Qd~_-`WoszkAzG#nrB7eo(e=y*gGLcWKoIXBcJ|aTmyw%B;cV> zbe&!Dz*jCj0{dYNS4HTHcT5h?decd^m{ylVlo$>5zQSYp2T!pgY6bADB=J>X60K$z zNKkn*7<8lqiTc^#g#SQMjjv5&O|_UZB<3yDXZ1{;E#Vhk7qaPbMq%a7Pu5=z+k$_* ze9p9(PEw(Rr8I!a;j6bWcM)`9hh@$gCuiwZZC z3}PKTKVccI-KU2@V(bP%RAK2!FswpD_jK8AB<{1kUdW}MSsw>y;(LT#ElIqgfag7pS5U!f4ZUuiESm+P6}I#djAn*tSES3DH~? zW!N$d{QqRrgp^+2oU`Eq_imUXAAq$)hIipB+=sn5hzCnlHtpYAx^co-e=Ztc8E!UwoCvuZw6a zsWw>tsJ(r63i+e6KX)duiO$S7tejkv^YTM`XNH7v73Dl2tvuZ?g=~M@<5*FT&M^{N z{;o{&QrFu#N?bs2TDHeo7t#JwO_9GpB$WM#dJ??NDQ1Zde0gzYAD*nnx^@-rj+pYr z56BMkWJ5wpDlxkSNH%Hj122>L zd``Y{7eHjaoZ&-KhI}<1E~n*;YD2U&Dvy`D{EhGPJV~W1i+BeGhy4S^|JyCP`nC=L O0000!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YPV z+ua371Hn({-St3cTYI=KZxBY z+-aV&`rQ|;b8_YaCoGKrI)60@{a2Ad_!# zIP;v`f#CN?bt+gt6fd5#^KH}t)I7{spvJQX2*&3>Pr?( zsyf7}bm|qS`id>{0-8ELRXK64TB+WnuxQ;pgQl$4k+A{%9X1P>9_M{rrSgKyY|>-5 z3%d7h)9-LSIuZo5QS9puQI{K69*0c`wbf%4Ec?1cBqg%n+OZ|q_8m*)^<=db&zqH( zPTyJ;u`FZRa{EFv$EFr=NUnIuuU7Xws6~+r6hW#bt`Q|Ei6yC4$wjF^iowXh&_dV1 zRM*fn#L&pfz{twjT-(6F%D`aL!FXVLK+=$#pOTqYiCe?rInO@=HE4irC@xF4N=htF z)h#W`WJt@*Nww0~*DuK}(9caw&rHtNt;$R@3iWi&G>u=c4AjHm>FVdQ&MBb@0K(u1 A;Q#;t literal 0 HcmV?d00001 diff --git a/folioreader/res/drawable-xxhdpi/ic_format_font_black_36dp.png b/folioreader/res/drawable-xxhdpi/ic_format_font_black_36dp.png new file mode 100644 index 0000000000000000000000000000000000000000..298937622d7ca33d96fe1152c1ee355ee2e76721 GIT binary patch literal 1034 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 literal 0 HcmV?d00001 diff --git a/folioreader/res/layout/view_config.xml b/folioreader/res/layout/view_config.xml index 2af64d0b0..d1dc8d8c9 100644 --- a/folioreader/res/layout/view_config.xml +++ b/folioreader/res/layout/view_config.xml @@ -1,170 +1,199 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/folioreader/src/main/java/com/folioreader/view/ConfigBottomSheetDialogFragment.kt b/folioreader/src/main/java/com/folioreader/view/ConfigBottomSheetDialogFragment.kt index 3c663c0e4..f6623dc51 100644 --- a/folioreader/src/main/java/com/folioreader/view/ConfigBottomSheetDialogFragment.kt +++ b/folioreader/src/main/java/com/folioreader/view/ConfigBottomSheetDialogFragment.kt @@ -107,7 +107,7 @@ class ConfigBottomSheetDialogFragment : BottomSheetDialogFragment() { setToolBarColor() setAudioPlayerBackground() } - btn_vertical_orientation.isSelected = true + view_config_btn_vertical_orientation.isSelected = true } private fun configFonts() { @@ -115,20 +115,22 @@ class ConfigBottomSheetDialogFragment : BottomSheetDialogFragment() { view_config_font_lato.setTextColor(UiUtil.getColorList(activity, config.themeColor, R.color.grey_color)) view_config_font_lora.setTextColor(UiUtil.getColorList(activity, config.themeColor, R.color.grey_color)) view_config_font_raleway.setTextColor(UiUtil.getColorList(activity, config.themeColor, R.color.grey_color)) + view_config_btn_vertical_orientation.setTextColor(UiUtil.getColorList(activity, config.themeColor, R.color.grey_color)) + view_config_btn_horizontal_orientation.setTextColor(UiUtil.getColorList(activity, config.themeColor, R.color.grey_color)) view_config_font_andada.setOnClickListener { selectFont(Constants.FONT_ANDADA, true) } view_config_font_lato.setOnClickListener { selectFont(Constants.FONT_LATO, true) } view_config_font_lora.setOnClickListener { selectFont(Constants.FONT_LORA, true) } view_config_font_raleway.setOnClickListener { selectFont(Constants.FONT_RALEWAY, true) } - btn_horizontal_orientation.setOnClickListener { + view_config_btn_vertical_orientation.setOnClickListener { callback.onOrientationChange(1) - btn_horizontal_orientation.isSelected = true - btn_vertical_orientation.isSelected = false + view_config_btn_horizontal_orientation.isSelected = false + view_config_btn_vertical_orientation.isSelected = true } - btn_vertical_orientation.setOnClickListener { + view_config_btn_horizontal_orientation.setOnClickListener { callback.onOrientationChange(0) - btn_horizontal_orientation.isSelected = false - btn_vertical_orientation.isSelected = true + view_config_btn_horizontal_orientation.isSelected = true + view_config_btn_vertical_orientation.isSelected = false } } diff --git a/folioreader/src/main/java/com/folioreader/view/FolioToolbar.kt b/folioreader/src/main/java/com/folioreader/view/FolioToolbar.kt index 57f84fb03..1e2f0217e 100644 --- a/folioreader/src/main/java/com/folioreader/view/FolioToolbar.kt +++ b/folioreader/src/main/java/com/folioreader/view/FolioToolbar.kt @@ -64,8 +64,10 @@ class FolioToolbar : RelativeLayout { this.callback = callback } - fun setTitle(title: String) { - label_center.text = title + fun setTitle(title: String?) { + title?.let { + label_center?.text = title + } } fun showOrHideIfVisible() { diff --git a/sample/build.gradle b/sample/build.gradle index 3819aebd4..1e6d345a6 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -57,5 +57,6 @@ android { dependencies { implementation project(':folioreader') + implementation 'com.android.support.constraint:constraint-layout:1.1.0' implementation 'com.android.support:appcompat-v7:27.1.1' }