From 591f4e83521efe87c8e168330b78891cd257dcc8 Mon Sep 17 00:00:00 2001 From: Gautam Chibde Date: Wed, 9 May 2018 19:32:04 +0530 Subject: [PATCH 01/15] update gradle and android sdk version --- build.gradle | 12 +++++-- folioreader/build.gradle | 42 +++++++++++++----------- gradle/wrapper/gradle-wrapper.properties | 4 +-- sample/build.gradle | 8 ++--- webViewMarker/build.gradle | 4 +-- 5 files changed, 40 insertions(+), 30 deletions(-) diff --git a/build.gradle b/build.gradle index 6e82884da..dbb49c8e8 100644 --- a/build.gradle +++ b/build.gradle @@ -1,4 +1,10 @@ buildscript { + ext.KOTLIN_VERSION= '1.2.41' + + ext.ANDROID_LIB_VERSION = '27.1.1' + ext.R2_STREAMER_VERSION = '0.1.4' + def KOTLIN_VERSION = ext.KOTLIN_VERSION + repositories { jcenter() maven { @@ -10,9 +16,11 @@ buildscript { } } dependencies { - classpath 'com.android.tools.build:gradle:2.2.0' + classpath 'com.android.tools.build:gradle:3.1.2' classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3' - classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5' + classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$KOTLIN_VERSION" + classpath "org.jetbrains.kotlin:kotlin-android-extensions:$KOTLIN_VERSION" } } diff --git a/folioreader/build.gradle b/folioreader/build.gradle index b33e4108e..955bbc5f2 100644 --- a/folioreader/build.gradle +++ b/folioreader/build.gradle @@ -1,6 +1,8 @@ apply plugin: 'com.android.library' apply from: '../config/quality/quality.gradle' apply plugin: 'com.github.dcendents.android-maven' +apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' ext { bintrayRepo = 'maven' @@ -28,14 +30,14 @@ ext { android { useLibrary 'org.apache.http.legacy' - compileSdkVersion 26 - buildToolsVersion "26.0.2" + compileSdkVersion 27 + buildToolsVersion "27.0.3" defaultConfig { versionCode 1 versionName "1.0" minSdkVersion 14 - targetSdkVersion 26 + targetSdkVersion 27 } sourceSets { @@ -78,28 +80,28 @@ android { } } -dependencies { - compile fileTree(include: ['*.jar'], dir: 'libs') - compile project(':webViewMarker') - final ANDROID_LIB_VERSION = '26.0.2' +apply from: '../folioreader/bintray/installv1.gradle' +dependencies { + implementation fileTree(include: ['*.jar'], dir: 'libs') + implementation project(':webViewMarker') //noinspection GradleDependency - compile "com.android.support:appcompat-v7:$ANDROID_LIB_VERSION" - compile "com.android.support:recyclerview-v7:$ANDROID_LIB_VERSION" - compile "com.android.support:support-v4:$ANDROID_LIB_VERSION" - compile "com.android.support:design:$ANDROID_LIB_VERSION" + 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" + implementation "com.android.support:design:$ANDROID_LIB_VERSION" - compile 'com.daimajia.swipelayout:library:1.2.0@aar' - // r2-streamer - final R2_STREAMER_VERSION = '0.1.4' + implementation 'com.daimajia.swipelayout:library:1.2.0@aar' - compile "org.readium:r2-fetcher:$R2_STREAMER_VERSION" - compile "org.readium:r2-parser:$R2_STREAMER_VERSION" - compile "org.readium:r2-server:$R2_STREAMER_VERSION" + //Kotlin + implementation "org.jetbrains.kotlin:kotlin-stdlib:$KOTLIN_VERSION" - compile 'org.greenrobot:eventbus:3.1.1' -} + // r2-streamer + api "org.readium:r2-fetcher:$R2_STREAMER_VERSION" + api "org.readium:r2-parser:$R2_STREAMER_VERSION" + api "org.readium:r2-server:$R2_STREAMER_VERSION" -apply from: '../folioreader/bintray/installv1.gradle' + implementation 'org.greenrobot:eventbus:3.1.1' +} apply from: '../folioreader/bintray/bintrayv1.gradle' diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 279429476..868b7fb98 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sat Jun 10 11:42:12 IST 2017 +#Wed May 09 16:00:44 IST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip diff --git a/sample/build.gradle b/sample/build.gradle index 2637e3b94..3819aebd4 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -8,8 +8,8 @@ android { javaMaxHeapSize "4G" } - compileSdkVersion 26 - buildToolsVersion "26.0.2" + compileSdkVersion 27 + buildToolsVersion "27.0.3" defaultConfig { applicationId "com.folioreader.android.sample" @@ -56,6 +56,6 @@ android { } dependencies { - compile project(':folioreader') - compile 'com.android.support:appcompat-v7:26.0.2' + implementation project(':folioreader') + implementation 'com.android.support:appcompat-v7:27.1.1' } diff --git a/webViewMarker/build.gradle b/webViewMarker/build.gradle index 3d006221b..2ef699d06 100644 --- a/webViewMarker/build.gradle +++ b/webViewMarker/build.gradle @@ -25,8 +25,8 @@ ext { } android { - compileSdkVersion 19 - buildToolsVersion '26.0.2' + compileSdkVersion 27 + buildToolsVersion '27.0.3' defaultConfig { versionCode Integer.parseInt(project.VERSION_CODE) From ad4b823cd0099bccde4264a90781375bbe090361 Mon Sep 17 00:00:00 2001 From: Gautam Chibde Date: Thu, 10 May 2018 13:10:19 +0530 Subject: [PATCH 02/15] added custom view for media controller --- folioreader/res/layout/folio_activity.xml | 10 +- folioreader/res/layout/view_audio_player.xml | 314 +++++++++--------- .../ui/folio/activity/FolioActivity.java | 210 +----------- .../ui/folio/fragment/FolioPageFragment.java | 5 +- .../view/MediaControllerCallback.kt | 9 + .../folioreader/view/MediaControllerView.kt | 155 +++++++++ 6 files changed, 345 insertions(+), 358 deletions(-) create mode 100644 folioreader/src/main/java/com/folioreader/view/MediaControllerCallback.kt create mode 100644 folioreader/src/main/java/com/folioreader/view/MediaControllerView.kt diff --git a/folioreader/res/layout/folio_activity.xml b/folioreader/res/layout/folio_activity.xml index 1b04b270e..d601eed67 100644 --- a/folioreader/res/layout/folio_activity.xml +++ b/folioreader/res/layout/folio_activity.xml @@ -101,13 +101,9 @@ - + android:layout_height="match_parent" /> - - \ No newline at end of file diff --git a/folioreader/res/layout/view_audio_player.xml b/folioreader/res/layout/view_audio_player.xml index b52968016..39a44caf1 100644 --- a/folioreader/res/layout/view_audio_player.xml +++ b/folioreader/res/layout/view_audio_player.xml @@ -1,175 +1,175 @@ + android:layout_height="match_parent" + android:background="#99000000" + android:visibility="gone"> - + android:layout_height="wrap_content" + android:layout_alignParentBottom="true" + android:background="@color/white" + android:visibility="invisible"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:id="@+id/top_buttons" + android:layout_width="match_parent" + android:layout_height="50dp" + android:orientation="horizontal"> + + + + + + + + + + + + - + android:orientation="horizontal" + android:weightSum="4.0"> + + + + + + + + + - - - - + + + + + + + + + + + + + \ No newline at end of file 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 652578fed..12badb4a8 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 @@ -17,7 +17,6 @@ import android.Manifest; import android.annotation.TargetApi; -import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Build; @@ -27,17 +26,12 @@ import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; -import android.text.Html; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.view.animation.AccelerateInterpolator; -import android.view.animation.Animation; -import android.view.animation.AnimationUtils; import android.view.animation.DecelerateInterpolator; -import android.widget.ImageButton; import android.widget.ImageView; -import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; @@ -48,9 +42,7 @@ import com.folioreader.model.HighlightImpl; import com.folioreader.model.ReadPosition; import com.folioreader.model.event.AnchorIdEvent; -import com.folioreader.model.event.MediaOverlayHighlightStyleEvent; import com.folioreader.model.event.MediaOverlayPlayPauseEvent; -import com.folioreader.model.event.MediaOverlaySpeedEvent; import com.folioreader.model.event.WebViewPosition; import com.folioreader.ui.folio.adapter.FolioPageFragmentAdapter; import com.folioreader.ui.folio.fragment.FolioPageFragment; @@ -61,8 +53,9 @@ import com.folioreader.util.UiUtil; import com.folioreader.view.ConfigBottomSheetDialogFragment; import com.folioreader.view.DirectionalViewpager; +import com.folioreader.view.MediaControllerCallback; +import com.folioreader.view.MediaControllerView; import com.folioreader.view.ObservableWebView; -import com.folioreader.view.StyleableTextView; import org.greenrobot.eventbus.EventBus; import org.readium.r2_streamer.model.container.Container; @@ -86,7 +79,8 @@ public class FolioActivity implements FolioPageFragment.FolioPageFragmentCallback, ObservableWebView.ToolBarListener, ConfigBottomSheetDialogFragment.ConfigDialogCallback, - MainMvpView { + MainMvpView, + MediaControllerCallback{ private static final String TAG = "FolioActivity"; @@ -101,8 +95,6 @@ public enum EpubSourceType { SD_CARD } - private boolean isOpen = true; - public static final int ACTION_CONTENT_HIGHLIGHT = 77; private String bookFileName; private static final String HIGHLIGHT_ITEM = "highlight_item"; @@ -120,14 +112,13 @@ public enum EpubSourceType { private List mSpineReferenceList = new ArrayList<>(); private EpubServer mEpubServer; - private Animation slide_down; - private Animation slide_up; private boolean mIsNightMode; private Config mConfig; private String mBookId; private String mEpubFilePath; private EpubSourceType mEpubSourceType; int mEpubRawId = 0; + private MediaControllerView mediaControllerView; @Override protected void onCreate(Bundle savedInstanceState) { @@ -143,18 +134,16 @@ 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); - slide_down = AnimationUtils.loadAnimation(getApplicationContext(), - R.anim.slide_down); - slide_up = AnimationUtils.loadAnimation(getApplicationContext(), - R.anim.slide_up); initColors(); @@ -164,7 +153,6 @@ protected void onCreate(Bundle savedInstanceState) { setupBook(); } - initAudioView(); mToolbar = (Toolbar) findViewById(R.id.toolbar); findViewById(R.id.btn_drawer).setOnClickListener(new View.OnClickListener() { @@ -179,20 +167,10 @@ public void onClick(View v) { } }); - // speaker = (ImageView) findViewById(R.id.btn_speaker); findViewById(R.id.btn_speaker).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - if (isOpen) { - audioContainer.startAnimation(slide_up); - audioContainer.setVisibility(View.VISIBLE); - shade.setVisibility(View.VISIBLE); - } else { - audioContainer.startAnimation(slide_down); - audioContainer.setVisibility(View.INVISIBLE); - shade.setVisibility(View.GONE); - } - isOpen = !isOpen; + mediaControllerView.show(); } }); @@ -200,7 +178,7 @@ public void onClick(View v) { if (mIsNightMode) { mToolbar.setBackgroundColor(ContextCompat.getColor(FolioActivity.this, R.color.black)); title.setTextColor(ContextCompat.getColor(FolioActivity.this, R.color.white)); - audioContainer.setBackgroundColor(ContextCompat.getColor(FolioActivity.this, R.color.night)); + mediaControllerView.setNightMode(); } } @@ -267,7 +245,7 @@ public void onPageScrolled(int position, float positionOffset, int positionOffse @Override public void onPageSelected(int position) { EventBus.getDefault().post(new MediaOverlayPlayPauseEvent(mSpineReferenceList.get(mChapterPosition).href, false, true)); - mPlayPauseBtn.setImageDrawable(ContextCompat.getDrawable(FolioActivity.this, R.drawable.play_icon)); + mediaControllerView.setPlayButtonDrawable(); mChapterPosition = position; } @@ -486,166 +464,14 @@ private void setConfig() { } } - - //*************************************************************************// - // AUDIO PLAYER // - //*************************************************************************// - private StyleableTextView mHalfSpeed, mOneSpeed, mTwoSpeed, mOneAndHalfSpeed; - private StyleableTextView mBackgroundColorStyle, mUnderlineStyle, mTextColorStyle; - private RelativeLayout audioContainer; - private boolean mIsSpeaking; - private ImageButton mPlayPauseBtn, mPreviousButton, mNextButton; - private RelativeLayout shade; - - private void initAudioView() { - mHalfSpeed = findViewById(R.id.btn_half_speed); - mOneSpeed = findViewById(R.id.btn_one_x_speed); - mTwoSpeed = findViewById(R.id.btn_twox_speed); - audioContainer = findViewById(R.id.container); - shade = findViewById(R.id.shade); - mOneAndHalfSpeed = findViewById(R.id.btn_one_and_half_speed); - mPlayPauseBtn = findViewById(R.id.play_button); - mPreviousButton = findViewById(R.id.prev_button); - mNextButton = findViewById(R.id.next_button); - mBackgroundColorStyle = findViewById(R.id.btn_backcolor_style); - mUnderlineStyle = findViewById(R.id.btn_text_undeline_style); - mTextColorStyle = findViewById(R.id.btn_text_color_style); - mIsSpeaking = false; - - final Context mContext = mHalfSpeed.getContext(); - mOneAndHalfSpeed.setText(Html.fromHtml(mContext.getString(R.string.one_and_half_speed))); - mHalfSpeed.setText(Html.fromHtml(mContext.getString(R.string.half_speed_text))); - String styleUnderline = - mHalfSpeed.getContext().getResources().getString(R.string.style_underline); - mUnderlineStyle.setText(Html.fromHtml(styleUnderline)); - - setupColors(mContext); - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { - findViewById(R.id.playback_speed_Layout).setVisibility(View.GONE); - } - - shade.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (isOpen) { - audioContainer.startAnimation(slide_up); - audioContainer.setVisibility(View.VISIBLE); - shade.setVisibility(View.VISIBLE); - } else { - audioContainer.startAnimation(slide_down); - audioContainer.setVisibility(View.INVISIBLE); - shade.setVisibility(View.GONE); - } - isOpen = !isOpen; - } - }); - - mPlayPauseBtn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (mIsSpeaking) { - EventBus.getDefault().post(new MediaOverlayPlayPauseEvent(mSpineReferenceList.get(mChapterPosition).href, false, false)); - mPlayPauseBtn.setImageDrawable(ContextCompat.getDrawable(FolioActivity.this, R.drawable.play_icon)); - UiUtil.setColorToImage(mContext, mConfig.getThemeColor(), mPlayPauseBtn.getDrawable()); - } else { - EventBus.getDefault().post(new MediaOverlayPlayPauseEvent(mSpineReferenceList.get(mChapterPosition).href, true, false)); - mPlayPauseBtn.setImageDrawable(ContextCompat.getDrawable(FolioActivity.this, R.drawable.pause_btn)); - UiUtil.setColorToImage(mContext, mConfig.getThemeColor(), mPlayPauseBtn.getDrawable()); - } - mIsSpeaking = !mIsSpeaking; - } - }); - - mHalfSpeed.setOnClickListener(new View.OnClickListener() { - @TargetApi(Build.VERSION_CODES.M) - @Override - public void onClick(View v) { - mHalfSpeed.setSelected(true); - mOneSpeed.setSelected(false); - mOneAndHalfSpeed.setSelected(false); - mTwoSpeed.setSelected(false); - EventBus.getDefault().post(new MediaOverlaySpeedEvent(MediaOverlaySpeedEvent.Speed.HALF)); - } - }); - - mOneSpeed.setOnClickListener(new View.OnClickListener() { - @TargetApi(Build.VERSION_CODES.M) - @Override - public void onClick(View v) { - mHalfSpeed.setSelected(false); - mOneSpeed.setSelected(true); - mOneAndHalfSpeed.setSelected(false); - mTwoSpeed.setSelected(false); - EventBus.getDefault().post(new MediaOverlaySpeedEvent(MediaOverlaySpeedEvent.Speed.ONE)); - } - }); - mOneAndHalfSpeed.setOnClickListener(new View.OnClickListener() { - @TargetApi(Build.VERSION_CODES.M) - @Override - public void onClick(View v) { - mHalfSpeed.setSelected(false); - mOneSpeed.setSelected(false); - mOneAndHalfSpeed.setSelected(true); - mTwoSpeed.setSelected(false); - EventBus.getDefault().post(new MediaOverlaySpeedEvent(MediaOverlaySpeedEvent.Speed.ONE_HALF)); - } - }); - mTwoSpeed.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - mHalfSpeed.setSelected(false); - mOneSpeed.setSelected(false); - mOneAndHalfSpeed.setSelected(false); - mTwoSpeed.setSelected(true); - EventBus.getDefault().post(new MediaOverlaySpeedEvent(MediaOverlaySpeedEvent.Speed.TWO)); - } - }); - - mBackgroundColorStyle.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - mBackgroundColorStyle.setSelected(true); - mUnderlineStyle.setSelected(false); - mTextColorStyle.setSelected(false); - EventBus.getDefault().post(new MediaOverlayHighlightStyleEvent(MediaOverlayHighlightStyleEvent.Style.DEFAULT)); - } - }); - - mUnderlineStyle.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - mBackgroundColorStyle.setSelected(false); - mUnderlineStyle.setSelected(true); - mTextColorStyle.setSelected(false); - EventBus.getDefault().post(new MediaOverlayHighlightStyleEvent(MediaOverlayHighlightStyleEvent.Style.UNDERLINE)); - - } - }); - - mTextColorStyle.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - mBackgroundColorStyle.setSelected(false); - mUnderlineStyle.setSelected(false); - mTextColorStyle.setSelected(true); - EventBus.getDefault().post(new MediaOverlayHighlightStyleEvent(MediaOverlayHighlightStyleEvent.Style.BACKGROUND)); - } - }); - + @Override + public void play() { + EventBus.getDefault().post(new MediaOverlayPlayPauseEvent(mSpineReferenceList.get(mChapterPosition).href, true, false)); } - private void setupColors(Context context) { - mHalfSpeed.setTextColor(UiUtil.getColorList(context, mConfig.getThemeColor(), R.color.grey_color)); - mOneAndHalfSpeed.setTextColor(UiUtil.getColorList(context, mConfig.getThemeColor(), R.color.grey_color)); - mTwoSpeed.setTextColor(UiUtil.getColorList(context, mConfig.getThemeColor(), R.color.grey_color)); - mOneSpeed.setTextColor(UiUtil.getColorList(context, mConfig.getThemeColor(), R.color.grey_color)); - mUnderlineStyle.setTextColor(UiUtil.getColorList(context, mConfig.getThemeColor(), R.color.grey_color)); - mBackgroundColorStyle.setTextColor(UiUtil.getColorList(context, R.color.white, R.color.grey_color)); - mBackgroundColorStyle.setBackgroundDrawable(UiUtil.convertColorIntoStateDrawable(this, mConfig.getThemeColor(), android.R.color.transparent)); - mTextColorStyle.setTextColor(UiUtil.getColorList(context, mConfig.getThemeColor(), R.color.grey_color)); - UiUtil.setColorToImage(context, mConfig.getThemeColor(), mPlayPauseBtn.getDrawable()); - UiUtil.setColorToImage(context, mConfig.getThemeColor(), mNextButton.getDrawable()); - UiUtil.setColorToImage(context, mConfig.getThemeColor(), mPreviousButton.getDrawable()); + @Override + public void pause() { + EventBus.getDefault().post(new MediaOverlayPlayPauseEvent(mSpineReferenceList.get(mChapterPosition).href, false, false)); } @Override @@ -678,4 +504,4 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis break; } } -} +} \ No newline at end of file diff --git a/folioreader/src/main/java/com/folioreader/ui/folio/fragment/FolioPageFragment.java b/folioreader/src/main/java/com/folioreader/ui/folio/fragment/FolioPageFragment.java index bf52b7561..e1581c89a 100644 --- a/folioreader/src/main/java/com/folioreader/ui/folio/fragment/FolioPageFragment.java +++ b/folioreader/src/main/java/com/folioreader/ui/folio/fragment/FolioPageFragment.java @@ -60,6 +60,7 @@ import com.folioreader.util.HighlightUtil; import com.folioreader.util.SMILParser; import com.folioreader.util.UiUtil; +import com.folioreader.view.MediaControllerView; import com.folioreader.view.ObservableWebView; import com.folioreader.view.VerticalSeekbar; @@ -242,7 +243,7 @@ public void pauseButtonClicked(MediaOverlayPlayPauseEvent event) { /** * [EVENT BUS FUNCTION] - * Function triggered from {@link FolioActivity#initAudioView()} when speed + * Function triggered from {@link MediaControllerView#initListeners()} when speed * change buttons are clicked * * @param event of type {@link MediaOverlaySpeedEvent} contains selected speed @@ -256,7 +257,7 @@ public void speedChanged(MediaOverlaySpeedEvent event) { /** * [EVENT BUS FUNCTION] - * Function triggered from {@link FolioActivity#initAudioView()} when new + * Function triggered from {@link MediaControllerView#initListeners()} when new * style is selected on button click. * * @param event of type {@link MediaOverlaySpeedEvent} contains selected style diff --git a/folioreader/src/main/java/com/folioreader/view/MediaControllerCallback.kt b/folioreader/src/main/java/com/folioreader/view/MediaControllerCallback.kt new file mode 100644 index 000000000..e2d0d9902 --- /dev/null +++ b/folioreader/src/main/java/com/folioreader/view/MediaControllerCallback.kt @@ -0,0 +1,9 @@ +package com.folioreader.view + +/** + * Created by gautam on 9/5/18. + */ +interface MediaControllerCallback { + fun play() + fun pause() +} \ 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 new file mode 100644 index 000000000..4e528135b --- /dev/null +++ b/folioreader/src/main/java/com/folioreader/view/MediaControllerView.kt @@ -0,0 +1,155 @@ +package com.folioreader.view + +import android.content.Context +import android.os.Build +import android.support.v4.content.ContextCompat +import android.text.Html +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.View +import android.view.animation.AnimationUtils +import android.widget.RelativeLayout +import com.folioreader.Config +import com.folioreader.R +import com.folioreader.model.event.MediaOverlayHighlightStyleEvent +import com.folioreader.model.event.MediaOverlaySpeedEvent +import com.folioreader.util.AppUtil +import com.folioreader.util.UiUtil +import kotlinx.android.synthetic.main.view_audio_player.view.* +import org.greenrobot.eventbus.EventBus + +/** + * Created by gautam on 9/5/18. + */ +class MediaControllerView : RelativeLayout { + private lateinit var config: Config + private var visible: Boolean = true + lateinit var callback: MediaControllerCallback + private var isPlaying: Boolean = false + + 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.view_audio_player, this) + } + + fun onInit() { + 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)) + btn_text_undeline_style.text = Html.fromHtml(context.getString(R.string.style_underline)) + + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { + playback_speed_Layout.visibility = View.GONE + } + initColors() + initListeners() + } + + fun setListeners(callback: MediaControllerCallback) { + this.callback = callback + } + + private fun initColors() { + btn_half_speed.setTextColor(UiUtil.getColorList(context, config.themeColor, R.color.grey_color)) + btn_one_and_half_speed.setTextColor(UiUtil.getColorList(context, config.themeColor, R.color.grey_color)) + btn_twox_speed.setTextColor(UiUtil.getColorList(context, config.themeColor, R.color.grey_color)) + btn_one_x_speed.setTextColor(UiUtil.getColorList(context, config.themeColor, R.color.grey_color)) + btn_text_undeline_style.setTextColor(UiUtil.getColorList(context, config.themeColor, R.color.grey_color)) + btn_backcolor_style.setTextColor(UiUtil.getColorList(context, R.color.white, R.color.grey_color)) + btn_backcolor_style.setBackgroundDrawable(UiUtil.convertColorIntoStateDrawable(context, config.themeColor, android.R.color.transparent)) + btn_text_color_style.setTextColor(UiUtil.getColorList(context, config.themeColor, R.color.grey_color)) + UiUtil.setColorToImage(context, config.themeColor, play_button.drawable) + UiUtil.setColorToImage(context, config.themeColor, next_button.drawable) + UiUtil.setColorToImage(context, config.themeColor, prev_button.drawable) + } + + private fun initListeners() { + shade.setOnClickListener { show() } + play_button.setOnClickListener { + callback.let { + if (isPlaying) { + callback.pause() + play_button.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.play_icon)) + UiUtil.setColorToImage(context, config.themeColor, play_button.drawable) + } else { + callback.play() + play_button.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.pause_btn)) + UiUtil.setColorToImage(context, config.themeColor, play_button.drawable) + } + isPlaying = !isPlaying + } + } + btn_half_speed.setOnClickListener { + toggleSpeedControlButtons(true, false, false, false) + EventBus.getDefault().post(MediaOverlaySpeedEvent(MediaOverlaySpeedEvent.Speed.HALF)) + } + + btn_one_x_speed.setOnClickListener { + toggleSpeedControlButtons(false, true, false, false) + EventBus.getDefault().post(MediaOverlaySpeedEvent(MediaOverlaySpeedEvent.Speed.ONE)) + } + btn_one_and_half_speed.setOnClickListener { + toggleSpeedControlButtons(false, false, true, false) + EventBus.getDefault().post(MediaOverlaySpeedEvent(MediaOverlaySpeedEvent.Speed.ONE_HALF)) + } + btn_twox_speed.setOnClickListener { + toggleSpeedControlButtons(false, false, false, true) + EventBus.getDefault().post(MediaOverlaySpeedEvent(MediaOverlaySpeedEvent.Speed.TWO)) + } + + btn_backcolor_style.setOnClickListener { + toggleTextStyle(true, false, false) + EventBus.getDefault().post(MediaOverlayHighlightStyleEvent(MediaOverlayHighlightStyleEvent.Style.DEFAULT)) + } + + btn_text_undeline_style.setOnClickListener { + toggleTextStyle(false, true, false) + EventBus.getDefault().post(MediaOverlayHighlightStyleEvent(MediaOverlayHighlightStyleEvent.Style.UNDERLINE)) + + } + + btn_text_color_style.setOnClickListener { + toggleTextStyle(false, false, true) + EventBus.getDefault().post(MediaOverlayHighlightStyleEvent(MediaOverlayHighlightStyleEvent.Style.BACKGROUND)) + } + } + + private fun toggleTextStyle(backcolor: Boolean, underline: Boolean, textColor: Boolean) { + btn_backcolor_style.isSelected = backcolor + btn_text_undeline_style.isSelected = underline + btn_text_color_style.isSelected = textColor + } + + private fun toggleSpeedControlButtons(half: Boolean, one: Boolean, oneHalf: Boolean, two: Boolean) { + btn_half_speed.isSelected = half + btn_one_x_speed.isSelected = one + btn_one_and_half_speed.isSelected = oneHalf + btn_twox_speed.isSelected = two + } + + fun setPlayButtonDrawable() { + play_button.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.play_icon)) + } + + fun setNightMode() { + container.setBackgroundColor(ContextCompat.getColor(context, R.color.night)) + } + + private fun open() { + container.startAnimation(AnimationUtils.loadAnimation(context, R.anim.slide_up)) + container.visibility = View.VISIBLE + shade.visibility = View.VISIBLE + } + + fun show() { + if (visible) open() else close() + visible = !visible + } + + private fun close() { + container.startAnimation(AnimationUtils.loadAnimation(context, R.anim.slide_down)) + container.visibility = View.GONE + shade.visibility = View.GONE + } +} \ No newline at end of file From e56f8ae8228cfc0398773ba0947e0e225bea9358 Mon Sep 17 00:00:00 2001 From: Gautam Chibde Date: Tue, 15 May 2018 13:19:42 +0530 Subject: [PATCH 03/15] 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 705e92ce73412919e6f43359b7b90bedc8fb11fd Mon Sep 17 00:00:00 2001 From: Hrishikesh Kadam Date: Tue, 15 May 2018 15:37:45 +0530 Subject: [PATCH 04/15] Fix bug - apostrophe character in epub file name https://github.com/FolioReader/FolioReader-Android/issues/204 Regex used for finding possible breakpoints - \'\"\s\+\s\w+\s\+\s\"\'\" \'\"\s\+\s\w+.\w+\(\)\s\+\s\"\'\" \'\"\s+\+\s+\w+.\w+\(\)\s+\+\s+\"\' --- .../java/com/folioreader/model/sqlite/DbAdapter.java | 4 ++-- .../com/folioreader/model/sqlite/DictionaryTable.java | 2 +- .../com/folioreader/model/sqlite/HighLightTable.java | 10 +++++----- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/folioreader/src/main/java/com/folioreader/model/sqlite/DbAdapter.java b/folioreader/src/main/java/com/folioreader/model/sqlite/DbAdapter.java index 4c3b76b11..869541dd9 100644 --- a/folioreader/src/main/java/com/folioreader/model/sqlite/DbAdapter.java +++ b/folioreader/src/main/java/com/folioreader/model/sqlite/DbAdapter.java @@ -30,7 +30,7 @@ public static boolean update(String table, String key, String value, ContentValu } public static Cursor getHighLightsForBookId(String bookId) { - return mDatabase.rawQuery("SELECT * FROM " + HighLightTable.TABLE_NAME + " WHERE " + HighLightTable.COL_BOOK_ID + " = '" + bookId + "'", null); + return mDatabase.rawQuery("SELECT * FROM " + HighLightTable.TABLE_NAME + " WHERE " + HighLightTable.COL_BOOK_ID + " = \"" + bookId + "\"", null); } public boolean deleteAll(String table) { @@ -96,6 +96,6 @@ public static int getIdForQuery(String query) { } public static Cursor getHighlightsForId(int id) { - return mDatabase.rawQuery("SELECT * FROM " + HighLightTable.TABLE_NAME + " WHERE " + HighLightTable.ID + " = '" + id + "'", null); + return mDatabase.rawQuery("SELECT * FROM " + HighLightTable.TABLE_NAME + " WHERE " + HighLightTable.ID + " = \"" + id + "\"", null); } } diff --git a/folioreader/src/main/java/com/folioreader/model/sqlite/DictionaryTable.java b/folioreader/src/main/java/com/folioreader/model/sqlite/DictionaryTable.java index 952c34d80..3e1884e46 100644 --- a/folioreader/src/main/java/com/folioreader/model/sqlite/DictionaryTable.java +++ b/folioreader/src/main/java/com/folioreader/model/sqlite/DictionaryTable.java @@ -53,7 +53,7 @@ public void insert(Map map) { public String getMeaningForWord(String word) { Cursor c = database.rawQuery("SELECT * FROM " + TABLE_NAME + - " WHERE " + WORD + " = '" + word.trim() + "'", null); + " WHERE " + WORD + " = \"" + word.trim() + "\"", null); if (c.moveToFirst()) { String toRetuen = c.getString(2); c.close(); diff --git a/folioreader/src/main/java/com/folioreader/model/sqlite/HighLightTable.java b/folioreader/src/main/java/com/folioreader/model/sqlite/HighLightTable.java index 7f6a2d244..fc8645876 100644 --- a/folioreader/src/main/java/com/folioreader/model/sqlite/HighLightTable.java +++ b/folioreader/src/main/java/com/folioreader/model/sqlite/HighLightTable.java @@ -106,7 +106,7 @@ public static long insertHighlight(HighlightImpl highlightImpl) { } public static boolean deleteHighlight(String rangy) { - String query = "SELECT " + ID + " FROM " + TABLE_NAME + " WHERE " + COL_RANGY + " = '" + rangy + "'"; + String query = "SELECT " + ID + " FROM " + TABLE_NAME + " WHERE " + COL_RANGY + " = \"" + rangy + "\""; int id = DbAdapter.getIdForQuery(query); return id != -1 && deleteHighlight(id); } @@ -116,7 +116,7 @@ public static boolean deleteHighlight(int highlightId) { } public static List getHighlightsForPageId(String pageId) { - String query = "SELECT " + COL_RANGY + " FROM " + TABLE_NAME + " WHERE " + COL_PAGE_ID + " = '" + pageId + "'"; + String query = "SELECT " + COL_RANGY + " FROM " + TABLE_NAME + " WHERE " + COL_PAGE_ID + " = \"" + pageId + "\""; Cursor c = DbAdapter.getHighlightsForPageId(query, pageId); List rangyList = new ArrayList<>(); while (c.moveToNext()) { @@ -149,7 +149,7 @@ public static Date getDateTime(String date) { } public static HighlightImpl updateHighlightStyle(String rangy, String style) { - String query = "SELECT " + ID + " FROM " + TABLE_NAME + " WHERE " + COL_RANGY + " = '" + rangy + "'"; + String query = "SELECT " + ID + " FROM " + TABLE_NAME + " WHERE " + COL_RANGY + " = \"" + rangy + "\""; int id = DbAdapter.getIdForQuery(query); if (id != -1 && update(id, updateRangy(rangy, style), style.replace("highlight_", ""))) { return getHighlightId(id); @@ -158,7 +158,7 @@ public static HighlightImpl updateHighlightStyle(String rangy, String style) { } public static HighlightImpl getHighlightForRangy(String rangy) { - String query = "SELECT " + ID + " FROM " + TABLE_NAME + " WHERE " + COL_RANGY + " = '" + rangy + "'"; + String query = "SELECT " + ID + " FROM " + TABLE_NAME + " WHERE " + COL_RANGY + " = \"" + rangy + "\""; return getHighlightId(DbAdapter.getIdForQuery(query)); } @@ -188,7 +188,7 @@ private static boolean update(int id, String s, String color) { } public static void saveHighlightIfNotExists(HighLight highLight) { - String query = "SELECT " + ID + " FROM " + TABLE_NAME + " WHERE " + COL_UUID + " = '" + highLight.getUUID() + "'"; + String query = "SELECT " + ID + " FROM " + TABLE_NAME + " WHERE " + COL_UUID + " = \"" + highLight.getUUID() + "\""; int id = DbAdapter.getIdForQuery(query); if (id == -1) { DbAdapter.saveHighLight(getHighlightContentValues(highLight)); From 633c26ecd058d48318cc8783937ca554df6814bc Mon Sep 17 00:00:00 2001 From: Hrishikesh Kadam Date: Tue, 15 May 2018 15:43:44 +0530 Subject: [PATCH 05/15] Fix bug - Unable to move back to previous activity https://github.com/FolioReader/FolioReader-Android/issues/205 Now code navigate back to prevoius activity even if app was minimised. --- folioreader/src/main/java/com/folioreader/FolioReader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/folioreader/src/main/java/com/folioreader/FolioReader.java b/folioreader/src/main/java/com/folioreader/FolioReader.java index 9dcb1d81c..54c27a9d3 100644 --- a/folioreader/src/main/java/com/folioreader/FolioReader.java +++ b/folioreader/src/main/java/com/folioreader/FolioReader.java @@ -159,7 +159,7 @@ private Intent getIntentFromUrl(String assetOrSdcardPath, int rawId) { Intent intent = new Intent(context, FolioActivity.class); if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra(FolioActivity.EXTRA_READ_POSITION, (Parcelable) readPosition); if (rawId != 0) { From 50771708ad55afdc191af3ababe9cdf002d4cd4e Mon Sep 17 00:00:00 2001 From: Gautam Chibde Date: Tue, 15 May 2018 16:27:59 +0530 Subject: [PATCH 06/15] 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 07/15] 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 zcmeAS@N?(olHy`uVBq!ia0vp^IUvlz1|<8_!p{OJmUKs7M+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*zIJt9RmZ?X-^l&kcwMx@7U*Eagb>H$nLVjvvG%G zl@?b}kIU)Y2@6tgzg=)f(t^czhsOi~Q5MC(00!3x&6dBy=c}I2K3`XNY05c^y05ox zeLd5p;yDR~GK=2z{Q2J35d46pqTs;if1EXJ=NkLj=cI4yYgGLp`r~fFA0|77^NaKy z)cPB_Z?SF7o5T2hvA)~;c?|X){Mn}W4FBcU8TB>#A89Ws-qW+sU~iO={JC8pWh+E# z3#*D*Y836}_&#?1!fG{T_tfKai%PxUT>bn)*ka191AdGAZGQd?-5p+e=kTe=(?pNY zVe)5}du;rsjkWarw0qBA#l6)HbmY;IWcEIGV3Og66s*jL_k@3>ZfWEV{?})~W_ITF z3t@u|x3yWebHBQ8alI& zX79=qm$*^ddhRwWTUqS)w@l2@nkpGUA+Ii=@s5jNgs9L~ZXTV`-3j*^MJH|LekL2S ztL$J6v$jf(_!;vJQ{FaJvW0ov(wmW-KlG{-e>4JlfVx zT%Vettg$5%=o*bEp!GTVtz|$5-i|&E^7+yW+hP+Esx$8beUa7r4Jff%>>`k@)j9(x z9om@%)Rxe?1Ef^s=c#1FOLw|woqWD!S+Wo~veaHnKc6KpDSi5<$LIO%|MXsH|GNfhZq+03g>zCvf k=;tP;XC`Os8s=GKB)bQBDoWqK1k}Ue>FVdQ&MBb@0J%W08vp!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YPV z+ua371Hn({-St3p6kuG9Mg+m7XbFYGPl|HGuWN`Bug?+5&q&Gq~0KA%&)6JY*l z`Pa==9HB9jf8UC%lC51ScP!2>@5blc$NS`N?hk8U@u2V5H~Y1>UnRbIdbrKDzR~~c zL3vBY`Kz7ZBz8BnpZorz_TNH_L%aXPDl;DSa4-}K=wT7TWPY$e_NzYS@=MtbMGV0o z|MD9ySjBjwt=ik+@bg=j{wcD2iPJTB{-#5OGo!&g!@q~cM5e*~iROT@Tu&L}>%WrI7D)V%%M{!X-c*`sw}&fm*3YlSYn_@fKf z7^cfGg z#xn^Sd}`NcG}gMM&)6@KTmSRS#0G}7V9HqH?=60zf@$;KvU5fpd2zdLLW677c6pTp zM_=5po4_!==UX$&p00_Pf#TsOv+O+%aQEy12`Oy;dm-`w$NkuQzbEY7AG`N;-LHgT zaO}X7ixbDhBlda0ce^$+&$a}nN7WM7h?11Vl2ohYqEsNoU}Ruup=)5OYiJr`Xk=wz zWMyowZD3$!V6f?6JTMC&X~@k_$xN%nt>N&T=O2L@G(a{Km!(@JB^IaZmKJ3)q-Ex$ rTIuWSm*f`c=O(6SCTHswXSx}hR0c(r?~4ZJB?bmhS3j3^P6!{Buqj zYdy^s`z;oNAXf%GIss^fV>-_TUvuoASAjV3Bi2Pg(4|ATk30<6eMi)cEk|q`y4^d{e|LRA#zKiVp zVxY97sdmw|jnZX)(;b!8X8ZWhmOYaz^zDl!3DN_!$+ME_EBXC7d@h?{a+|(jzsH^Y zaMq3-GIidUooVR&n^Sv&lEWT+Zt3Q)P5s!hy_POvdvy=p#mN%a>gIMf%zvJpA@5Xw zmpO;a`8-!MQA<`b?H47gTd8z=2c@{_I7X6I*+bHE+RlYr>mW=w9$UN&@4SJy;2g{Q z`_t5_NI9|}=3zfwmAgku*aFt`_Qv9ksgEnt160FI*5j7A_t4I{%T$;fn9TDQ!}+c`$Y| zX18yzbH|kR@L20GS8cCr|C-qJe`PtSytjrM^R-=Npg&vn#@16U^2l~KRhoZsD=@z< z8QWwwmK*lBzADVhoJu!szcJc9I6;4BSQ@wqwb4!)!%nt7&22|Cp+4hk!x-^ytY(R}D^dHxM2x1IJ7ju1cv&QgTpsy}Ric-|3m#5K6ZK+E?R1ll^qd^v7nLNnRistroFf^773Kf=@eMwG;gLtwow+tHP! zY9gW8#9kZP8^3MJ;ZdA%-{zzYZkLipEqPXW^b)!lh85RE8_{UbR_Y$1Bf+zU>N8&c z-@$35UL~4BThZ&hSN6)*qZ_#GhHHM0E*@ZmU}MTPG^rWpIAV~XX0<9wwuN|EnjD4% zvbk97!^HEWQF5Kjfcri;_>pjm$Md#z~F;f-p89FR^&Z~hZ@2Z za1vqULZI;QJIn2bd9P;OhFK4QW663$s3i~^OkL#)uv;vSNff8^#2J*dof$wNG7_+g zganfUg4qFN3PPp?uJlC^3W8kzoeQ41S%5GnU65J$Y2Ze+`7Hp5jt-(-e9BgyD1(&0 vQvhWOc4Sce{r$zlTz?^tFG$NG(c`i>Ifa6}L|a57U?4`!`e=3JmVN&M@Jn*G 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' } From c9b6528e5408ea682236960eb3a83051d11b7a6e Mon Sep 17 00:00:00 2001 From: Hrishikesh Kadam Date: Tue, 15 May 2018 20:03:22 +0530 Subject: [PATCH 08/15] Fix bug - Font precedence corrected Previously no other font specified in epub webpages were given preference because CSS injection had !important and fonts were also specified to p, span, div tags. Test Files - [hindi1.epub] (https://www.dropbox.com/s/0f98gq5cnrw31ga/hindi1.epub?dl=0) --- folioreader/src/main/assets/css/Style.css | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/folioreader/src/main/assets/css/Style.css b/folioreader/src/main/assets/css/Style.css index b830b751c..652c51aa6 100755 --- a/folioreader/src/main/assets/css/Style.css +++ b/folioreader/src/main/assets/css/Style.css @@ -246,17 +246,17 @@ html.nightMode .highlight_underline {border-bottom: 2px solid rgba(240, 40, 20, src: url('file:///android_asset/fonts/raleway/Raleway-Regular.ttf'); } -.andada, .andada p, .andada span, .andada div { - font-family: "andada", sans-serif !important; +.andada { + font-family: "andada", sans-serif; } -.lato, .lato p, .lato span, .lato div { - font-family: "lato", serif !important; +.lato { + font-family: "lato", serif; } -.lora, .lora p, .lora span, .lora div { - font-family: "lora", serif !important; +.lora { + font-family: "lora", serif; } -.raleway, .raleway p, .raleway span, .raleway div { - font-family: "raleway", sans-serif !important; +.raleway { + font-family: "raleway", sans-serif; } html.textSizeOne { font-size: 13px !important; } From e4050b4a45907e88bb9421c530f8eec4a9208ce1 Mon Sep 17 00:00:00 2001 From: Hrishikesh Kadam Date: Wed, 16 May 2018 13:31:51 +0530 Subject: [PATCH 09/15] Fix PMD build failing --- .../java/com/folioreader/ui/folio/adapter/DictionaryAdapter.java | 1 + .../com/folioreader/ui/folio/fragment/DictionaryFragment.java | 1 + 2 files changed, 2 insertions(+) diff --git a/folioreader/src/main/java/com/folioreader/ui/folio/adapter/DictionaryAdapter.java b/folioreader/src/main/java/com/folioreader/ui/folio/adapter/DictionaryAdapter.java index 1ad8e11aa..d75249bae 100644 --- a/folioreader/src/main/java/com/folioreader/ui/folio/adapter/DictionaryAdapter.java +++ b/folioreader/src/main/java/com/folioreader/ui/folio/adapter/DictionaryAdapter.java @@ -44,6 +44,7 @@ public DictionaryHolder onCreateViewHolder(ViewGroup parent, int viewType) { } @Override + @SuppressWarnings("PMD.InefficientEmptyStringCheck") public void onBindViewHolder(DictionaryHolder holder, int position) { final DictionaryResults res = results.get(position); if (res.getPartOfSpeech() != null) { diff --git a/folioreader/src/main/java/com/folioreader/ui/folio/fragment/DictionaryFragment.java b/folioreader/src/main/java/com/folioreader/ui/folio/fragment/DictionaryFragment.java index 4d4b42a0d..ea6dc543c 100644 --- a/folioreader/src/main/java/com/folioreader/ui/folio/fragment/DictionaryFragment.java +++ b/folioreader/src/main/java/com/folioreader/ui/folio/fragment/DictionaryFragment.java @@ -178,6 +178,7 @@ public void onDictionaryDataReceived(Dictionary dictionary) { } @Override + @SuppressWarnings("PMD.InefficientEmptyStringCheck") public void onWikipediaDataReceived(Wikipedia wikipedia) { wikiWord.setText(wikipedia.getWord()); if (wikipedia.getDefinition().trim().isEmpty()) { From 45bf5874597848b62d61966c14c325d1581ba5f9 Mon Sep 17 00:00:00 2001 From: Hrishikesh Kadam Date: Wed, 16 May 2018 15:13:18 +0530 Subject: [PATCH 10/15] Update android versions in .travis.yml --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 01962bc7a..675ec9572 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,8 +6,8 @@ before_install: android: components: - - build-tools-26.0.2 - - android-26 + - build-tools-27.0.3 + - android-27 - android-19 - extra-android-m2repository From c5b5df254f05fb48c96636b6958e40cc2e7d0c8f Mon Sep 17 00:00:00 2001 From: Hrishikesh Kadam Date: Wed, 16 May 2018 15:29:34 +0530 Subject: [PATCH 11/15] Update r2-streamer-java to v0.1.5 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index dbb49c8e8..334072821 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ buildscript { ext.KOTLIN_VERSION= '1.2.41' ext.ANDROID_LIB_VERSION = '27.1.1' - ext.R2_STREAMER_VERSION = '0.1.4' + ext.R2_STREAMER_VERSION = '0.1.5' def KOTLIN_VERSION = ext.KOTLIN_VERSION repositories { From 34e03c5a0b07345d256ad683d0ef6a68828ddf1e Mon Sep 17 00:00:00 2001 From: Hrishikesh Kadam Date: Wed, 16 May 2018 18:45:13 +0530 Subject: [PATCH 12/15] Fix #174 Unable to reproduce the bug on adventures.epub and TheSilverChair.epub, but still exception catched and handled. --- .../folioreader/ui/folio/fragment/FolioPageFragment.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/folioreader/src/main/java/com/folioreader/ui/folio/fragment/FolioPageFragment.java b/folioreader/src/main/java/com/folioreader/ui/folio/fragment/FolioPageFragment.java index e1581c89a..a02fe77ae 100644 --- a/folioreader/src/main/java/com/folioreader/ui/folio/fragment/FolioPageFragment.java +++ b/folioreader/src/main/java/com/folioreader/ui/folio/fragment/FolioPageFragment.java @@ -562,7 +562,11 @@ public boolean onJsAlert(WebView view, String url, String message, JsResult resu } } } else if (TextUtils.isDigitsOnly(message)) { - mTotalMinutes = Integer.parseInt(message); + try { + mTotalMinutes = Integer.parseInt(message); + } catch (NumberFormatException e) { + mTotalMinutes = 0; + } } else { pattern = Pattern.compile(getString(R.string.pattern)); matcher = pattern.matcher(message); From 96f83565afa7bdd2e95c3234bd81ea7bedb7191d Mon Sep 17 00:00:00 2001 From: Hrishikesh Kadam Date: Wed, 16 May 2018 18:54:20 +0530 Subject: [PATCH 13/15] v0.3.9 Fixes FolioReader/FolioReader-Android#174 Fixes FolioReader/FolioReader-Android#181 Fixes FolioReader/FolioReader-Android#204 Fixes FolioReader/FolioReader-Android#205 --- folioreader/build.gradle | 2 +- webViewMarker/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/folioreader/build.gradle b/folioreader/build.gradle index 955bbc5f2..9f55be22d 100644 --- a/folioreader/build.gradle +++ b/folioreader/build.gradle @@ -17,7 +17,7 @@ ext { siteUrl = 'https://github.com/FolioReader/FolioReader-Android' gitUrl = 'https://github.com/FolioReader/FolioReader-Android.git' - libraryVersion = '0.3.8' + libraryVersion = '0.3.9' developerId = 'mobisystech' developerName = 'Folio Reader' diff --git a/webViewMarker/build.gradle b/webViewMarker/build.gradle index 2ef699d06..ca9032116 100644 --- a/webViewMarker/build.gradle +++ b/webViewMarker/build.gradle @@ -13,7 +13,7 @@ ext { siteUrl = 'https://github.com/FolioReader/FolioReader-Android' gitUrl = 'https://github.com/FolioReader/FolioReader-Android.git' - libraryVersion = '0.3.8' + libraryVersion = '0.3.9' developerId = 'mobisystech' developerName = 'Folio Reader' From e41fe70e26b0630b49a121b2aaec247ed2c1d844 Mon Sep 17 00:00:00 2001 From: Hrishikesh Kadam Date: Wed, 16 May 2018 19:10:04 +0530 Subject: [PATCH 14/15] Update README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a68bf96f0..b81dc0c93 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ FolioReader-Android is an ePub reader written in Java. ### Gradle Add following dependency to your app build.gradle ``` java -compile 'com.folioreader:folioreader:0.3.8' +compile 'com.folioreader:folioreader:0.3.9' ``` Add maven repository to your top level build.gradle From f42fd86c55c65599fbba782d403ef88758f381b0 Mon Sep 17 00:00:00 2001 From: Hrishikesh Kadam Date: Wed, 16 May 2018 20:23:24 +0530 Subject: [PATCH 15/15] Fix FolioToolbar background bug --- folioreader/src/main/java/com/folioreader/view/FolioToolbar.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/folioreader/src/main/java/com/folioreader/view/FolioToolbar.kt b/folioreader/src/main/java/com/folioreader/view/FolioToolbar.kt index 1e2f0217e..bedc2d992 100644 --- a/folioreader/src/main/java/com/folioreader/view/FolioToolbar.kt +++ b/folioreader/src/main/java/com/folioreader/view/FolioToolbar.kt @@ -32,7 +32,7 @@ class FolioToolbar : RelativeLayout { private fun init() { config = AppUtil.getSavedConfig(context) - if (config.isNightMode) setNightMode() + if (config.isNightMode) setNightMode() else setDayMode() if (!config.isShowTts) btn_speaker.visibility = View.GONE initColors() initListeners()