Skip to content

Commit 1824f63

Browse files
committed
Squashed 'libs/utils/' changes from 5b22440..4520f51
4520f51 build.gradle fix to push the pom/aar to maven central c977755 update gradle wrapper to version 2.2 e0d1927 add central maven config 94d1dbb Merge branch 'release/3.7' into develop 8ff9413 fix AppLogViewerActivity when a log is message is null 7c208db Merge pull request #2264 from wordpress-mobile/issue/2222-theme-preview-title 9eb7273 new BlogUtils.getHostNameFromAccountMap function a80859d Theme live preview no longer changes the activity title 6186933 Photo viewer now uses low quality for the lo-res image 2eb9839 Simplified comments bfa7ecb Switched to quality enum which defaults to medium a2ce056 Added default quality param to photon 5a48a06 html encode log entries in AppLog.toHtml() c8a4d89 fix #103: retain menu drawer scroll position after switching activities c1e0778 Merge branch 'develop' into issue/985-make-sfactory-private fe1d125 fix build files for android studio 1.0 f7a2d48 Merge remote-tracking branch 'origin/develop' into issue/985-make-sfactory-private 72fe2b7 update support lib version for travis 0b03b71 Merge branch 'develop' of https://github.com/wordpress-mobile/WordPress-Android into feature/material-appcompat 0f5751d Merge branch 'develop' into release/3.4 b68f755 remove unused code (refresh button) cb8321b fix #985: maks sFactory private - force injection in test module faae1d3 Merge branch 'release/3.4' into issue/1982-simperium-concurrency Conflicts: WordPress/src/main/java/org/wordpress/android/models/Note.java a0982d1 Updated build.gradle to specify com.android.support:appcompat-v7:21.0.2 3a0c45e Removed unsuccessful fix for #1982. b967d59 first step at replacing PreferenceActivity by a PreferenceFragment + ActionBarActivity 92d4e15 Merge branch 'develop' into feature/material-appcompat 7c8d5ab Merge branch 'release/3.4' into develop 1e499a6 Merge branch 'hotfix/3.3.1' into release/3.4 7a4a364 Merge branch 'develop' of https://github.com/wordpress-mobile/WordPress-Android into feature/material-appcompat 5451df7 update subtrees to use build tools 21.1.1 4024637 rename PullToRefresh to SwipeToRefresh 0d8d414 remove unused viewClass in PTR constructor 2424201 fix circle spinner color style d392885 Return a copy of the JSONObject in getDiffableValue(). 106affa replace Chris Banes' PullToRefresh by the native SwipeToRefresh view 3108a36 Merge remote-tracking branch 'origin/develop' into feature/1961-add-mentions-to-commenting db25827 Merge branch 'develop' into issue/1958-round-avatars 2801610 Merge remote-tracking branch 'origin/develop' into feature/1961-add-mentions-to-commenting 6ac0248 Merge branch 'hotfix/3.3.1' into release/3.4 eb70e6f upgrade to android-gradle 0.14.0 9bc4ba6 Rounds all WPNetworkImageViews with `AVATAR` type. c2fd6c7 Initial commit adding mentions to notification comments 0a3da42 Added image spans directly instead of using Html.fromHtml(). git-subtree-dir: libs/utils git-subtree-split: 4520f51
1 parent 78d3966 commit 1824f63

17 files changed

+244
-347
lines changed

WordPressUtils/build.gradle

Lines changed: 52 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,89 @@
1-
21
buildscript {
32
repositories {
43
mavenCentral()
54
}
65
dependencies {
7-
classpath 'com.android.tools.build:gradle:0.12.+'
6+
classpath 'com.android.tools.build:gradle:1.0.0'
87
}
98
}
109

1110
apply plugin: 'com.android.library'
1211
apply plugin: 'maven'
12+
apply plugin: 'signing'
1313

1414
repositories {
1515
mavenCentral()
16-
maven { url 'http://wordpress-mobile.github.io/WordPress-Android' }
1716
}
1817

