Allow to force a rotation

This commit is contained in:
inorichi 2016-02-12 19:36:00 +01:00
parent 56a45f263e
commit 140bf8caee
6 changed files with 65 additions and 30 deletions

View file

@ -60,6 +60,10 @@ public class PreferencesHelper {
return rxPrefs.getBoolean(getKey(R.string.pref_lock_orientation_key), true); return rxPrefs.getBoolean(getKey(R.string.pref_lock_orientation_key), true);
} }
public Preference<Integer> rotation() {
return rxPrefs.getInteger(getKey(R.string.pref_rotation_type_key), 1);
}
public Preference<Boolean> enableTransitions() { public Preference<Boolean> enableTransitions() {
return rxPrefs.getBoolean(getKey(R.string.pref_enable_transitions_key), true); return rxPrefs.getBoolean(getKey(R.string.pref_enable_transitions_key), true);
} }

View file

@ -3,6 +3,7 @@ package eu.kanade.tachiyomi.ui.reader;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.ActivityInfo; import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.graphics.Color; import android.graphics.Color;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
@ -13,7 +14,6 @@ import android.support.v7.widget.Toolbar;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.Surface;
import android.view.View; import android.view.View;
import android.view.WindowManager; import android.view.WindowManager;
import android.widget.TextView; import android.widget.TextView;
@ -277,9 +277,9 @@ public class ReaderActivity extends BaseRxActivity<ReaderPresenter> {
.asObservable() .asObservable()
.subscribe(this::setPageNumberVisibility)); .subscribe(this::setPageNumberVisibility));
subscriptions.add(preferences.lockOrientation() subscriptions.add(preferences.rotation()
.asObservable() .asObservable()
.subscribe(this::setOrientation)); .subscribe(this::setRotation));
subscriptions.add(preferences.hideStatusBar() subscriptions.add(preferences.hideStatusBar()
.asObservable() .asObservable()
@ -299,28 +299,25 @@ public class ReaderActivity extends BaseRxActivity<ReaderPresenter> {
.subscribe(this::applyTheme)); .subscribe(this::applyTheme));
} }
private void setOrientation(boolean locked) { private void setRotation(int rotation) {
if (locked) {
int orientation;
int rotation = ((WindowManager) getSystemService(
Context.WINDOW_SERVICE)).getDefaultDisplay().getRotation();
switch (rotation) { switch (rotation) {
case Surface.ROTATION_0: // Rotation free
orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; case 1:
break;
case Surface.ROTATION_90:
orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
break;
case Surface.ROTATION_180:
orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;
break;
default:
orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
break;
}
setRequestedOrientation(orientation);
} else {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
break;
// Lock in current rotation
case 2:
int currentOrientation = getResources().getConfiguration().orientation;
setRotation(currentOrientation == Configuration.ORIENTATION_PORTRAIT ? 3 : 4);
break;
// Lock in portrait
case 3:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
break;
// Lock in landscape
case 4:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
break;
} }
} }

View file

