LibreOffice Module android (master) 1
PresentationActivity.java
Go to the documentation of this file.
1package org.libreoffice;
2
3import android.content.Intent;
4import android.os.Bundle;
5import androidx.annotation.Nullable;
6import androidx.core.view.GestureDetectorCompat;
7import androidx.appcompat.app.AppCompatActivity;
8import android.view.GestureDetector;
9import android.view.KeyEvent;
10import android.view.MotionEvent;
11import android.view.View;
12import android.webkit.WebView;
13import android.widget.Button;
14import android.widget.ImageButton;
15
16public class PresentationActivity extends AppCompatActivity {
17
18 private static final String LOGTAG = PresentationActivity.class.getSimpleName();
19 WebView mWebView;
20 View mGestureView;
21
22 @Override
23 protected void onCreate(@Nullable Bundle savedInstanceState) {
24 super.onCreate(savedInstanceState);
25
26 View decorView = getWindow().getDecorView();
27 // Hide the status bar.
28 int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
29 decorView.setSystemUiVisibility(uiOptions);
30
31 setContentView(R.layout.presentation_mode);
32
33 // get intent and url
34 Intent intent = getIntent();
35 String filePath = intent.getDataString();
36
37 // set up WebView
38 mWebView = findViewById(R.id.presentation_view);
39 mWebView.getSettings().setJavaScriptEnabled(true);
40 mWebView.setOnTouchListener(new View.OnTouchListener() {
41 @Override
42 public boolean onTouch(View v, MotionEvent event) {
43 return true;
44 }
45 });
46
47 // set up buttons within presentation_gesture_view
48 ImageButton prevButton = findViewById(R.id.slide_show_nav_prev);
49 ImageButton nextButton = findViewById(R.id.slide_show_nav_next);
50 Button backButton = findViewById(R.id.slide_show_nav_back);
51
52 prevButton.setOnClickListener(new View.OnClickListener() {
53 @Override
54 public void onClick(View v) {
55 pageLeft();
56 }
57 });
58 nextButton.setOnClickListener(new View.OnClickListener() {
59 @Override
60 public void onClick(View v) {
61 pageRight();
62 }
63 });
64 backButton.setOnClickListener(new View.OnClickListener() {
65 @Override
66 public void onClick(View v) {
67 onBackPressed();
68 }
69 });
70
71 // set up presentation_gesture_view
72 mGestureView = findViewById(R.id.presentation_gesture_view);
73 final GestureDetectorCompat gestureDetector =
74 new GestureDetectorCompat(this, new PresentationGestureViewListener());
75 mGestureView.setOnTouchListener(new View.OnTouchListener() {
76 @Override
77 public boolean onTouch(View v, MotionEvent event) {
78 return gestureDetector.onTouchEvent(event);
79 }
80 });
81
82 // load url
83 mWebView.loadUrl(filePath);
84 }
85
86 private class PresentationGestureViewListener extends GestureDetector.SimpleOnGestureListener {
87 private static final int SWIPE_VELOCITY_THRESHOLD = 100;
88 private static final int SCROLL_THRESHOLD = 10; // if scrollCounter is larger than this, a page switch is triggered
89 private int scrollCounter = 0; // a counter for measuring scrolling distance
90
91 @Override
92 public boolean onDown(MotionEvent e) {
93 return true;
94 }
95
96 @Override
97 public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
98 boolean result = false;
99 try {
100 float diffY = e2.getY() - e1.getY();
101 float diffX = e2.getX() - e1.getX();
102 if (Math.abs(diffX) > Math.abs(diffY)) {
103 if (Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
104 if (diffX > 0) {
105 pageRight();
106 } else {
107 pageLeft();
108 }
109 result = true;
110 }
111 }
112 } catch (Exception exception) {
113 exception.printStackTrace();
114 }
115 return result;
116 }
117
118 @Override
119 public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
120 boolean result = false;
121 try {
122 float diffY = e2.getY() - e1.getY();
123 float diffX = e2.getX() - e1.getX();
124 if (Math.abs(diffX) < Math.abs(diffY)) {
125 if (distanceY > 0) {
126 scrollCounter++;
127 if (scrollCounter >= SCROLL_THRESHOLD) {
128 pageRight();
129 scrollCounter = 0;
130 }
131 } else {
132 scrollCounter--;
133 if (scrollCounter <= -SCROLL_THRESHOLD) {
134 pageLeft();
135 scrollCounter = 0;
136 }
137 }
138 result = true;
139 }
140 } catch (Exception exception) {
141 exception.printStackTrace();
142 }
143 return result;
144 }
145
146 @Override
147 public boolean onSingleTapUp(MotionEvent e) {
148 if (e.getX() < mGestureView.getWidth()/3) {
149 pageLeft();
150 } else if (e.getX() < mGestureView.getWidth()*2/3) {
151 hideControlButtons();
152 } else {
153 pageRight();
154 }
155 return true;
156 }
157 }
158
159 private void hideControlButtons() {
160 View[] views= {findViewById(R.id.slide_show_nav_prev),findViewById(R.id.slide_show_nav_next),findViewById(R.id.slide_show_nav_back)} ;
161 for (View view : views) {
162 if (view.getVisibility() == View.GONE) {
163 view.setVisibility(View.VISIBLE);
164 } else if (view.getVisibility() == View.VISIBLE) {
165 view.setVisibility(View.GONE);
166 }
167 }
168 }
169
170 private void pageLeft() {
171 mWebView.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_LEFT));
172 }
173
174 private void pageRight() {
175 mWebView.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_RIGHT));
176 }
177}
@ Button
boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
void onCreate(@Nullable Bundle savedInstanceState)
@ Exception
filePath
Any result
const sal_uInt8 R