├── .gitignore
├── PptViewer
├── .classpath
├── .project
├── AndroidManifest.xml
├── ic_launcher-web.png
├── libs
│ ├── android-support-v4.jar
│ └── itsrts-pptviewer.jar
├── proguard-project.txt
├── project.properties
├── res
│ ├── drawable-hdpi
│ │ ├── ic_launcher.png
│ │ ├── next.png
│ │ ├── prev.png
│ │ ├── settings.png
│ │ ├── zoomin.png
│ │ └── zoomout.png
│ ├── drawable-mdpi
│ │ └── ic_launcher.png
│ ├── drawable-xhdpi
│ │ └── ic_launcher.png
│ ├── drawable-xxhdpi
│ │ └── ic_launcher.png
│ ├── layout
│ │ └── activity_main.xml
│ ├── values-v11
│ │ └── styles.xml
│ ├── values-v14
│ │ └── styles.xml
│ └── values
│ │ ├── strings.xml
│ │ └── styles.xml
└── src
│ ├── itsrts
│ └── AppCompactPPTViewer.java
│ └── rts
│ └── pptviewer
│ └── MainActivity.java
└── README.md
/.gitignore:
--------------------------------------------------------------------------------
1 | # Built application files
2 | *.apk
3 | *.ap_
4 |
5 | # Files for the Dalvik VM
6 | *.dex
7 |
8 | # Java class files
9 | *.class
10 |
11 | # Generated files
12 | bin/
13 | gen/
14 |
15 | # Gradle files
16 | .gradle/
17 | build/
18 |
19 | # Local configuration file (sdk path, etc)
20 | local.properties
21 |
22 | # Proguard folder generated by Eclipse
23 | proguard/
24 |
25 | # Log Files
26 | *.log
27 |
--------------------------------------------------------------------------------
/PptViewer/.classpath:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/PptViewer/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | PptViewer
4 |
5 |
6 |
7 |
8 |
9 | com.android.ide.eclipse.adt.ResourceManagerBuilder
10 |
11 |
12 |
13 |
14 | com.android.ide.eclipse.adt.PreCompilerBuilder
15 |
16 |
17 |
18 |
19 | org.eclipse.jdt.core.javabuilder
20 |
21 |
22 |
23 |
24 | com.android.ide.eclipse.adt.ApkBuilder
25 |
26 |
27 |
28 |
29 |
30 | com.android.ide.eclipse.adt.AndroidNature
31 | org.eclipse.jdt.core.javanature
32 |
33 |
34 |
--------------------------------------------------------------------------------
/PptViewer/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
10 |
11 |
12 |
13 |
18 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/PptViewer/ic_launcher-web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itsrts/pptviewer-android/c039d7c80fb3800b8fb2112b0efbf8099eca1c98/PptViewer/ic_launcher-web.png
--------------------------------------------------------------------------------
/PptViewer/libs/android-support-v4.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itsrts/pptviewer-android/c039d7c80fb3800b8fb2112b0efbf8099eca1c98/PptViewer/libs/android-support-v4.jar
--------------------------------------------------------------------------------
/PptViewer/libs/itsrts-pptviewer.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itsrts/pptviewer-android/c039d7c80fb3800b8fb2112b0efbf8099eca1c98/PptViewer/libs/itsrts-pptviewer.jar
--------------------------------------------------------------------------------
/PptViewer/proguard-project.txt:
--------------------------------------------------------------------------------
1 | # To enable ProGuard in your project, edit project.properties
2 | # to define the proguard.config property as described in that file.
3 | #
4 | # Add project specific ProGuard rules here.
5 | # By default, the flags in this file are appended to flags specified
6 | # in ${sdk.dir}/tools/proguard/proguard-android.txt
7 | # You can edit the include path and order by changing the ProGuard
8 | # include property in project.properties.
9 | #
10 | # For more details, see
11 | # http://developer.android.com/guide/developing/tools/proguard.html
12 |
13 | # Add any project specific keep options here:
14 |
15 | # If your project uses WebView with JS, uncomment the following
16 | # and specify the fully qualified class name to the JavaScript interface
17 | # class:
18 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
19 | # public *;
20 | #}
21 |
--------------------------------------------------------------------------------
/PptViewer/project.properties:
--------------------------------------------------------------------------------
1 | # This file is automatically generated by Android Tools.
2 | # Do not modify this file -- YOUR CHANGES WILL BE ERASED!
3 | #
4 | # This file must be checked in Version Control Systems.
5 | #
6 | # To customize properties used by the Ant build system edit
7 | # "ant.properties", and override values to adapt the script to your
8 | # project structure.
9 | #
10 | # To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
11 | #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
12 |
13 | # Project target.
14 | target=android-19
15 | android.library.reference.1=../appcompat_v7
16 |
--------------------------------------------------------------------------------
/PptViewer/res/drawable-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itsrts/pptviewer-android/c039d7c80fb3800b8fb2112b0efbf8099eca1c98/PptViewer/res/drawable-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/PptViewer/res/drawable-hdpi/next.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itsrts/pptviewer-android/c039d7c80fb3800b8fb2112b0efbf8099eca1c98/PptViewer/res/drawable-hdpi/next.png
--------------------------------------------------------------------------------
/PptViewer/res/drawable-hdpi/prev.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itsrts/pptviewer-android/c039d7c80fb3800b8fb2112b0efbf8099eca1c98/PptViewer/res/drawable-hdpi/prev.png
--------------------------------------------------------------------------------
/PptViewer/res/drawable-hdpi/settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itsrts/pptviewer-android/c039d7c80fb3800b8fb2112b0efbf8099eca1c98/PptViewer/res/drawable-hdpi/settings.png
--------------------------------------------------------------------------------
/PptViewer/res/drawable-hdpi/zoomin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itsrts/pptviewer-android/c039d7c80fb3800b8fb2112b0efbf8099eca1c98/PptViewer/res/drawable-hdpi/zoomin.png
--------------------------------------------------------------------------------
/PptViewer/res/drawable-hdpi/zoomout.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itsrts/pptviewer-android/c039d7c80fb3800b8fb2112b0efbf8099eca1c98/PptViewer/res/drawable-hdpi/zoomout.png
--------------------------------------------------------------------------------
/PptViewer/res/drawable-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itsrts/pptviewer-android/c039d7c80fb3800b8fb2112b0efbf8099eca1c98/PptViewer/res/drawable-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/PptViewer/res/drawable-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itsrts/pptviewer-android/c039d7c80fb3800b8fb2112b0efbf8099eca1c98/PptViewer/res/drawable-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/PptViewer/res/drawable-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/itsrts/pptviewer-android/c039d7c80fb3800b8fb2112b0efbf8099eca1c98/PptViewer/res/drawable-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/PptViewer/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
11 |
12 |
--------------------------------------------------------------------------------
/PptViewer/res/values-v11/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/PptViewer/res/values-v14/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/PptViewer/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | PptViewer
5 | Hello world!
6 |
7 |
8 |
--------------------------------------------------------------------------------
/PptViewer/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
14 |
15 |
16 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/PptViewer/src/itsrts/AppCompactPPTViewer.java:
--------------------------------------------------------------------------------
1 | package com.itsrts;
2 |
3 | import android.content.Context;
4 | import android.content.res.Resources;
5 | import android.graphics.Color;
6 | import android.support.v7.app.AppCompatActivity;
7 | import android.util.AttributeSet;
8 | import android.util.Log;
9 | import android.view.GestureDetector;
10 | import android.view.MotionEvent;
11 | import android.view.ScaleGestureDetector;
12 | import android.view.View;
13 | import android.view.ViewGroup;
14 | import android.widget.ProgressBar;
15 | import android.widget.RelativeLayout;
16 |
17 | import com.olivephone.office.TempFileManager;
18 | import com.olivephone.office.powerpoint.DocumentSession;
19 | import com.olivephone.office.powerpoint.DocumentSessionBuilder;
20 | import com.olivephone.office.powerpoint.DocumentSessionStatusListener;
21 | import com.olivephone.office.powerpoint.android.AndroidMessageProvider;
22 | import com.olivephone.office.powerpoint.android.AndroidSystemColorProvider;
23 | import com.olivephone.office.powerpoint.android.AndroidTempFileStorageProvider;
24 | import com.olivephone.office.powerpoint.view.PersentationView;
25 | import com.olivephone.office.powerpoint.view.SlideShowNavigator;
26 | import com.olivephone.office.powerpoint.view.SlideView;
27 |
28 | import java.io.File;
29 |
30 | public class AppCompactPPTViewer extends RelativeLayout implements DocumentSessionStatusListener, View.OnTouchListener {
31 |
32 | public static final int SLIDE_ID = 23762378;
33 |
34 | LayoutParams params;
35 | String path;
36 | Context ctx;
37 | AppCompatActivity act;
38 | boolean maintainZoomLevel = false;
39 | double zoomlevel = 20;
40 | double zoomfactor = 0.5;
41 | PPTViewerListener listener;
42 | boolean isLoaded, pinchZoomEnabled = true, swipeToChangeEnabled = true;
43 | private DocumentSession session;
44 | private SlideShowNavigator navitator;
45 | private PersentationView slide;
46 | private View progressView;
47 | private int currentSlideNumber = -1;
48 | private ScaleGestureDetector mScaleDetector;
49 | private GestureDetector mGestureDetector;
50 |
51 | public AppCompactPPTViewer(Context ctx, AttributeSet attr) {
52 | super(ctx, attr);
53 | this.ctx = ctx;
54 | params = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
55 | params.addRule(CENTER_IN_PARENT);
56 | slide = new PersentationView(ctx, attr);
57 | slide.setId(SLIDE_ID);
58 | mScaleDetector = new ScaleGestureDetector(ctx, new ScaleListener());
59 | mGestureDetector = new GestureDetector(ctx, new GestureListener());
60 | slide.setOnTouchListener(this);
61 | slide.setVisibility(INVISIBLE);
62 | this.addView(slide, params);
63 |
64 | progressView = new View(ctx);
65 | progressView.setBackgroundColor(Color.WHITE);
66 | this.addView(slide, params);
67 | }
68 |
69 | public boolean isLoaded() {
70 | return isLoaded;
71 | }
72 |
73 | public boolean isSwipeToChangeEnabled() {
74 | return swipeToChangeEnabled;
75 | }
76 |
77 | public AppCompactPPTViewer setSwipeToChangeEnabled(boolean swipeToChangeEnabled) {
78 | this.swipeToChangeEnabled = swipeToChangeEnabled;
79 | return this;
80 | }
81 |
82 | public boolean isPinchZoomEnabled() {
83 | return pinchZoomEnabled;
84 | }
85 |
86 | public AppCompactPPTViewer setPinchZoomEnabled(boolean pinchZoomEnabled) {
87 | this.pinchZoomEnabled = pinchZoomEnabled;
88 | return this;
89 | }
90 |
91 | public double getZoomfactor() {
92 | return zoomfactor;
93 | }
94 |
95 | public AppCompactPPTViewer setZoomfactor(double zoomfactor) {
96 | this.zoomfactor = zoomfactor;
97 | return this;
98 | }
99 |
100 | public boolean isMaintainZoomLevel() {
101 | return maintainZoomLevel;
102 | }
103 |
104 | public AppCompactPPTViewer setMaintainZoomLevel(boolean maintainZoomLevel) {
105 | this.maintainZoomLevel = maintainZoomLevel;
106 | return this;
107 | }
108 |
109 | @Override
110 | public boolean onTouch(View v, MotionEvent event) {
111 | mScaleDetector.onTouchEvent(event);
112 | mGestureDetector.onTouchEvent(event);
113 | return false;
114 | }
115 |
116 | public AppCompactPPTViewer setPPTViewerListner(PPTViewerListener listner) {
117 | this.listener = listner;
118 | return this;
119 | }
120 |
121 | public int getCurrentSlideNumber() {
122 | return currentSlideNumber;
123 | }
124 |
125 | public int getTotalSlides() {
126 | return this.session != null && this.session.getPPTContext() != null ? this.navitator.getSlideCount() : -1;
127 | }
128 |
129 | public void setPath(String path) {
130 | this.path = path;
131 | }
132 |
133 | public void loadPPT(AppCompatActivity act, String path) {
134 | this.setPath(path);
135 | this.act = act;
136 | try {
137 | AndroidMessageProvider e = new AndroidMessageProvider(this.ctx);
138 | TempFileManager tmpFileManager = new TempFileManager(new AndroidTempFileStorageProvider(this.ctx));
139 | AndroidSystemColorProvider sysColorProvider = new AndroidSystemColorProvider();
140 | this.session = (new DocumentSessionBuilder(new File(this.path))).setMessageProvider(e).setTempFileManager(tmpFileManager).setSystemColorProvider(sysColorProvider).setSessionStatusListener(this).build();
141 | this.session.startSession();
142 | } catch (Exception var5) {
143 | var5.printStackTrace();
144 | }
145 | }
146 |
147 | int dpToPx(int dp) {
148 | return (int) ((float) dp * Resources.getSystem().getDisplayMetrics().density);
149 | }
150 |
151 | int pxToDp(int px) {
152 | return (int) ((float) px / Resources.getSystem().getDisplayMetrics().density);
153 | }
154 |
155 | public void onDocumentException(Exception e) {
156 | if (listener != null) {
157 | listener.onSlideLoadError(e);
158 | }
159 | }
160 |
161 | public void onDocumentReady() {
162 | this.act.runOnUiThread(new Runnable() {
163 | public void run() {
164 | slide.setVisibility(VISIBLE);
165 | isLoaded = true;
166 | AppCompactPPTViewer.this.navitator = new SlideShowNavigator(AppCompactPPTViewer.this.session.getPPTContext());
167 | currentSlideNumber = navitator.getFirstSlideNumber() - 1;
168 | progressView.setVisibility(GONE);
169 | AppCompactPPTViewer.this.next();
170 | if (listener != null) {
171 | listener.onSlidesLoaded();
172 | }
173 | }
174 | });
175 | }
176 |
177 | public void onSessionEnded() {
178 | }
179 |
180 | public void onSessionStarted() {
181 | }
182 |
183 | public void zoom(double zoomlevel) {
184 | if (zoomlevel < 5) {
185 | return;
186 | }
187 | if (this.slide != null) {
188 | this.slide.notifyScale(zoomlevel / 100.0D);
189 | }
190 | }
191 |
192 | public void zoomIn() {
193 | zoomlevel += zoomfactor;
194 | zoom(zoomlevel);
195 | }
196 |
197 | public void zoomOut() {
198 | zoomlevel -= zoomfactor;
199 | zoom(zoomlevel);
200 | }
201 |
202 | public boolean navigateTo(int slideNumber) {
203 | if (slideNumber < navitator.getFirstSlideNumber() || slideNumber > navitator.getFirstSlideNumber() + navitator.getSlideCount()) {
204 | return false;
205 | }
206 | SlideView slideShow = this.navitator.navigateToSlide(this.slide.getGraphicsContext(), slideNumber);
207 | // slide.notifyScale(zoomlevel);
208 | this.slide.setContentView(slideShow);
209 | if (listener != null) {
210 | listener.onSlideChanged(slideNumber);
211 | }
212 | return true;
213 | }
214 |
215 | public boolean next() {
216 | if (this.navitator != null) {
217 | if (this.navitator.getFirstSlideNumber() + this.navitator.getSlideCount() - 1 > this.currentSlideNumber) {
218 | return this.navigateTo(++this.currentSlideNumber);
219 | }
220 | }
221 | return false;
222 | }
223 |
224 | public boolean previous() {
225 | if (this.navitator != null) {
226 | if (this.navitator.getFirstSlideNumber() < this.currentSlideNumber) {
227 | return this.navigateTo(--this.currentSlideNumber);
228 | }
229 | }
230 | return false;
231 | }
232 |
233 | public interface PPTViewerListener {
234 |
235 | void onSlideTapped();
236 |
237 | void onSlidesLoaded();
238 |
239 | void onSlideLoadError(Exception e);
240 |
241 | void onSlideChanged(int position);
242 | }
243 |
244 | private class GestureListener extends GestureDetector.SimpleOnGestureListener {
245 |
246 | private static final int SWIPE_MIN_DISTANCE = 120;
247 | private static final int SWIPE_MAX_OFF_PATH = 250;
248 | private static final int SWIPE_THRESHOLD_VELOCITY = 300;
249 |
250 | @Override
251 | public boolean onSingleTapConfirmed(MotionEvent e) {
252 | if (listener != null) {
253 | listener.onSlideTapped();
254 | }
255 | return false;
256 | }
257 |
258 | @Override
259 | public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
260 | if (!isSwipeToChangeEnabled()) {
261 | return false;
262 | }
263 | try {
264 | if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) {
265 | return false;
266 | }
267 | // right to left swipe
268 | if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
269 | && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
270 | next();
271 | }
272 | // left to right swipe
273 | else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
274 | && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
275 | previous();
276 | }
277 | } catch (Exception e) {
278 | return false;
279 | }
280 | return true;
281 | }
282 | }
283 |
284 | private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
285 |
286 | float d = 1;
287 |
288 | @Override
289 | public boolean onScaleBegin(ScaleGestureDetector detector) {
290 | d = 0;
291 | return isPinchZoomEnabled();
292 | }
293 |
294 | @Override
295 | public boolean onScale(ScaleGestureDetector detector) {
296 | if (!isPinchZoomEnabled()) {
297 | return false;
298 | }
299 | double deltaScale = detector.getScaleFactor();
300 | float x = detector.getFocusX();
301 | float y = detector.getFocusY();
302 | if (deltaScale > 1) {
303 | Log.e("scale : ", "zoomin");
304 | zoomIn();
305 | }
306 | if (deltaScale < 1) {
307 | Log.e("scale : ", "zoomout");
308 | zoomOut();
309 | }
310 | // Log.e("scale", deltaScale + " : " + x + " : " + a);
311 | return true;
312 | }
313 |
314 | @Override
315 | public void onScaleEnd(ScaleGestureDetector detector) {
316 | super.onScaleEnd(detector);
317 | }
318 | }
319 | }
320 |
--------------------------------------------------------------------------------
/PptViewer/src/rts/pptviewer/MainActivity.java:
--------------------------------------------------------------------------------
1 | package rts.pptviewer;
2 |
3 | import com.itsrts.pptviewer.PPTViewer;
4 |
5 | import android.app.Activity;
6 | import android.os.Bundle;
7 | import android.os.Environment;
8 |
9 | public class MainActivity extends Activity {
10 |
11 | PPTViewer pptViewer;
12 |
13 | @Override
14 | protected void onCreate(Bundle savedInstanceState) {
15 | super.onCreate(savedInstanceState);
16 | setContentView(R.layout.activity_main);
17 | pptViewer = (PPTViewer) findViewById(R.id.pptviewer);
18 | String path = Environment.getExternalStorageDirectory().getPath()
19 | + "/Download/ssadagopan.ppt";
20 | pptViewer.setNext_img(R.drawable.next).setPrev_img(R.drawable.prev)
21 | .setSettings_img(R.drawable.settings)
22 | .setZoomin_img(R.drawable.zoomin)
23 | .setZoomout_img(R.drawable.zoomout);
24 | pptViewer.loadPPT(this, path);
25 |
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | pptviewer
2 | =========
3 |
4 | NOTE : I have discontinued support for this project. It is provided as it basis.
5 | A ppt viewer library, which can be easily used in any existing android application.
6 |
7 | Hello folks,
8 | I was working on a project for wireless presentation and i need to embedd a PPT viewer in it.
9 | I searched for some existing library but found none of them to be developer friendly.
10 | So here is a custom library made by me for seamless integration of a PPT viewer in any existing application.
11 |
12 | All you need to do is:
13 |
14 | 1. Download the library of mine (of course from GitHub).
15 |
16 | 2. Somehow add it to your existing app, that can be done in any ways.
17 | a. Copy and Paste it in a folder named as "libs" in your project root directory.
18 | b. Add it to your build path by right clicking on your project and "Configure build ......."
19 |
20 | 3. You must be having an Activity and an XML file for it.
21 |
22 | 4. Now open the layout XML file and add the following line of code in it.
23 | < com.itsrts.pptviewer.PPTViewer
24 | android:id="@+id/pptviewer"
25 | android:width="match_parent"
26 | android:height="match_parent"
27 | />
28 |
29 | 5. Goto the main activity file which will be inflating the above XML and after the "setContentView", add:
30 | PPTViewer pptViewer = (PPTViewer) findViewById(R.id.pptviewer);
31 | pptViewer.setNext_img(R.drawable.next)
32 | .setPrev_img(R.drawable.prev)
33 | .setSettings_img(R.drawable.settings)
34 | .setZoomin_img(R.drawable.zoomin)
35 | .setZoomout_img(R.drawable.zoomout);
36 | pptViewer.loadPPT(activity, path);
37 | // path is a String having the location of the ppt file to be loaded.
38 |
39 | The library is fully customizable with the option to change the viewer the way you want.
40 |
--------------------------------------------------------------------------------