@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.ui.reader;
import android.app.Dialog; import android.app.Dialog;
import android.content.Context; import android.content.Context;
import android.content.res.Configuration;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import android.view.Gravity; import android.view.Gravity;
import android.view.Menu; import android.view.Menu;
@ -178,20 +179,31 @@ public class ReaderMenu {
if (nextChapterBtn != null) nextChapterBtn.setVisible(nextChapter != null); if (nextChapterBtn != null) nextChapterBtn.setVisible(nextChapter != null);
} }
@SuppressWarnings("ConstantConditions")
private void initializeMenu() { private void initializeMenu() {
// Orientation changes // Orientation selector
add(preferences.lockOrientation().asObservable() add(preferences.lockOrientation().asObservable()
.subscribe(locked -> { .subscribe(locked -> {
int resourceId = !locked ? R.drawable.ic_screen_rotation : boolean isPortrait = activity.getResources().getConfiguration()
activity.getResources().getConfiguration().orientation == 1 ? .orientation == Configuration.ORIENTATION_PORTRAIT;
int resourceId = !locked ? R.drawable.ic_screen_rotation : isPortrait ?
R.drawable.ic_screen_lock_portrait : R.drawable.ic_screen_lock_portrait :
R.drawable.ic_screen_lock_landscape; R.drawable.ic_screen_lock_landscape;
lockOrientation.setImageResource(resourceId); lockOrientation.setImageResource(resourceId);
})); }));
lockOrientation.setOnClickListener(v -> lockOrientation.setOnClickListener(v -> {
preferences.lockOrientation().set(!preferences.lockOrientation().get())); showImmersiveDialog(new MaterialDialog.Builder(activity)
.title(R.string.pref_rotation_type)
.items(R.array.rotation_type)
.itemsCallbackSingleChoice(preferences.rotation().get() - 1,
(d, itemView, which, text) -> {
preferences.rotation().set(which + 1);
return true;
})
.build());
});
// Zoom selector // Zoom selector
zoomSelector.setOnClickListener(v -> { zoomSelector.setOnClickListener(v -> {
@ -279,6 +291,7 @@ public class ReaderMenu {
initializePopupMenu(); initializePopupMenu();
} }
@SuppressWarnings("ConstantConditions")
private void initializePopupMenu() { private void initializePopupMenu() {
// Load values from preferences // Load values from preferences
enableTransitions.setChecked(preferences.enableTransitions().get()); enableTransitions.setChecked(preferences.enableTransitions().get());

View file

@ -80,6 +80,20 @@
<item>4</item> <item>4</item>
</string-array> </string-array>
<string-array name="rotation_type">
<item>@string/rotation_free</item>
<item>@string/rotation_lock</item>
<item>@string/rotation_force_portrait</item>
<item>@string/rotation_force_landscape</item>
</string-array>
<string-array name="rotation_type_values">
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
</string-array>
<string-array name="library_update_interval"> <string-array name="library_update_interval">
<item>@string/update_never</item> <item>@string/update_never</item>
<item>@string/update_1hour</item> <item>@string/update_1hour</item>

View file

@ -20,6 +20,7 @@
<string name="pref_zoom_start_key">pref_zoom_start_key</string> <string name="pref_zoom_start_key">pref_zoom_start_key</string>
<string name="pref_hide_status_bar_key">pref_hide_status_bar_key</string> <string name="pref_hide_status_bar_key">pref_hide_status_bar_key</string>
<string name="pref_lock_orientation_key">pref_lock_orientation_key</string> <string name="pref_lock_orientation_key">pref_lock_orientation_key</string>
<string name="pref_rotation_type_key">pref_rotation_type_key</string>
<string name="pref_enable_transitions_key">pref_enable_transitions_key</string> <string name="pref_enable_transitions_key">pref_enable_transitions_key</string>
<string name="pref_show_page_number_key">pref_show_page_number_key</string> <string name="pref_show_page_number_key">pref_show_page_number_key</string>
<string name="pref_keep_screen_on_key">pref_keep_screen_on_key</string> <string name="pref_keep_screen_on_key">pref_keep_screen_on_key</string>

View file

@ -111,6 +111,12 @@
<string name="zoom_start_left">Left</string> <string name="zoom_start_left">Left</string>
<string name="zoom_start_right">Right</string> <string name="zoom_start_right">Right</string>
<string name="zoom_start_center">Center</string> <string name="zoom_start_center">Center</string>
<string name="pref_rotation_type">Rotation</string>
<string name="rotation_free">Free</string>
<string name="rotation_lock">Lock</string>
<string name="rotation_force_portrait">Force portrait</string>
<string name="rotation_force_landscape">Force landscape</string>
<!-- Downloads section --> <!-- Downloads section -->
<string name="pref_download_directory">Downloads directory</string> <string name="pref_download_directory">Downloads directory</string>