1918
dependencies {
2019
compile 'commons-lang:commons-lang:2.6'
21-
compile 'com.mcxiaoke.volley:library:1.0.+'
22-
compile 'com.github.castorflex.smoothprogressbar:library:0.4.0'
23-
compile 'org.wordpress:pulltorefresh-main:0.9.7@aar' // org.wordpress version includes some fixes
24-
compile 'com.android.support:support-v13:19.1.0'
20+
compile 'com.mcxiaoke.volley:library:1.0.10'
21+
compile 'com.android.support:support-v13:21.0.3'
2522
}
2623

2724
android {
2825
publishNonDefault true
2926

3027
compileSdkVersion 19
31-
buildToolsVersion "19.1.0"
28+
buildToolsVersion "21.1.1"
3229

3330
defaultConfig {
34-
applicationId "org.wordpress.android.util"
35-
versionName "1.2.0"
31+
versionName "1.3.0"
3632
minSdkVersion 14
3733
targetSdkVersion 19
3834
}
3935
}
4036

37+
version android.defaultConfig.versionName
38+
group = "org.wordpress"
39+
archivesBaseName = "utils"
40+
41+
signing {
42+
required {
43+
has("release") && project.properties.containsKey("signing.keyId") && project.properties.containsKey("signing.secretKeyRingFile")
44+
}
45+
sign configurations.archives
46+
}
47+
4148
uploadArchives {
4249
repositories {
4350
mavenDeployer {
44-
def repo_url = ""
45-
if (project.hasProperty("repository")) {
46-
repo_url = project.repository
51+
beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
52+
53+
repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") {
54+
authentication(userName: project.properties.ossrhUsername, password: project.properties.ossrhPassword)
55+
}
56+
57+
snapshotRepository(url: "https://oss.sonatype.org/content/repositories/snapshots/") {
58+
authentication(userName: project.properties.ossrhUsername, password: project.properties.ossrhPassword)
59+
}
60+
61+
pom.project {
62+
name 'WordPress-Utils-Android'
63+
packaging 'aar'
64+
description 'Utils lib for WordPress-Android'
65+
url 'https://github.com/wordpress-mobile/WordPress-Utils-Android'
66+
scm {
67+
connection 'scm:git:https://github.com/wordpress-mobile/WordPress-Utils-Android.git'
68+
developerConnection 'scm:git:https://github.com/wordpress-mobile/WordPress-Utils-Android.git'
69+
url 'https://github.com/wordpress-mobile/WordPress-Utils-Android'
70+
}
71+
72+
licenses {
73+
license {
74+
name 'The MIT License (MIT)'
75+
url 'http://opensource.org/licenses/MIT'
76+
}
77+
}
78+
79+
developers {
80+
developer {
81+
id 'maxme'
82+
name 'Maxime Biais'
83+
email 'maxime@automattic.com'
84+
}
85+
}
4786
}
48-
repository(url: repo_url)
49-
pom.version = android.defaultConfig.versionName
50-
pom.groupId = "org.wordpress"
51-
pom.artifactId = "wordpress-utils"
5287
}
5388
}
5489
}
Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,6 @@
1-
repository=file:///Users/max/work/automattic/WordPress-Android-gh-pages/
1+
ossrhUsername=hello
2+
ossrhPassword=world
3+
4+
signing.keyId=byebye
5+
signing.password=secret
6+
signing.secretKeyRingFile=/home/user/secret.gpg
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package org.wordpress.android.util;
2+
3+
import android.app.Activity;
4+
import android.content.Context;
5+
import android.view.inputmethod.InputMethodManager;
6+
7+
public class ActivityUtils {
8+
public static void hideKeyboard(Activity activity) {
9+
if (activity != null && activity.getCurrentFocus() != null) {
10+
InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(
11+
Context.INPUT_METHOD_SERVICE);
12+
inputManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(),
13+
InputMethodManager.HIDE_NOT_ALWAYS);
14+
}
15+
}
16+
}

