summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2014-10-29 16:23:07 +0300
committerAndrew Dolgov <[email protected]>2014-10-29 16:23:07 +0300
commitf8bc884ad315aefbf6e71932f115f8c571ff9d6d (patch)
tree16e4b79fcc7be8871af4f4b397d510283a5b4888
parent7fd2e713b38a951851ded7d131990d68ce5b4177 (diff)
remove X more image prompt
implement pager-based browser for article images, enabled if more than one detected add (unused) dimens for activity margins
-rw-r--r--org.fox.ttrss/build.gradle10
-rw-r--r--org.fox.ttrss/src/main/AndroidManifest.xml12
-rw-r--r--org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleImagesPagerActivity.java204
-rw-r--r--org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java44
-rw-r--r--org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineActivity.java18
-rw-r--r--org.fox.ttrss/src/main/java/org/fox/ttrss/util/ArrowRight.java96
-rw-r--r--org.fox.ttrss/src/main/res/layout/article_images_image.xml29
-rw-r--r--org.fox.ttrss/src/main/res/layout/article_images_pager.xml24
-rw-r--r--org.fox.ttrss/src/main/res/layout/headlines_row.xml14
-rw-r--r--org.fox.ttrss/src/main/res/layout/headlines_row_selected.xml15
-rw-r--r--org.fox.ttrss/src/main/res/layout/headlines_row_selected_unread.xml15
-rw-r--r--org.fox.ttrss/src/main/res/layout/headlines_row_unread.xml14
-rw-r--r--org.fox.ttrss/src/main/res/menu/article_images_pager.xml9
-rw-r--r--org.fox.ttrss/src/main/res/values/dimens.xml5
-rw-r--r--org.fox.ttrss/src/main/res/values/strings.xml11
15 files changed, 461 insertions, 59 deletions
diff --git a/org.fox.ttrss/build.gradle b/org.fox.ttrss/build.gradle
index 6f822933..565f3b88 100644
--- a/org.fox.ttrss/build.gradle
+++ b/org.fox.ttrss/build.gradle
@@ -11,7 +11,7 @@ android {
}
lintOptions {
- abortOnError false
+ abortOnError false
}
buildTypes {
@@ -24,14 +24,14 @@ android {
dependencies {
compile project(':taskerlocaleapi')
+ compile files('libs/dashclock-api-r1.1.jar')
+ compile files('libs/jsoup-1.6.1.jar')
+ compile files('libs/universal-image-loader-1.9.3.jar')
compile 'com.jeremyfeinstein.slidingmenu:library:1.3@aar'
compile 'com.readystatesoftware.systembartint:systembartint:1.0.3'
compile 'com.viewpagerindicator:library:2.4.1'
- compile 'com.android.support:cardview-v7:21.+'
+ compile 'com.android.support:cardview-v7:21.0.0'
compile 'com.android.support:support-v4:19.1.0'
compile 'com.google.code.gson:gson:1.7.1'
compile 'com.android.support:appcompat-v7:19.1.0'
- compile files('libs/dashclock-api-r1.1.jar')
- compile files('libs/jsoup-1.6.1.jar')
- compile files('libs/universal-image-loader-1.9.3.jar')
}
diff --git a/org.fox.ttrss/src/main/AndroidManifest.xml b/org.fox.ttrss/src/main/AndroidManifest.xml
index d8885db1..155be905 100644
--- a/org.fox.ttrss/src/main/AndroidManifest.xml
+++ b/org.fox.ttrss/src/main/AndroidManifest.xml
@@ -16,7 +16,7 @@
<application
android:name=".GlobalState"
android:allowBackup="true"
- android:backupAgent="org.fox.ttrss.util.PrefsBackupAgent"
+ android:backupAgent=".util.PrefsBackupAgent"
android:hardwareAccelerated="true"
android:icon="@drawable/icon"
android:label="@string/app_name" >
@@ -92,7 +92,6 @@
android:excludeFromRecents="true"
android:label="@string/subscribe_name"
android:theme="@style/DarkDialogTheme" >
-
<intent-filter>
<action android:name="android.intent.action.SEND" />
@@ -100,7 +99,6 @@
<data android:mimeType="text/plain" />
</intent-filter>
-
<intent-filter>
<action android:name="android.intent.action.VIEW" />
@@ -207,7 +205,7 @@
android:name=".offline.OfflineUploadService"
android:enabled="true" />
<service
- android:name="org.fox.ttrss.util.ImageCacheService"
+ android:name=".util.ImageCacheService"
android:enabled="true" />
<meta-data
@@ -220,7 +218,6 @@
<action android:name="com.twofortyfouram.locale.intent.action.FIRE_SETTING" />
</intent-filter>
</receiver>
-
<receiver android:name=".widget.SmallWidgetProvider" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
@@ -251,6 +248,11 @@
android:name="description"
android:value="@string/app_name" />
</service>
+
+ <activity
+ android:name=".ArticleImagesPagerActivity"
+ android:label="Article Images" >
+ </activity>
</application>
</manifest>
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleImagesPagerActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleImagesPagerActivity.java
new file mode 100644
index 00000000..3822d4ac
--- /dev/null
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleImagesPagerActivity.java
@@ -0,0 +1,204 @@
+package org.fox.ttrss;
+
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.net.Uri;
+import android.os.Bundle;
+import android.support.v4.view.PagerAdapter;
+import android.support.v4.view.ViewPager;
+import android.support.v7.app.ActionBarActivity;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.ProgressBar;
+
+import com.nostra13.universalimageloader.core.DisplayImageOptions;
+import com.nostra13.universalimageloader.core.ImageLoader;
+import com.nostra13.universalimageloader.core.assist.FailReason;
+import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
+import com.nostra13.universalimageloader.core.imageaware.ImageAware;
+import com.nostra13.universalimageloader.core.imageaware.ImageViewAware;
+import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;
+import com.viewpagerindicator.UnderlinePageIndicator;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ArticleImagesPagerActivity extends ActionBarActivity {
+ private final String TAG = this.getClass().getSimpleName();
+
+ private ArrayList<String> m_urls;
+ private String m_title;
+
+ private class ArticleImagesPagerAdapter extends PagerAdapter implements View.OnClickListener {
+ private List<String> m_urls;
+
+ public ArticleImagesPagerAdapter(List<String> urls) {
+ super();
+
+ m_urls = urls;
+ }
+
+ public ArticleImagesPagerAdapter() {
+ super();
+ }
+
+ @Override
+ public int getCount() {
+ return m_urls.size();
+ }
+
+ @Override
+ public boolean isViewFromObject(View view, Object o) {
+ return view == o;
+ }
+
+ @Override
+ public Object instantiateItem(ViewGroup container, final int position) {
+ String url = m_urls.get(position);
+
+ Log.d(TAG, "called for URL: " + url);
+
+ LayoutInflater inflater = (LayoutInflater) container.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+
+ View view = inflater.inflate(R.layout.article_images_image, null);
+
+ ImageView imgView = (ImageView) view.findViewById(R.id.flavor_image);
+ imgView.setOnClickListener(this);
+
+ DisplayImageOptions options = new DisplayImageOptions.Builder()
+ .cacheInMemory(true)
+ .resetViewBeforeLoading(true)
+ .cacheOnDisk(true)
+ .displayer(new FadeInBitmapDisplayer(200))
+ .build();
+
+ ImageAware imageAware = new ImageViewAware(imgView, false);
+
+ final ProgressBar progressBar = (ProgressBar) view.findViewById(R.id.flavor_image_progress);
+ final View errorMessage = view.findViewById(R.id.flavor_image_error);
+
+ ImageLoader.getInstance().displayImage(url, imageAware, options, new ImageLoadingListener() {
+ @Override
+ public void onLoadingStarted(String s, View view) {
+
+ }
+
+ @Override
+ public void onLoadingFailed(String s, View view, FailReason failReason) {
+ progressBar.setVisibility(View.GONE);
+ errorMessage.setVisibility(View.VISIBLE);
+ }
+
+ @Override
+ public void onLoadingComplete(String s, View view, Bitmap bitmap) {
+ if (bitmap != null) {
+ if (bitmap.getWidth() < 128 || bitmap.getHeight() < 128) {
+ view.setVisibility(View.INVISIBLE);
+ errorMessage.setVisibility(View.VISIBLE);
+ } else {
+ view.setTag(s);
+ }
+ }
+
+ progressBar.setVisibility(View.GONE);
+ }
+
+ @Override
+ public void onLoadingCancelled(String s, View view) {
+
+ }
+ });
+
+ ((ViewPager) container).addView(view, 0);
+
+ return view;
+ }
+
+ @Override
+ public void destroyItem(ViewGroup container, int position, Object object) {
+ container.removeView((FrameLayout)object);
+ }
+
+ @Override
+ public void onClick(View view) {
+ String url = (String) view.getTag();
+
+ if (url != null) {
+ Log.d(TAG, "click to open:" + url);
+
+ try {
+ Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
+ startActivity(browserIntent);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+ }
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+
+ setTheme(R.style.DarkTheme);
+
+ super.onCreate(savedInstanceState);
+
+ setContentView(R.layout.article_images_pager);
+
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+
+ if (savedInstanceState == null) {
+ m_urls = getIntent().getStringArrayListExtra("urls");
+ m_title = getIntent().getStringExtra("title");
+ } else {
+ m_urls = savedInstanceState.getStringArrayList("urls");
+ m_title = savedInstanceState.getString("title");
+ }
+
+ setTitle(m_title);
+
+ Log.d(TAG, "urls size: " + m_urls.size());
+
+ ArticleImagesPagerAdapter adapter = new ArticleImagesPagerAdapter(m_urls);
+
+ ViewPager pager = (ViewPager) findViewById(R.id.article_images_pager);
+
+ pager.setAdapter(adapter);
+
+ UnderlinePageIndicator indicator = (UnderlinePageIndicator)findViewById(R.id.article_images_indicator);
+ indicator.setViewPager(pager);
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle out) {
+ super.onSaveInstanceState(out);
+
+ out.putStringArrayList("urls", m_urls);
+ out.putString("title", m_title);
+ }
+
+ /* @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ // Inflate the menu; this adds items to the action bar if it is present.
+ getMenuInflater().inflate(R.menu.article_images_pager, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ // Handle action bar item clicks here. The action bar will
+ // automatically handle clicks on the Home/Up button, so long
+ // as you specify a parent activity in AndroidManifest.xml.
+ int id = item.getItemId();
+ if (id == R.id.action_settings) {
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ } */
+}
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java
index f63af9c6..2d0c82ea 100644
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java
@@ -465,7 +465,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
}
m_activity.setProgressBarVisibility(false);
-
+
super.onPostExecute(result);
if (isAdded()) {
@@ -670,7 +670,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
public ImageView menuButtonView;
public ViewGroup flavorImageHolder;
public ProgressBar flavorImageLoadingBar;
- public TextView flavorImageMore;
+ public View flavorImageArrow;
}
private class ArticleListAdapter extends ArrayAdapter<Article> {
@@ -764,7 +764,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
holder.menuButtonView = (ImageView) v.findViewById(R.id.article_menu_button);
holder.flavorImageHolder = (ViewGroup) v.findViewById(R.id.flavorImageHolder);
holder.flavorImageLoadingBar = (ProgressBar) v.findViewById(R.id.flavorImageLoadingBar);
- holder.flavorImageMore = (TextView) v.findViewById(R.id.flavorImageMore);
+ holder.flavorImageArrow = v.findViewById(R.id.flavorImageArrow);
v.setTag(holder);
@@ -860,10 +860,6 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
}
}
- if (holder.flavorImageMore != null) {
- holder.flavorImageMore.setVisibility(View.GONE);
- }
-
if (holder.flavorImageView != null && m_prefs.getBoolean("headlines_show_flavor_image", true)) {
Document doc = Jsoup.parse(articleContent);
@@ -872,7 +868,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
if (doc != null) {
//Element img = doc.select("img").first();
- Elements imgs = doc.select("img");
+ final Elements imgs = doc.select("img");
Element img = imgs.first();
if (img != null) {
@@ -887,7 +883,32 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
.resetViewBeforeLoading(true)
.cacheOnDisk(true)
.build();
-
+
+ holder.flavorImageView.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ ArrayList<String> imgsList = new ArrayList<String>();
+
+ for (Element img : imgs) {
+ String imgSrc = img.attr("src");
+
+ if (imgSrc.indexOf("//") == 0)
+ imgSrc = "http:" + imgSrc;
+
+ imgsList.add(imgSrc);
+ }
+
+ Intent intent = new Intent(m_activity, ArticleImagesPagerActivity.class);
+ intent.putExtra("urls", imgsList);
+ intent.putExtra("title", article.title);
+
+ startActivityForResult(intent, 0);
+ m_activity.overridePendingTransition(android.R.anim.fade_in, 0);
+
+
+ }
+ });
+
final ViewGroup flavorImageHolder = holder.flavorImageHolder;
final ImageView flavorImageView = holder.flavorImageView;
final ProgressBar flavorImageLoadingBar = holder.flavorImageLoadingBar;
@@ -896,9 +917,8 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
flavorImageHolder.setVisibility(View.VISIBLE);
- if (imgs.size() > 1 && holder.flavorImageMore != null) {
- holder.flavorImageMore.setVisibility(View.VISIBLE);
- holder.flavorImageMore.setText(getString(R.string.flavor_image_more, imgs.size()-1));
+ if (imgs.size() > 1 && holder.flavorImageArrow != null) {
+ holder.flavorImageArrow.setVisibility(View.VISIBLE);
}
final boolean weNeedAnimation = MemoryCacheUtils.findCachedBitmapsForImageUri(imgSrc, ImageLoader.getInstance().getMemoryCache()).size() == 0;
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineActivity.java
index ebf1bb07..3add9c90 100644
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineActivity.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineActivity.java
@@ -1,12 +1,5 @@
package org.fox.ttrss.offline;
-import org.fox.ttrss.CommonActivity;
-import org.fox.ttrss.PreferencesActivity;
-import org.fox.ttrss.R;
-import org.jsoup.Jsoup;
-import org.jsoup.nodes.Document;
-import org.jsoup.select.Elements;
-
import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.app.Dialog;
@@ -33,6 +26,13 @@ import android.widget.EditText;
import android.widget.SearchView;
import android.widget.TextView;
+import org.fox.ttrss.CommonActivity;
+import org.fox.ttrss.PreferencesActivity;
+import org.fox.ttrss.R;
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+import org.jsoup.select.Elements;
+
public class OfflineActivity extends CommonActivity {
private final String TAG = this.getClass().getSimpleName();
@@ -169,9 +169,9 @@ public class OfflineActivity extends CommonActivity {
.getDefaultSharedPreferences(getApplicationContext());
setAppTheme(m_prefs);
-
+
super.onCreate(savedInstanceState);
-
+
requestWindowFeature(Window.FEATURE_PROGRESS);
setProgressBarVisibility(false);
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/util/ArrowRight.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/util/ArrowRight.java
new file mode 100644
index 00000000..ecf55eb9
--- /dev/null
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/util/ArrowRight.java
@@ -0,0 +1,96 @@
+package org.fox.ttrss.util;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Path;
+import android.graphics.Path.Direction;
+import android.util.AttributeSet;
+import android.view.View;
+
+//http://stackoverflow.com/questions/24723040/how-to-create-a-right-facing-arrow-using-xml-shapes-in-android
+
+public class ArrowRight extends View {
+
+ private Paint arrowPaint;
+ private Path arrowPath;
+ private int arrowColor = 0xFF888888;
+ private float density;
+ private int diameter = 5, diameter_calc, radius_calc;
+
+ public ArrowRight(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ stuff();
+ }
+
+ public ArrowRight(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ stuff();
+ }
+
+ public ArrowRight(Context context) {
+ super(context);
+ stuff();
+ }
+
+ private void stuff() {
+
+ //Getting density "dp"
+ density = getContext().getResources().getDisplayMetrics().scaledDensity;
+ //Calculating actual diameter
+ diameter_calc = (int) density * diameter;
+ radius_calc = diameter/2;
+
+ //Creating paint
+ arrowPaint = new Paint();
+ arrowPaint.setAntiAlias(true);
+ arrowPaint.setColor(arrowColor);
+
+ //Initialize path
+ arrowPath = new Path();
+
+ this.setWillNotDraw(false);
+ }
+
+ private int startX,startY, currentX, currentY;
+
+ protected void onDraw(Canvas c) {
+
+ startX = c.getWidth();
+ startY = c.getHeight()/2;
+
+ c.rotate(-45, startX, startY);
+
+ arrowPath.reset();
+ currentX = startX;
+ currentY = startY;
+ //Move to right end side center of the canvas
+ arrowPath.moveTo(currentX,currentY);
+ //Lets move up
+ currentY = radius_calc;
+ arrowPath.lineTo(currentX, currentY);
+ //Now draw circle
+ currentX-=radius_calc;
+ arrowPath.addCircle(currentX, radius_calc, radius_calc, Direction.CCW);
+ currentX-=radius_calc;
+
+ arrowPath.lineTo(currentX,currentY);
+ // Go to inner side center point
+ currentX = startX - diameter_calc;
+ currentY = startY - diameter_calc;
+ arrowPath.lineTo(currentX,currentY);
+ // Go left
+ currentX = startX - startY + radius_calc;
+ arrowPath.lineTo(currentX, currentY);
+ //Draw circle
+ currentY+=radius_calc;
+ c.drawCircle(currentX, currentY, radius_calc, arrowPaint);
+ currentY+=radius_calc;
+ arrowPath.lineTo(currentX, currentY);
+ //Go to start
+ arrowPath.lineTo(startX, startY);
+
+ c.drawPath(arrowPath, arrowPaint);
+ }
+
+} \ No newline at end of file
diff --git a/org.fox.ttrss/src/main/res/layout/article_images_image.xml b/org.fox.ttrss/src/main/res/layout/article_images_image.xml
new file mode 100644
index 00000000..b78410ad
--- /dev/null
+++ b/org.fox.ttrss/src/main/res/layout/article_images_image.xml
@@ -0,0 +1,29 @@
+<FrameLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/flavorImageHolder"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:visibility="invisible"
+ android:text="@string/error_loading_image"
+ android:id="@+id/flavor_image_error" />
+
+ <ProgressBar
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:id="@+id/flavor_image_progress" />
+
+
+ <org.fox.ttrss.util.EnlargingImageView
+ android:id="@+id/flavor_image"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:scaleType="fitCenter"
+ android:visibility="visible" />
+</FrameLayout> \ No newline at end of file
diff --git a/org.fox.ttrss/src/main/res/layout/article_images_pager.xml b/org.fox.ttrss/src/main/res/layout/article_images_pager.xml
new file mode 100644
index 00000000..2735cc90
--- /dev/null
+++ b/org.fox.ttrss/src/main/res/layout/article_images_pager.xml
@@ -0,0 +1,24 @@
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/article_images"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+/*
+ android:paddingLeft="@dimen/activity_horizontal_margin"
+ android:paddingRight="@dimen/activity_horizontal_margin"
+ android:paddingTop="@dimen/activity_vertical_margin"
+ android:paddingBottom="@dimen/activity_vertical_margin"> */
+
+ <android.support.v4.view.ViewPager
+ android:id="@+id/article_images_pager"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" >
+ </android.support.v4.view.ViewPager>
+
+ <com.viewpagerindicator.UnderlinePageIndicator
+ android:id="@+id/article_images_indicator"
+ android:layout_width="fill_parent"
+ android:layout_height="2dp"
+ android:layout_alignParentBottom="true"
+ android:layout_alignParentLeft="true" />
+
+</RelativeLayout>
diff --git a/org.fox.ttrss/src/main/res/layout/headlines_row.xml b/org.fox.ttrss/src/main/res/layout/headlines_row.xml
index 8b2107c1..ef44fde3 100644
--- a/org.fox.ttrss/src/main/res/layout/headlines_row.xml
+++ b/org.fox.ttrss/src/main/res/layout/headlines_row.xml
@@ -94,13 +94,13 @@
android:cropToPadding="true"
android:visibility="visible" />
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="(5 more)"
- android:alpha="0.5"
- android:layout_gravity="bottom|right"
- android:id="@+id/flavorImageMore" />
+ <org.fox.ttrss.util.ArrowRight
+ android:layout_marginRight="4dp"
+ android:id="@+id/flavorImageArrow"
+ android:layout_width="64dp"
+ android:layout_gravity="center|right"
+ android:visibility="gone"
+ android:layout_height="64dp" />
</FrameLayout>
</TableRow>
diff --git a/org.fox.ttrss/src/main/res/layout/headlines_row_selected.xml b/org.fox.ttrss/src/main/res/layout/headlines_row_selected.xml
index 6d8a68ab..978b5b4e 100644
--- a/org.fox.ttrss/src/main/res/layout/headlines_row_selected.xml
+++ b/org.fox.ttrss/src/main/res/layout/headlines_row_selected.xml
@@ -94,13 +94,14 @@
android:cropToPadding="true"
android:visibility="visible" />
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="(5 more)"
- android:alpha="0.5"
- android:layout_gravity="bottom|right"
- android:id="@+id/flavorImageMore" />
+ <org.fox.ttrss.util.ArrowRight
+ android:layout_marginRight="4dp"
+ android:id="@+id/flavorImageArrow"
+ android:layout_width="64dp"
+ android:layout_gravity="center|right"
+ android:visibility="gone"
+ android:layout_height="64dp" />
+
</FrameLayout>
</TableRow>
diff --git a/org.fox.ttrss/src/main/res/layout/headlines_row_selected_unread.xml b/org.fox.ttrss/src/main/res/layout/headlines_row_selected_unread.xml
index 47e24ab7..680158e0 100644
--- a/org.fox.ttrss/src/main/res/layout/headlines_row_selected_unread.xml
+++ b/org.fox.ttrss/src/main/res/layout/headlines_row_selected_unread.xml
@@ -95,13 +95,14 @@
android:cropToPadding="true"
android:visibility="visible" />
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="(5 more)"
- android:alpha="0.5"
- android:layout_gravity="bottom|right"
- android:id="@+id/flavorImageMore" />
+ <org.fox.ttrss.util.ArrowRight
+ android:layout_marginRight="4dp"
+ android:id="@+id/flavorImageArrow"
+ android:layout_width="64dp"
+ android:layout_gravity="center|right"
+ android:visibility="gone"
+ android:layout_height="64dp" />
+
</FrameLayout>
</TableRow>
diff --git a/org.fox.ttrss/src/main/res/layout/headlines_row_unread.xml b/org.fox.ttrss/src/main/res/layout/headlines_row_unread.xml
index 83e60fbb..0e671095 100644
--- a/org.fox.ttrss/src/main/res/layout/headlines_row_unread.xml
+++ b/org.fox.ttrss/src/main/res/layout/headlines_row_unread.xml
@@ -95,13 +95,13 @@
android:cropToPadding="true"
android:visibility="visible" />
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="(5 more)"
- android:alpha="0.5"
- android:layout_gravity="bottom|right"
- android:id="@+id/flavorImageMore" />
+ <org.fox.ttrss.util.ArrowRight
+ android:layout_marginRight="4dp"
+ android:id="@+id/flavorImageArrow"
+ android:layout_width="64dp"
+ android:layout_gravity="center|right"
+ android:visibility="gone"
+ android:layout_height="64dp" />
</FrameLayout>
</TableRow>
diff --git a/org.fox.ttrss/src/main/res/menu/article_images_pager.xml b/org.fox.ttrss/src/main/res/menu/article_images_pager.xml
new file mode 100644
index 00000000..bafc53ab
--- /dev/null
+++ b/org.fox.ttrss/src/main/res/menu/article_images_pager.xml
@@ -0,0 +1,9 @@
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ tools:context="org.fox.ttrss.ArticleImagesPagerActivity" >
+ <item android:id="@+id/action_settings"
+ android:title="@string/action_settings"
+ android:orderInCategory="100"
+ app:showAsAction="never" />
+</menu>
diff --git a/org.fox.ttrss/src/main/res/values/dimens.xml b/org.fox.ttrss/src/main/res/values/dimens.xml
new file mode 100644
index 00000000..47c82246
--- /dev/null
+++ b/org.fox.ttrss/src/main/res/values/dimens.xml
@@ -0,0 +1,5 @@
+<resources>
+ <!-- Default screen margins, per the Android Design guidelines. -->
+ <dimen name="activity_horizontal_margin">16dp</dimen>
+ <dimen name="activity_vertical_margin">16dp</dimen>
+</resources>
diff --git a/org.fox.ttrss/src/main/res/values/strings.xml b/org.fox.ttrss/src/main/res/values/strings.xml
index f452ca05..32608dc6 100644
--- a/org.fox.ttrss/src/main/res/values/strings.xml
+++ b/org.fox.ttrss/src/main/res/values/strings.xml
@@ -149,10 +149,12 @@
<string name="prefs_dim_status_bar">Dim status bar</string>
<string name="prefs_dim_status_bar_long">Dim status bar when reading</string>
<string name="article_comments">%1$d comments</string>
+
<plurals name="trial_mode_prompt">
<item quantity="one">Trial mode, only one day left.</item>
<item quantity="other">Trial mode, %1$d days left.</item>
</plurals>
+
<string name="trial_purchase">Unlock full version</string>
<string name="trial_expired">Trial expired</string>
<string name="trial_expired_message">To continue using Tiny Tiny RSS please unlock the full version by purchasing the key.</string>
@@ -198,17 +200,21 @@
<string name="light_theme_is_not_supported_on_honeycomb">Light theme is not supported on Honeycomb</string>
<string name="pref_headlines_mark_read_scroll">Mark read on scroll</string>
<string name="pref_headlines_mark_read_scroll_long">Headlines will be marked read when scrolling past them</string>
+
<plurals name="mark_num_headlines_as_read">
<item quantity="one">Mark %1$d article as read?</item>
<item quantity="other">Mark %1$d articles as read?</item>
</plurals>
+
<string name="prefs_confirm_headlines_catchup">Confirm marking articles as read</string>
<string name="author_formatted">by %1$s</string>
+
<plurals name="n_unread_articles">
<item quantity="zero">No unread articles</item>
<item quantity="one">One unread article</item>
<item quantity="other">%1$d unread articles</item>
</plurals>
+
<string name="pref_headline_font_size">Headline text size</string>
<string name="context_confirm_catchup">Mark all articles in %1$s as read?</string>
<string name="theme_system">Device Default</string>
@@ -233,4 +239,9 @@
<string name="pref_headlines_full_content">Show full content</string>
<string name="prefs_headlines_show_flavor_image">Show article image</string>
<string name="flavor_image_more">(%1$d more)</string>
+ <string name="title_activity_article_images_pager">ArticleImagesPagerActivity</string>
+ <string name="hello_world">Hello world!</string>
+ <string name="action_settings">Settings</string>
+ <string name="error_loading_image">Error loading image.</string>
+
</resources>