├── .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 | --------------------------------------------------------------------------------