WordPressUtils/src/main/java/org/wordpress/android/util/AppLog.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
*/
1616
public class AppLog {
1717
// T for Tag
18-
public enum T {READER, EDITOR, MEDIA, NUX, API, STATS, UTILS, NOTIFS, DB, POSTS, COMMENTS, THEMES, TESTS, PROFILING, SIMPERIUM}
18+
public enum T {READER, EDITOR, MEDIA, NUX, API, STATS, UTILS, NOTIFS, DB, POSTS, COMMENTS, THEMES, TESTS, PROFILING, SIMPERIUM, SUGGESTION}
1919
public static final String TAG = "WordPress";
2020
public static final int HEADER_LINE_COUNT = 2;
2121

@@ -33,40 +33,46 @@ public static void enableRecording(boolean enable) {
3333
}
3434

3535
public static void v(T tag, String message) {
36+
message = StringUtils.notNullStr(message);
3637
Log.v(TAG + "-" + tag.toString(), message);
3738
addEntry(tag, LogLevel.v, message);
3839
}
3940

4041
public static void d(T tag, String message) {
42+
message = StringUtils.notNullStr(message);
4143
Log.d(TAG + "-" + tag.toString(), message);
4244
addEntry(tag, LogLevel.d, message);
4345
}
4446

4547
public static void i(T tag, String message) {
48+
message = StringUtils.notNullStr(message);
4649
Log.i(TAG + "-" + tag.toString(), message);
4750
addEntry(tag, LogLevel.i, message);
4851
}
4952

5053
public static void w(T tag, String message) {
54+
message = StringUtils.notNullStr(message);
5155
Log.w(TAG + "-" + tag.toString(), message);
5256
addEntry(tag, LogLevel.w, message);
5357
}
5458

5559
public static void e(T tag, String message) {
60+
message = StringUtils.notNullStr(message);
5661
Log.e(TAG + "-" + tag.toString(), message);
5762
addEntry(tag, LogLevel.e, message);
5863
}
5964

6065
public static void e(T tag, String message, Throwable tr) {
66+
message = StringUtils.notNullStr(message);
6167
Log.e(TAG + "-" + tag.toString(), message, tr);
6268
addEntry(tag, LogLevel.e, message + " - exception: " + tr.getMessage());
63-
addEntry(tag, LogLevel.e, "StackTrace: " + getHTMLStringStackTrace(tr));
69+
addEntry(tag, LogLevel.e, "StackTrace: " + getStringStackTrace(tr));
6470
}
6571

6672
public static void e(T tag, Throwable tr) {
6773
Log.e(TAG + "-" + tag.toString(), tr.getMessage(), tr);
6874
addEntry(tag, LogLevel.e, tr.getMessage());
69-
addEntry(tag, LogLevel.e, "StackTrace: " + getHTMLStringStackTrace(tr));
75+
addEntry(tag, LogLevel.e, "StackTrace: " + getStringStackTrace(tr));
7076
}
7177

7278
public static void e(T tag, String volleyErrorMsg, int statusCode) {
@@ -113,15 +119,15 @@ private static class LogEntry {
113119

114120
private String toHtml() {
115121
StringBuilder sb = new StringBuilder()
116-
.append("<font color='")
122+
.append("<font color=\"")
117123
.append(logLevel.toHtmlColor())
118-
.append("'>")
124+
.append("\">")
119125
.append("[")
120126
.append(logTag.name())
121127
.append("] ")
122128
.append(logLevel.name())
123129
.append(": ")
124-
.append(logText)
130+
.append(TextUtils.htmlEncode(logText).replace("\n", "<br />"))
125131
.append("</font>");
126132
return sb.toString();
127133
}
@@ -164,9 +170,6 @@ private static String getStringStackTrace(Throwable throwable) {
164170
return errors.toString();
165171
}
166172

167-
private static String getHTMLStringStackTrace(Throwable throwable) {
168-
return getStringStackTrace(throwable).replace("\n", "<br/>");
169-
}
170173

171174
/*
172175
* returns entire log as html for display (see AppLogViewerActivity)

WordPressUtils/src/main/java/org/wordpress/android/util/BlogUtils.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,25 @@ public int compare(Object blog1, Object blog2) {
2626
/**
2727
* Return a blog name or blog url (host part only) if trimmed name is an empty string
2828
*/
29-
public static String getBlogNameFromAccountMap(Map<String, Object> account) {
30-
String blogName = StringUtils.unescapeHTML(MapUtils.getMapStr(account, "blogName"));
29+
public static String getBlogNameOrHostNameFromAccountMap(Map<String, Object> account) {
30+
String blogName = getBlogNameFromAccountMap(account);
3131
if (blogName.trim().length() == 0) {
3232
blogName = StringUtils.getHost(MapUtils.getMapStr(account, "url"));
3333
}
3434
return blogName;
3535
}
36-
}
36+
37+
/**
38+
* Return a blog name or blog url (host part only) if trimmed name is an empty string
39+
*/
40+
public static String getBlogNameFromAccountMap(Map<String, Object> account) {
41+
return StringUtils.unescapeHTML(MapUtils.getMapStr(account, "blogName"));
42+
}
43+
44+
/**
45+
* Return blog url (host part only) if trimmed name is an empty string
46+
*/
47+
public static String getHostNameFromAccountMap(Map<String, Object> account) {
48+
return StringUtils.getHost(MapUtils.getMapStr(account, "url"));
49+
}
50+
}

WordPressUtils/src/main/java/org/wordpress/android/util/ImageUtils.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -528,12 +528,6 @@ public static Bitmap getCircularBitmap(final Bitmap bitmap) {
528528
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
529529
canvas.drawBitmap(bitmap, rect, rect, paint);
530530

531-
// outline
532-
paint.setStyle(Paint.Style.STROKE);
533-
paint.setStrokeWidth(1f);
534-
paint.setColor(Color.DKGRAY);
535-
canvas.drawOval(rectF, paint);
536-
537531
return output;
538532
}
539533

WordPressUtils/src/main/java/org/wordpress/android/util/JSONUtil.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.wordpress.android.util.AppLog.T;
99

1010
import java.util.ArrayList;
11+
import java.util.Iterator;
1112

1213
public class JSONUtil {
1314
private static String QUERY_SEPERATOR=".";

WordPressUtils/src/main/java/org/wordpress/android/util/ListScrollPositionManager.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package org.wordpress.android.util;
22

3+
import android.content.Context;
4+
import android.content.SharedPreferences;
5+
import android.content.SharedPreferences.Editor;
6+
import android.preference.PreferenceManager;
37
import android.view.View;
48
import android.widget.ListView;
59

@@ -33,4 +37,22 @@ public void restoreScrollOffset() {
3337
mListView.setItemChecked(mSelectedPosition, true);
3438
}
3539
}
40+
41+
public void saveToPreferences(Context context, String uniqueId) {
42+
saveScrollOffset();
43+
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
44+
Editor editor = settings.edit();
45+
editor.putInt("scroll-position-manager-index-" + uniqueId, mListViewScrollStateIndex);
46+
editor.putInt("scroll-position-manager-offset-" + uniqueId, mListViewScrollStateOffset);
47+
editor.putInt("scroll-position-manager-selected-position-" + uniqueId, mSelectedPosition);
48+
editor.apply();
49+
}
50+
51+
public void restoreFromPreferences(Context context, String uniqueId) {
52+
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
53+
mListViewScrollStateIndex = settings.getInt("scroll-position-manager-index-" + uniqueId, 0);
54+
mListViewScrollStateOffset = settings.getInt("scroll-position-manager-offset-" + uniqueId, 0);
55+
mSelectedPosition = settings.getInt("scroll-position-manager-selected-position-" + uniqueId, 0);
56+
restoreScrollOffset();
57+
}
3658
}

WordPressUtils/src/main/java/org/wordpress/android/util/PhotonUtils.java

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@ public static String fixAvatar(final String imageUrl, int avatarSz) {
2020
return "";
2121

2222
// if this isn't a gravatar image, return as resized photon image url
23-
if (!imageUrl.contains("gravatar.com"))
23+
if (!imageUrl.contains("gravatar.com")) {
2424
return getPhotonImageUrl(imageUrl, avatarSz, avatarSz);
25+
}
2526

2627
// remove all other params, then add query string for size and "mystery man" default
2728
return UrlUtils.removeQuery(imageUrl) + "?s=" + avatarSz + "&d=mm";
@@ -35,9 +36,18 @@ public static boolean isMshotsUrl(final String imageUrl) {
3536
}
3637

3738
/*
38-
* returns a photon url for the passed image with the resize query set to the passed dimensions
39+
* returns a photon url for the passed image with the resize query set to the passed
40+
* dimensions - note that the passed quality parameter will only affect JPEGs
3941
*/
42+
public static enum Quality {
43+
HIGH,
44+
MEDIUM,
45+
LOW
46+
}
4047
public static String getPhotonImageUrl(String imageUrl, int width, int height) {
48+
return getPhotonImageUrl(imageUrl, width, height, Quality.MEDIUM);
49+
}
50+
public static String getPhotonImageUrl(String imageUrl, int width, int height, Quality quality) {
4151
if (TextUtils.isEmpty(imageUrl)) {
4252
return "";
4353
}
@@ -54,30 +64,39 @@ public static String getPhotonImageUrl(String imageUrl, int width, int height) {
5464
// don't use with GIFs - photon breaks animated GIFs, and sometimes returns a GIF that
5565
// can't be read by BitmapFactory.decodeByteArray (used by Volley in ImageRequest.java
5666
// to decode the downloaded image)
57-
// ex: http://i0.wp.com/lusianne.files.wordpress.com/2013/08/193.gif?resize=768,320
5867
if (imageUrl.endsWith(".gif")) {
5968
return imageUrl;
6069
}
6170

6271
// if this is an "mshots" url, skip photon and return it with a query that sets the width/height
63-
// (these are screenshots of the blog that often appear in freshly pressed posts)
64-
// see http://wp.tutsplus.com/tutorials/how-to-generate-website-screenshots-for-your-wordpress-site/
65-
// ex: http://s.wordpress.com/mshots/v1/http%3A%2F%2Fnickbradbury.com?w=600
6672
if (isMshotsUrl(imageUrl)) {
6773
return imageUrl + "?w=" + width + "&h=" + height;
6874
}
6975

76+
final String qualityParam;
77+
switch (quality) {
78+
case HIGH:
79+
qualityParam = "quality=100";
80+
break;
81+
case LOW:
82+
qualityParam = "quality=35";
83+
break;
84+
default: // medium
85+
qualityParam = "quality=65";
86+
break;
87+
}
88+
7089
// if both width & height are passed use the "resize" param, use only "w" or "h" if just
71-
// one of them is set, otherwise no query string
90+
// one of them is set
7291
final String query;
7392
if (width > 0 && height > 0) {
74-
query = "?resize=" + width + "," + height;
93+
query = "?resize=" + width + "," + height + "&" + qualityParam;
7594
} else if (width > 0) {
76-
query = "?w=" + width;
95+
query = "?w=" + width + "&" + qualityParam;
7796
} else if (height > 0) {
78-
query = "?h=" + height;
97+
query = "?h=" + height + "&" + qualityParam;
7998
} else {
80-
query = "";
99+
query = "?" + qualityParam;
81100
}
82101

83102
// return passed url+query if it's already a photon url

0 commit comments

Comments
 (0)