android/sdremote/AndroidManifest.xml | 11 - android/sdremote/res/drawable/actionbar_none.png |binary android/sdremote/res/drawable/actionbar_pressed.png |binary android/sdremote/res/drawable/actionbar_selected.png |binary android/sdremote/res/drawable/actionbar_thumbs.xml | 9 android/sdremote/res/drawable/actionbar_toggle.xml | 8 android/sdremote/res/drawable/empty.png |binary android/sdremote/res/drawable/icon_overflow.png |binary android/sdremote/res/drawable/icon_thumbs.png |binary android/sdremote/res/layout/fragment_presentation.xml | 7 android/sdremote/res/layout/fragment_thumbnail.xml | 1 android/sdremote/res/layout/presentation_actionbar.xml | 25 ++ android/sdremote/res/layout/presentation_clockbar.xml | 30 ++ android/sdremote/res/layout/slide_thumbnail.xml | 3 android/sdremote/res/menu/actionbar_presentation.xml | 21 + android/sdremote/res/values/strings.xml | 2 android/sdremote/res/values/styles.xml | 28 ++ android/sdremote/src/org/libreoffice/impressremote/ActionBarManager.java | 69 ------ android/sdremote/src/org/libreoffice/impressremote/PresentationActivity.java | 107 +++++++++- android/sdremote/src/org/libreoffice/impressremote/PresentationFragment.java | 93 ++++---- android/sdremote/src/org/libreoffice/impressremote/TestClient.java | 1 android/sdremote/src/org/libreoffice/impressremote/ThumbnailFragment.java | 19 + 22 files changed, 289 insertions(+), 145 deletions(-)
New commits: commit 9a6f7f37961e316b376151fe8d800b5eeca44a55 Author: Andrzej J.R. Hunt <[email protected]> Date: Wed Jul 25 18:30:43 2012 +0200 Basic clock control bar done. Change-Id: I Ifd2e56b97f5b53ce29101d9eee7953b7700fb749 diff --git a/android/sdremote/res/layout/presentation_clockbar.xml b/android/sdremote/res/layout/presentation_clockbar.xml new file mode 100644 index 0000000..5ab7081 --- /dev/null +++ b/android/sdremote/res/layout/presentation_clockbar.xml @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal" + android:background="#BB000000"> + + <ToggleButton + android:id="@+id/clockbar_toggle_clockmode" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="1" + + android:text="ToggleButton" /> + + <ToggleButton + android:id="@+id/clockbar_toggle_stopwatchmode" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="1" + android:text="@drawable/actionbar_toggle" /> + + <ToggleButton + android:id="@+id/clockbar_toggle_countdownmode" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="1" + android:text="@drawable/actionbar_toggle" /> + +</LinearLayout> \ No newline at end of file diff --git a/android/sdremote/src/org/libreoffice/impressremote/PresentationActivity.java b/android/sdremote/src/org/libreoffice/impressremote/PresentationActivity.java index 234042d..48e6678 100644 --- a/android/sdremote/src/org/libreoffice/impressremote/PresentationActivity.java +++ b/android/sdremote/src/org/libreoffice/impressremote/PresentationActivity.java @@ -16,6 +16,7 @@ import android.os.IBinder; import android.os.Message; import android.os.Messenger; import android.text.format.DateFormat; +import android.view.LayoutInflater; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; @@ -135,7 +136,7 @@ public class PresentationActivity extends Activity { mTimeLabel = (ToggleButton) aBar.getCustomView().findViewById( R.id.actionbar_time); - mThumbnailButton.setOnClickListener(this); + mTimeLabel.setOnClickListener(this); // Listen for fragment changes getFragmentManager().addOnBackStackChangedListener(this); @@ -184,7 +185,11 @@ public class PresentationActivity extends Activity { getFragmentManager().popBackStack(); } } else if (aSource == mTimeLabel) { - + System.out.println("added"); + LayoutInflater aInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); + View v = aInflater.inflate(R.layout.presentation_clockbar, + mLayout); + // mLayout.addView(v); } } commit 8c16a9119531d728e00657ecd05f2661b2d8520d Author: Andrzej J.R. Hunt <[email protected]> Date: Wed Jul 25 18:01:22 2012 +0200 Prepared clock button. Change-Id: I481885d7f9508dca887380d7f577bb35b04d6b07 diff --git a/android/sdremote/res/layout/presentation_actionbar.xml b/android/sdremote/res/layout/presentation_actionbar.xml index 818748b..1fd3bae 100644 --- a/android/sdremote/res/layout/presentation_actionbar.xml +++ b/android/sdremote/res/layout/presentation_actionbar.xml @@ -12,10 +12,12 @@ android:textOff="" android:textOn="" /> - <TextView + <ToggleButton android:id="@+id/actionbar_time" android:layout_width="match_parent" android:layout_height="match_parent" + android:layout_gravity="center" + android:background="@drawable/actionbar_toggle" android:gravity="center" android:textColor="#FFFFFF" android:textSize="22dp" /> diff --git a/android/sdremote/res/values/styles.xml b/android/sdremote/res/values/styles.xml index 04143c4..bb11845 100644 --- a/android/sdremote/res/values/styles.xml +++ b/android/sdremote/res/values/styles.xml @@ -13,6 +13,7 @@ <style name="Theme.ImpressRemote.ActionBar" parent="android:style/Widget.Holo.Light.ActionBar"> <item name="android:background">@color/orange</item> + <item name="android:displayOptions">showCustom</item> </style> <style name="Theme.ImpressRemote.ActionBarWidget" parent="android:style/Widget.Holo.Light"> diff --git a/android/sdremote/src/org/libreoffice/impressremote/PresentationActivity.java b/android/sdremote/src/org/libreoffice/impressremote/PresentationActivity.java index 795ab53..234042d 100644 --- a/android/sdremote/src/org/libreoffice/impressremote/PresentationActivity.java +++ b/android/sdremote/src/org/libreoffice/impressremote/PresentationActivity.java @@ -20,7 +20,6 @@ import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.FrameLayout; -import android.widget.TextView; import android.widget.ToggleButton; public class PresentationActivity extends Activity { @@ -107,7 +106,7 @@ public class PresentationActivity extends Activity { private class ActionBarManager implements OnClickListener, FragmentManager.OnBackStackChangedListener { - private TextView mTimeLabel; + private ToggleButton mTimeLabel; private ToggleButton mThumbnailButton; private String aTimeFormat = getResources().getString( @@ -134,7 +133,7 @@ public class PresentationActivity extends Activity { .findViewById(R.id.actionbar_thumbnailtoggle); mThumbnailButton.setOnClickListener(this); - mTimeLabel = (TextView) aBar.getCustomView().findViewById( + mTimeLabel = (ToggleButton) aBar.getCustomView().findViewById( R.id.actionbar_time); mThumbnailButton.setOnClickListener(this); commit b6ecca12f1cd1b7aca8249fb771444e2c512d4b1 Author: Andrzej J.R. Hunt <[email protected]> Date: Wed Jul 25 16:51:41 2012 +0200 Added proper toggling for thumbnail button. Change-Id: I2dc83bd3503c17d27c6461cd925cc22af7f61af8 diff --git a/android/sdremote/res/drawable/actionbar_none.png b/android/sdremote/res/drawable/actionbar_none.png new file mode 100644 index 0000000..d7895e5 Binary files /dev/null and b/android/sdremote/res/drawable/actionbar_none.png differ diff --git a/android/sdremote/res/drawable/actionbar_pressed.png b/android/sdremote/res/drawable/actionbar_pressed.png new file mode 100644 index 0000000..812c92b Binary files /dev/null and b/android/sdremote/res/drawable/actionbar_pressed.png differ diff --git a/android/sdremote/res/drawable/actionbar_selected.png b/android/sdremote/res/drawable/actionbar_selected.png new file mode 100644 index 0000000..9c471a3 Binary files /dev/null and b/android/sdremote/res/drawable/actionbar_selected.png differ diff --git a/android/sdremote/res/drawable/actionbar_thumbs.xml b/android/sdremote/res/drawable/actionbar_thumbs.xml new file mode 100644 index 0000000..2dbf5ea --- /dev/null +++ b/android/sdremote/res/drawable/actionbar_thumbs.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8"?> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > + + <item android:drawable="@drawable/actionbar_toggle"/> + <item><bitmap + android:src="@drawable/icon_thumbs" + android:gravity="center" /></item> + +</layer-list> \ No newline at end of file diff --git a/android/sdremote/res/drawable/actionbar_toggle.xml b/android/sdremote/res/drawable/actionbar_toggle.xml new file mode 100644 index 0000000..3f53266 --- /dev/null +++ b/android/sdremote/res/drawable/actionbar_toggle.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?> +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + + <item android:drawable="@drawable/actionbar_selected" android:state_checked="true" /> + <item android:drawable="@drawable/actionbar_pressed" android:state_pressed="true"/> + <item android:drawable="@drawable/actionbar_none"/> + +</selector> \ No newline at end of file diff --git a/android/sdremote/res/layout/fragment_thumbnail.xml b/android/sdremote/res/layout/fragment_thumbnail.xml index 068ab78..ecd8855 100644 --- a/android/sdremote/res/layout/fragment_thumbnail.xml +++ b/android/sdremote/res/layout/fragment_thumbnail.xml @@ -7,6 +7,7 @@ android:gravity="center" android:horizontalSpacing="10dp" android:numColumns="auto_fit" + android:paddingTop="10dp" android:stretchMode="columnWidth" android:verticalSpacing="10dp" > diff --git a/android/sdremote/res/layout/presentation_actionbar.xml b/android/sdremote/res/layout/presentation_actionbar.xml index 01f0d51..818748b 100644 --- a/android/sdremote/res/layout/presentation_actionbar.xml +++ b/android/sdremote/res/layout/presentation_actionbar.xml @@ -4,19 +4,20 @@ android:layout_height="match_parent" android:orientation="horizontal" > - <ImageButton + <ToggleButton android:id="@+id/actionbar_thumbnailtoggle" android:layout_width="wrap_content" android:layout_height="match_parent" - android:background="@drawable/empty" - android:src="@drawable/icon_thumbs" /> + android:background="@drawable/actionbar_thumbs" + android:textOff="" + android:textOn="" /> <TextView android:id="@+id/actionbar_time" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" - android:textSize="22dp" - android:textColor="#FFFFFF"/> + android:textColor="#FFFFFF" + android:textSize="22dp" /> </LinearLayout> \ No newline at end of file diff --git a/android/sdremote/src/org/libreoffice/impressremote/PresentationActivity.java b/android/sdremote/src/org/libreoffice/impressremote/PresentationActivity.java index 8b6d75f..795ab53 100644 --- a/android/sdremote/src/org/libreoffice/impressremote/PresentationActivity.java +++ b/android/sdremote/src/org/libreoffice/impressremote/PresentationActivity.java @@ -20,8 +20,8 @@ import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.FrameLayout; -import android.widget.ImageButton; import android.widget.TextView; +import android.widget.ToggleButton; public class PresentationActivity extends Activity { private CommunicationService mCommunicationService; @@ -104,10 +104,11 @@ public class PresentationActivity extends Activity { } } - private class ActionBarManager implements OnClickListener { + private class ActionBarManager implements OnClickListener, + FragmentManager.OnBackStackChangedListener { private TextView mTimeLabel; - private ImageButton mThumbnailButton; + private ToggleButton mThumbnailButton; private String aTimeFormat = getResources().getString( R.string.actionbar_timeformat); @@ -129,14 +130,17 @@ public class PresentationActivity extends Activity { aBar.setCustomView(R.layout.presentation_actionbar); // Set up the various components - mThumbnailButton = (ImageButton) aBar.getCustomView().findViewById( - R.id.actionbar_thumbnailtoggle); + mThumbnailButton = (ToggleButton) aBar.getCustomView() + .findViewById(R.id.actionbar_thumbnailtoggle); mThumbnailButton.setOnClickListener(this); mTimeLabel = (TextView) aBar.getCustomView().findViewById( R.id.actionbar_time); mThumbnailButton.setOnClickListener(this); + // Listen for fragment changes + getFragmentManager().addOnBackStackChangedListener(this); + // Setup the auto updater timerHandler.removeCallbacks(timerUpdateThread); timerHandler.postDelayed(timerUpdateThread, 50); @@ -170,17 +174,28 @@ public class PresentationActivity extends Activity { @Override public void onClick(View aSource) { if (aSource == mThumbnailButton) { - FragmentTransaction ft = getFragmentManager() - .beginTransaction(); - ft.replace(R.id.framelayout, mThumbnailFragment); - ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); - ft.addToBackStack(null); - ft.commit(); + if (!mThumbnailFragment.isVisible()) { + FragmentTransaction ft = getFragmentManager() + .beginTransaction(); + ft.replace(R.id.framelayout, mThumbnailFragment); + ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); + ft.addToBackStack(null); + ft.commit(); + } else { + getFragmentManager().popBackStack(); + } } else if (aSource == mTimeLabel) { } } + + @Override + public void onBackStackChanged() { + if (getFragmentManager().getBackStackEntryCount() == 0) { + mThumbnailButton.setChecked(false); + } + } } } commit dfbd492dbea708847fd329ba19d64f5c58f39cf2 Author: Andrzej J.R. Hunt <[email protected]> Date: Wed Jul 25 15:42:46 2012 +0200 Fully fixed coverflow resizing, added menu, fixed fragment changes. Change-Id: Iaec671f81dada2dd9c667bde48b34ae2e89a321d diff --git a/android/sdremote/res/drawable/icon_overflow.png b/android/sdremote/res/drawable/icon_overflow.png new file mode 100644 index 0000000..5265c45 Binary files /dev/null and b/android/sdremote/res/drawable/icon_overflow.png differ diff --git a/android/sdremote/res/layout/fragment_presentation.xml b/android/sdremote/res/layout/fragment_presentation.xml index 2b58bde..03c4ee7 100644 --- a/android/sdremote/res/layout/fragment_presentation.xml +++ b/android/sdremote/res/layout/fragment_presentation.xml @@ -19,7 +19,9 @@ android:id="@+id/presentation_slidenumber" android:layout_width="wrap_content" android:layout_height="wrap_content" - /> + android:layout_gravity="center_horizontal" + android:text="" /> + <ImageView android:id="@+id/presentation_handle" android:layout_width="fill_parent" diff --git a/android/sdremote/res/layout/slide_thumbnail.xml b/android/sdremote/res/layout/slide_thumbnail.xml index 448b3ed..d3834c7 100644 --- a/android/sdremote/res/layout/slide_thumbnail.xml +++ b/android/sdremote/res/layout/slide_thumbnail.xml @@ -9,7 +9,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" - android:src="@drawable/ic_launcher" /> + android:src="@drawable/ic_launcher" + android:adjustViewBounds="true"/> <TextView android:id="@+id/sub_number" diff --git a/android/sdremote/res/menu/actionbar_presentation.xml b/android/sdremote/res/menu/actionbar_presentation.xml index 03524ef..a48aad5 100644 --- a/android/sdremote/res/menu/actionbar_presentation.xml +++ b/android/sdremote/res/menu/actionbar_presentation.xml @@ -3,7 +3,8 @@ <item android:id="@+id/actionbar_presentation_submenu" - android:showAsAction="always"> + android:showAsAction="always" + android:icon="@drawable/icon_overflow"> <menu> <item android:id="@+id/actionbar_presentation_submenu_blank" diff --git a/android/sdremote/src/org/libreoffice/impressremote/PresentationFragment.java b/android/sdremote/src/org/libreoffice/impressremote/PresentationFragment.java index 7862539..ed6e86f 100644 --- a/android/sdremote/src/org/libreoffice/impressremote/PresentationFragment.java +++ b/android/sdremote/src/org/libreoffice/impressremote/PresentationFragment.java @@ -38,6 +38,9 @@ public class PresentationFragment extends Fragment { private CommunicationService mCommunicationService; private SlideShow mSlideShow; + private float mOriginalCoverflowWidth; + private float mOriginalCoverflowHeight; + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mContext = container.getContext(); @@ -66,6 +69,9 @@ public class PresentationFragment extends Fragment { // Call again to set things up if necessary. setCommunicationService(mCommunicationService); + // Save the height/width for future reference + mOriginalCoverflowHeight = mTopView.getImageHeight(); + mOriginalCoverflowWidth = mTopView.getImageWidth(); return v; } @@ -84,38 +90,51 @@ public class PresentationFragment extends Fragment { break; case MotionEvent.ACTION_MOVE: LayoutParams aParams = mTopView.getLayoutParams(); - int aHeightOriginal = mTopView.getHeight(); int aHeight = mTopView.getHeight(); + int aViewSize = mLayout.getHeight(); final int DRAG_MARGIN = 120; - // Set Height - - aParams.height = aHeight + (int) (aEvent.getY()); - int aViewSize = mLayout.getHeight(); - if (aParams.height < DRAG_MARGIN) { - aParams.height = DRAG_MARGIN; - } else if (aParams.height > aViewSize - DRAG_MARGIN) { - aParams.height = aViewSize - DRAG_MARGIN; + // Calculate height change, taking limits into account + int aDiff = (int) (aEvent.getY()); + System.out.println("Diff1 is :" + aDiff); + if (aDiff + aHeight < DRAG_MARGIN) { + aDiff = DRAG_MARGIN - aHeight; + } else if ((aHeight + aDiff) > (aViewSize - DRAG_MARGIN)) { + aDiff = (aViewSize - DRAG_MARGIN) - aHeight; } - int aDiff = aParams.height - aHeightOriginal; - mTopView.setLayoutParams(aParams); - // Now deal with the internal height - System.out.println("Before:W:" + mTopView.getImageWidth() - + ":H:" + mTopView.getImageHeight()); AbstractCoverFlowImageAdapter aAdapter = (AbstractCoverFlowImageAdapter) mTopView .getAdapter(); - int aHeightNew = (int) (mTopView.getImageHeight() + aDiff); + + double aRatio = mOriginalCoverflowWidth + / mOriginalCoverflowHeight; + System.out.println("Diff2 is :" + aDiff); + float aHeightNew = mTopView.getImageHeight() + aDiff; + float aWidthNew = (float) (aRatio * aHeightNew); + + // Too wide -- so scale down + if (aWidthNew > mLayout.getWidth() - 50) { + aWidthNew = mLayout.getWidth() - 50; + aHeightNew = (float) (aWidthNew / aRatio); + aDiff = (int) (aHeightNew - mTopView.getImageHeight()); + } + + // Set the new settings -- it turns out that changing the + // internal height now works, and changing the views height + // is unnecessary / even causes problems. + // aParams.height += aDiff; + // mTopView.setLayoutParams(aParams); + aAdapter.setHeight(aHeightNew); mTopView.setImageHeight(aHeightNew); - int aWidthNew = aHeightNew * 180 / 150; aAdapter.setWidth(aWidthNew); mTopView.setImageWidth(aWidthNew); + + // We need to update the view now aAdapter.notifyDataSetChanged(); - System.out.println("After:W:" + mTopView.getImageWidth() - + ":H:" + mTopView.getImageHeight()); + break; } // TODO Auto-generated method stub @@ -162,7 +181,7 @@ public class PresentationFragment extends Fragment { int aSlide = aData.getInt("slide_number"); mTopView.setSelection(aSlide, true); - mNumberText.setText(mSlideShow.getCurrentSlide() + "/" + mNumberText.setText((mSlideShow.getCurrentSlide() + 1) + "/" + mSlideShow.getSize()); break; diff --git a/android/sdremote/src/org/libreoffice/impressremote/ThumbnailFragment.java b/android/sdremote/src/org/libreoffice/impressremote/ThumbnailFragment.java index 2653277..74a806d 100644 --- a/android/sdremote/src/org/libreoffice/impressremote/ThumbnailFragment.java +++ b/android/sdremote/src/org/libreoffice/impressremote/ThumbnailFragment.java @@ -58,6 +58,15 @@ public class ThumbnailFragment extends Fragment { } @Override + public void onDestroyView() { + super.onDestroyView(); + mGrid = null; + mContext = null; + mCurrentImage = null; + mCurrentText = null; + } + + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -192,14 +201,14 @@ public class ThumbnailFragment extends Fragment { } Bitmap aBitmap = mSlideShow.getImage(position); - if (aBitmap != null) { - aImage.setImageBitmap(aBitmap); - } - // Width int aWidth = (mGrid.getWidth()) / 3 - 20; aImage.setMaxWidth(aWidth); - aImage.setScaleType(ScaleType.MATRIX); + aImage.setScaleType(ScaleType.FIT_CENTER); + + if (aBitmap != null) { + aImage.setImageBitmap(aBitmap); + } aText.setText(String.valueOf(position + 1)); commit 2f2e3b2410b45a93a5909352a370cbc9ddb8eaa7 Author: Andrzej J.R. Hunt <[email protected]> Date: Wed Jul 25 14:28:59 2012 +0200 First piece of ActionBar implemented. Change-Id: I3b0a920da177ef4f11347fa50ddc3a44597b6824 diff --git a/android/sdremote/AndroidManifest.xml b/android/sdremote/AndroidManifest.xml index 689e0ec..4543b71 100644 --- a/android/sdremote/AndroidManifest.xml +++ b/android/sdremote/AndroidManifest.xml @@ -13,10 +13,12 @@ <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" + android:logo="@drawable/empty" android:theme="@style/Theme.ImpressRemote" > <activity android:name="TestClient" - android:label="@string/app_name" > + android:label="" + > <intent-filter> <action android:name="android.intent.action.MAIN" /> @@ -27,16 +29,9 @@ <service android:name=".communication.CommunicationService" > </service> - <activity android:name=".ThumbnailFragment" > - </activity> <activity android:name=".PresentationActivity" android:label="@string/title_activity_presentation" > - <intent-filter> - <action android:name="android.intent.action.MAIN" /> - - <category android:name="android.intent.category.LAUNCHER" /> - </intent-filter> </activity> </application> diff --git a/android/sdremote/res/drawable/empty.png b/android/sdremote/res/drawable/empty.png new file mode 100644 index 0000000..8705a3d Binary files /dev/null and b/android/sdremote/res/drawable/empty.png differ diff --git a/android/sdremote/res/drawable/icon_thumbs.png b/android/sdremote/res/drawable/icon_thumbs.png new file mode 100644 index 0000000..ae10acc Binary files /dev/null and b/android/sdremote/res/drawable/icon_thumbs.png differ diff --git a/android/sdremote/res/layout/fragment_presentation.xml b/android/sdremote/res/layout/fragment_presentation.xml index 2d17759..2b58bde 100644 --- a/android/sdremote/res/layout/fragment_presentation.xml +++ b/android/sdremote/res/layout/fragment_presentation.xml @@ -15,6 +15,11 @@ coverflow:imageWidth="180dip" coverflow:withReflection="false" /> + <TextView + android:id="@+id/presentation_slidenumber" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + /> <ImageView android:id="@+id/presentation_handle" android:layout_width="fill_parent" diff --git a/android/sdremote/res/layout/presentation_actionbar.xml b/android/sdremote/res/layout/presentation_actionbar.xml new file mode 100644 index 0000000..01f0d51 --- /dev/null +++ b/android/sdremote/res/layout/presentation_actionbar.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="horizontal" > + + <ImageButton + android:id="@+id/actionbar_thumbnailtoggle" + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:background="@drawable/empty" + android:src="@drawable/icon_thumbs" /> + + <TextView + android:id="@+id/actionbar_time" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:gravity="center" + android:textSize="22dp" + android:textColor="#FFFFFF"/> + +</LinearLayout> \ No newline at end of file diff --git a/android/sdremote/res/menu/actionbar_presentation.xml b/android/sdremote/res/menu/actionbar_presentation.xml index 020fae1..03524ef 100644 --- a/android/sdremote/res/menu/actionbar_presentation.xml +++ b/android/sdremote/res/menu/actionbar_presentation.xml @@ -1,17 +1,17 @@ <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > - <item android:id="@+id/actionbar_presenation_thumbnail"></item> - <item android:id="@+id/actionbar_presentation_timer"> - <menu> - <item android:id="@+id/actionbar_presentation_timer_pause"/> - </menu> - </item> - <item android:id="@+id/actionbar_presentation_submenu"> + + <item + android:id="@+id/actionbar_presentation_submenu" + android:showAsAction="always"> <menu> - <item android:id="@+id/actionbar_presentation_submenu_blank" android:title="@string/presentation_blank_screen"/> - <item android:id="@+id/actionbar_presentation_submenu_options" android:title="@string/options"/> + <item + android:id="@+id/actionbar_presentation_submenu_blank" + android:title="@string/presentation_blank_screen"/> + <item + android:id="@+id/actionbar_presentation_submenu_options" + android:title="@string/options"/> </menu> </item> - </menu> \ No newline at end of file diff --git a/android/sdremote/res/values/strings.xml b/android/sdremote/res/values/strings.xml index c677dcb..7c9dae3 100644 --- a/android/sdremote/res/values/strings.xml +++ b/android/sdremote/res/values/strings.xml @@ -7,6 +7,6 @@ <string name="presentation_ui_resizehandle">Handle to resize view.</string> <string name="presentation_blank_screen">Blank Screen</string> <string name="options">Options</string> - <string name="actionbar_timeformat">HH:mm</string> + <string name="actionbar_timeformat">hh:mm</string> <string name="actionbar_timerformat">h:m:ss</string> </resources> \ No newline at end of file diff --git a/android/sdremote/res/values/styles.xml b/android/sdremote/res/values/styles.xml index fdc3926..04143c4 100644 --- a/android/sdremote/res/values/styles.xml +++ b/android/sdremote/res/values/styles.xml @@ -1,7 +1,9 @@ <?xml version="1.0" encoding="utf-8"?> -<resources> +<resources xmlns:android="http://schemas.android.com/apk/res/android"> <color name="orange">#EE4400</color> + <color name="grey">#303030</color> + <color name="white">#FFFFFF</color> <color name="light_grey">#E8E9E8</color> <integer name="thumbnail_border_width">3</integer> @@ -13,8 +15,31 @@ <item name="android:background">@color/orange</item> </style> + <style name="Theme.ImpressRemote.ActionBarWidget" parent="android:style/Widget.Holo.Light"> + <item name="android:background">@color/orange</item> + <item name="android:textColor">@color/white</item> + <item name="android:textSize">22dp</item> + </style> + + <style name="Theme.ImpressRemote.ActionBarMenu" parent="android:style/Widget.Holo.Light.ListPopupWindow"> + <item name="android:background">@color/grey</item> + <!-- <item name="android:popupBackground">@color/black</item> --> + </style> + + <style name="Theme.ImpressRemote.ActionBarMenuItem" parent="android:style/Widget.Holo.Light.ListView.DropDown"> + <item name="android:background">@color/grey</item> + <item name="android:textColor">@color/white</item> + <item name="android:textSize">16dp</item> + </style> + <style name="Theme.ImpressRemote" parent="android:style/Theme.Holo.Light"> <item name="android:actionBarStyle">@style/Theme.ImpressRemote.ActionBar</item> + <item name="android:popupMenuStyle">@style/Theme.ImpressRemote.ActionBarMenu</item> + + <item name="android:dropDownListViewStyle">@style/Theme.ImpressRemote.ActionBarMenuItem</item> + <item name="android:textAppearanceLargePopupMenu">@style/Theme.ImpressRemote.ActionBarMenuItem</item> <!-- <item name="android:actionBarWidgetTheme">@style/Theme.ImpressRemote.ActionBarWidget</item> --> + <item name="android:actionDropDownStyle">@style/Theme.ImpressRemote.ActionBarMenu</item> <item name="android:windowBackground">@color/light_grey</item> </style> + </resources> \ No newline at end of file diff --git a/android/sdremote/src/org/libreoffice/impressremote/ActionBarManager.java b/android/sdremote/src/org/libreoffice/impressremote/ActionBarManager.java deleted file mode 100644 index 33ea95c..0000000 --- a/android/sdremote/src/org/libreoffice/impressremote/ActionBarManager.java +++ /dev/null @@ -1,69 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ -package org.libreoffice.impressremote; - -import org.libreoffice.impressremote.communication.CommunicationService; - -import android.content.Context; -import android.os.Handler; -import android.text.format.DateFormat; -import android.view.Menu; - -/** - * Used to manage the action bar whenever a presentation is running. - * - */ -public class ActionBarManager { - - private Context mContext; - private Menu mMenu; - private CommunicationService mCommunicationService; - - /* - * True if the timer is being used as a timer, false if we are showing a - * clock. - */ - private boolean mTimerOn = false; - - public ActionBarManager(Context aContext, Menu aMenu, - CommunicationService aCommunicationService) { - mContext = aContext; - mMenu = aMenu; - mCommunicationService = aCommunicationService; - timerHandler.removeCallbacks(timerUpdateThread); - timerHandler.postDelayed(timerUpdateThread, 50); - } - - private Handler timerHandler = new Handler(); - - private Thread timerUpdateThread = new Thread() { - - @Override - public void run() { - // invalidateOptionsMenu(); - CharSequence aTimeString; - long aTime = mCommunicationService.getSlideShow().getTimer() - .getTimeMillis(); - if (mTimerOn) { - aTimeString = DateFormat.format(mContext.getResources() - .getString(R.string.actionbar_timerformat), - aTime); - } else { - aTimeString = DateFormat.format(mContext.getResources() - .getString(R.string.actionbar_timeformat), - System.currentTimeMillis()); - } - // TODO: set the string - timerHandler.postDelayed(this, 50); - - } - - }; -} -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ \ No newline at end of file diff --git a/android/sdremote/src/org/libreoffice/impressremote/PresentationActivity.java b/android/sdremote/src/org/libreoffice/impressremote/PresentationActivity.java index 05c5c4a..8b6d75f 100644 --- a/android/sdremote/src/org/libreoffice/impressremote/PresentationActivity.java +++ b/android/sdremote/src/org/libreoffice/impressremote/PresentationActivity.java @@ -2,6 +2,7 @@ package org.libreoffice.impressremote; import org.libreoffice.impressremote.communication.CommunicationService; +import android.app.ActionBar; import android.app.Activity; import android.app.FragmentManager; import android.app.FragmentTransaction; @@ -14,8 +15,13 @@ import android.os.Handler; import android.os.IBinder; import android.os.Message; import android.os.Messenger; +import android.text.format.DateFormat; import android.view.Menu; +import android.view.View; +import android.view.View.OnClickListener; import android.widget.FrameLayout; +import android.widget.ImageButton; +import android.widget.TextView; public class PresentationActivity extends Activity { private CommunicationService mCommunicationService; @@ -53,8 +59,7 @@ public class PresentationActivity extends Activity { @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.actionbar_presentation, menu); - mActionBarManager = new ActionBarManager(this, menu, - mCommunicationService); + mActionBarManager = new ActionBarManager(); return true; } @@ -99,4 +104,83 @@ public class PresentationActivity extends Activity { } } + private class ActionBarManager implements OnClickListener { + + private TextView mTimeLabel; + private ImageButton mThumbnailButton; + + private String aTimeFormat = getResources().getString( + R.string.actionbar_timeformat); + private String aTimerFormat = getResources().getString( + R.string.actionbar_timerformat); + /* + * True if the timer is being used as a timer, false if we are showing a + * clock. + */ + private boolean mTimerOn = false; + + public ActionBarManager() { + + ActionBar aBar = getActionBar(); + // Set custom view and unset the title. + aBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM, + ActionBar.DISPLAY_SHOW_CUSTOM + | ActionBar.DISPLAY_SHOW_TITLE); + aBar.setCustomView(R.layout.presentation_actionbar); + + // Set up the various components + mThumbnailButton = (ImageButton) aBar.getCustomView().findViewById( + R.id.actionbar_thumbnailtoggle); + mThumbnailButton.setOnClickListener(this); + + mTimeLabel = (TextView) aBar.getCustomView().findViewById( + R.id.actionbar_time); + mThumbnailButton.setOnClickListener(this); + + // Setup the auto updater + timerHandler.removeCallbacks(timerUpdateThread); + timerHandler.postDelayed(timerUpdateThread, 50); + + } + + private Handler timerHandler = new Handler(); + + private Thread timerUpdateThread = new Thread() { + + @Override + public void run() { + // invalidateOptionsMenu(); + CharSequence aTimeString; + long aTime = mCommunicationService.getSlideShow().getTimer() + .getTimeMillis(); + if (mTimerOn) { + aTimeString = DateFormat.format(aTimerFormat, aTime); + } else { + aTimeString = DateFormat.format(aTimeFormat, + System.currentTimeMillis()); + } + mTimeLabel.setText(aTimeString); + // TODO: set the string + timerHandler.postDelayed(this, 50); + + } + + }; + + @Override + public void onClick(View aSource) { + if (aSource == mThumbnailButton) { + FragmentTransaction ft = getFragmentManager() + .beginTransaction(); + ft.replace(R.id.framelayout, mThumbnailFragment); + ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); + ft.addToBackStack(null); + ft.commit(); + } else if (aSource == mTimeLabel) { + + } + + } + } + } diff --git a/android/sdremote/src/org/libreoffice/impressremote/PresentationFragment.java b/android/sdremote/src/org/libreoffice/impressremote/PresentationFragment.java index aec285b..7862539 100644 --- a/android/sdremote/src/org/libreoffice/impressremote/PresentationFragment.java +++ b/android/sdremote/src/org/libreoffice/impressremote/PresentationFragment.java @@ -24,6 +24,7 @@ import android.webkit.WebView; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ImageView; +import android.widget.TextView; public class PresentationFragment extends Fragment { @@ -32,6 +33,7 @@ public class PresentationFragment extends Fragment { private View mLayout; private WebView mNotes; private Context mContext; + private TextView mNumberText; private CommunicationService mCommunicationService; private SlideShow mSlideShow; @@ -56,6 +58,8 @@ public class PresentationFragment extends Fragment { mLayout = v.findViewById(R.id.presentation_layout); + mNumberText = (TextView) v.findViewById(R.id.presentation_slidenumber); + mHandle = (ImageView) v.findViewById(R.id.presentation_handle); mHandle.setOnTouchListener(new SizeListener()); @@ -157,6 +161,10 @@ public class PresentationFragment extends Fragment { case CommunicationService.MSG_SLIDE_CHANGED: int aSlide = aData.getInt("slide_number"); mTopView.setSelection(aSlide, true); + + mNumberText.setText(mSlideShow.getCurrentSlide() + "/" + + mSlideShow.getSize()); + break; case CommunicationService.MSG_SLIDE_PREVIEW: int aNSlide = aData.getInt("slide_number"); @@ -185,32 +193,6 @@ public class PresentationFragment extends Fragment { return mSlideShow.getSize(); } - // @Override - // public View getView(int position, View convertView, ViewGroup parent) - // { - // LayoutInflater aInflater = (LayoutInflater) mContext - // .getSystemService(Context.LAYOUT_INFLATER_SERVICE); - // View v = aInflater.inflate(R.layout.slide_thumbnail, null); - // - // ImageView aImage = (ImageView) v.findViewById(R.id.sub_thumbnail); - // TextView aText = (TextView) v.findViewById(R.id.sub_number); - // - // // Do the image & number styling - // int aBorderWidth = getResources().getInteger( - // R.integer.thumbnail_border_width); - // aImage.setPadding(aBorderWidth, aBorderWidth, aBorderWidth, - // aBorderWidth); - // - // Bitmap aBitmap = mSlideShow.getImage(position); - // if (aBitmap != null) { - // aImage.setImageBitmap(aBitmap); - // } - // - // aText.setText(String.valueOf(position + 1)); - // - // return v; - // } - @Override protected Bitmap createBitmap(int position) { Bitmap aBitmap = mSlideShow.getImage(position); @@ -219,9 +201,6 @@ public class PresentationFragment extends Fragment { Paint p = new Paint(Paint.ANTI_ALIAS_FLAG); p.setShadowLayer(borderWidth, 0, 0, Color.BLACK); - // RectF aRect = new RectF(borderWidth, borderWidth, borderWidth - // + aBitmap.getWidth(), borderWidth - // + aBitmap.getHeight()); RectF aRect = new RectF(borderWidth, borderWidth, borderWidth + aBitmap.getWidth(), borderWidth + aBitmap.getHeight()); @@ -231,7 +210,6 @@ public class PresentationFragment extends Fragment { Canvas canvas = new Canvas(aOut); canvas.drawColor(Color.TRANSPARENT); canvas.drawRect(aRect, p); - //canvas.drawBitmap(aBitmap, null, aRect, null); canvas.drawBitmap(aBitmap, null, aRect, null); return aOut; diff --git a/android/sdremote/src/org/libreoffice/impressremote/TestClient.java b/android/sdremote/src/org/libreoffice/impressremote/TestClient.java index 5620c5b..501cf97 100644 --- a/android/sdremote/src/org/libreoffice/impressremote/TestClient.java +++ b/android/sdremote/src/org/libreoffice/impressremote/TestClient.java @@ -50,6 +50,7 @@ public class TestClient extends Activity { protected void onResume() { super.onResume(); doBindService(); + } // FIXME: move all necessary code to CommunicationService.onUnbind _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
