diff --git a/.travis.yml b/.travis.yml
index 3fe0e8dd5..f69de24f1 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -22,7 +22,7 @@ android:
- platform-tools
# Use the desired build tools
- - build-tools-25.0.2
+ - build-tools-25.0.3
# Project target SDK
- android-25
diff --git a/README.md b/README.md
index b37f841c5..a7180772c 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[![Build Status](https://travis-ci.org/bitstadium/HockeySDK-Android.svg?branch=develop)](https://travis-ci.org/bitstadium/HockeySDK-Android)
[![Slack Status](https://slack.hockeyapp.net/badge.svg)](https://slack.hockeyapp.net)
-## Version 4.1.3
+## Version 4.1.4
## Introduction
@@ -53,7 +53,7 @@ This document contains the following sections:
## 1. Requirements
1. We assume that you already have an Android project in Android Studio or another Android IDE.
-2. The SDK runs on devices with Android 2.3 or later, but you need to build your app with Android SDK 3.0 (Level 11) or later for the integration with HockeySDK.
+2. The SDK runs on devices with Android 2.3 or later, but you need to build your app with Android SDK 3.0 (Level 11) or later.
## 2. Setup
@@ -75,7 +75,7 @@ Please see the "[How to create a new app](http://support.hockeyapp.net/kb/about-
Add the SDK to your app module's dependencies in Android Studio by adding the following line to your `dependencies { ... }` configuration:
```groovy
-compile 'net.hockeyapp.android:HockeySDK:4.1.3'
+compile 'net.hockeyapp.android:HockeySDK:4.1.4'
```
@@ -314,7 +314,7 @@ If you don't want to use Gradle or Maven dependency management you can also down
4. Configure your development tools to use the .aar/.jar file.
5. In Android Studio, create a new module via `File > New > New Module`
6. Select **Import .JAR/.AAR Package** and click **Next**.
-7. In the next menu select the .aar/.jar file you just copied to the libs folder. You can rename the module to whatever you want, but we in general recommend leaving it as is. If you don't rename the module, it will match the name of the .aar/.jar file, in this case **HockeySDK-4.1.3**. This way you'll quickly know which version of the SDK you are using in the future.
+7. In the next menu select the .aar/.jar file you just copied to the libs folder. You can rename the module to whatever you want, but we in general recommend leaving it as is. If you don't rename the module, it will match the name of the .aar/.jar file, in this case **HockeySDK-4.1.4**. This way you'll quickly know which version of the SDK you are using in the future.
8. Make sure Android Studio added the necessary code to integrate the HockeySDK:
Head over to your app's `build.gradle` to verify the dependency was added correctly. It should look like this:
@@ -324,19 +324,19 @@ dependencies {
//your other dependencies
//...
- compile project(':HockeySDK-4.1.3')
+ compile project(':HockeySDK-4.1.4')
}
```
Next, make sure your `settings.gradle` contains the new module:
```groovy
-include ':app', ':HockeySDK-4.1.3'
+include ':app', ':HockeySDK-4.1.4'
```
Finally, check the `build.gradle` of the newly added module:
```groovy
configurations.maybeCreate("default")
-artifacts.add("default", file('HockeySDK-4.1.3.aar'))
+artifacts.add("default", file('HockeySDK-4.1.4.aar'))
```
Once you have verified that everything necessary has been added, proceed with [SDK integration](#integrate-sdk).
@@ -527,7 +527,7 @@ However, if you provide a custom user interface fragment for the update distribu
## 5. Documentation
-Our documentation can be found on [HockeyApp](http://hockeyapp.net/help/sdk/android/4.1.3/index.html).
+Our documentation can be found on [HockeyApp](http://hockeyapp.net/help/sdk/android/4.1.4/index.html).
## 6.Troubleshooting
@@ -536,7 +536,7 @@ Our documentation can be found on [HockeyApp](http://hockeyapp.net/help/sdk/andr
2. Check if the `applicationId` in your `build.gradle` file matches the Bundle Identifier of the app in HockeyApp. HockeyApp accepts crashes only if both the App ID and the bundle identifier match their corresponding values in your app. Please note that the package value in your `AndroidManifest.xml` file might differ from the bundle identifier.
-3. If your app crashes and you start it again, does the dialog show up which asks the user to send the crash report? If not, please crash your app again, then connect the debugger and set a break point in `CrashManager.java`'s [register](https://github.com/bitstadium/HockeySDK-Android/blob/master/src/main/java/net/hockeyapp/android/CrashManager.java#L100)-method to see why the dialog is not shown.
+3. If your app crashes and you start it again, does the dialog show up which asks the user to send the crash report? If not, please crash your app again, then connect the debugger and set a break point in `CrashManager.java`'s [register](https://github.com/bitstadium/HockeySDK-Android/blob/master/src/main/java/net/hockeyapp/android/CrashManager.java#L100) method to see why the dialog is not shown.
4. If you continue to encouter issues, please [contact us](http://support.hockeyapp.net/discussion/new).
diff --git a/build.gradle b/build.gradle
index a05e20ea6..0a6d7a4ec 100644
--- a/build.gradle
+++ b/build.gradle
@@ -35,14 +35,14 @@ allprojects {
ext {
ARTIFACT_ID = 'HockeySDK'
- VERSION_NAME = '4.1.3'
- VERSION_CODE = 10
+ VERSION_NAME = '4.1.4'
+ VERSION_CODE = 11
SITE_URL = 'https://github.com/bitstadium/hockeysdk-android'
GIT_URL = 'https://github.com/bitstadium/HockeySDK-Android.git'
BINTRAY_USER = HOCKEYAPP_BINTRAY_USER
GROUP_NAME = 'net.hockeyapp.android'
COMPILE_SDK = 25
- BUILD_TOOLS = '25.0.2'
+ BUILD_TOOLS = '25.0.3'
IS_UPLOADING = project.getGradle().startParameter.taskNames.any{it.contains('bintrayUpload')}
DESCRIPTION = 'HockeySDK-Android implements support for using HockeyApp in your Android application. The following features are currently supported:\n' +
'\n' +
diff --git a/hockeysdk/build.gradle b/hockeysdk/build.gradle
index 20579ea34..b1eb6c93a 100644
--- a/hockeysdk/build.gradle
+++ b/hockeysdk/build.gradle
@@ -1,7 +1,7 @@
apply plugin: 'com.android.library'
apply plugin: 'com.novoda.bintray-release' // must be applied after your artifact generating plugin (eg. java / com.android.library)
-def supportLibVersion = "25.2.0"
+def supportLibVersion = "25.3.1"
android {
compileSdkVersion COMPILE_SDK
diff --git a/hockeysdk/src/main/java/net/hockeyapp/android/CrashManager.java b/hockeysdk/src/main/java/net/hockeyapp/android/CrashManager.java
index 752c45758..86c6e4a49 100644
--- a/hockeysdk/src/main/java/net/hockeyapp/android/CrashManager.java
+++ b/hockeysdk/src/main/java/net/hockeyapp/android/CrashManager.java
@@ -79,12 +79,23 @@ public class CrashManager {
*/
public static void register(Context context) {
String appIdentifier = Util.getAppIdentifier(context);
- if (TextUtils.isEmpty(appIdentifier)) {
- throw new IllegalArgumentException("HockeyApp app identifier was not configured correctly in manifest or build configuration.");
- }
register(context, appIdentifier);
}
+ /**
+ * Registers new crash manager and handles existing crash logs.
+ * HockeyApp App Identifier is read from configuration values in AndroidManifest.xml
+ *
+ * @param context The context to use. Usually your Activity object. If
+ * context is not an instance of Activity (or a subclass of it),
+ * crashes will be sent automatically.
+ * @param listener Implement for callback functions.
+ */
+ public static void register(Context context, CrashManagerListener listener) {
+ String appIdentifier = Util.getAppIdentifier(context);
+ register(context, appIdentifier, listener);
+ }
+
/**
* Registers new crash manager and handles existing crash logs. If
* context is not an instance of Activity (or a subclass of it),
@@ -575,6 +586,9 @@ private static void sendCrashes(final WeakReference weakContext, final
Context ctx = weakContext.get();
if (ctx != null && !Util.isConnectedToNetwork(ctx)) {
// Not connected to network, not trying to submit stack traces
+ if(listener != null) {
+ listener.onCrashesNotSent();
+ }
return;
}
diff --git a/hockeysdk/src/main/java/net/hockeyapp/android/FeedbackActivity.java b/hockeysdk/src/main/java/net/hockeyapp/android/FeedbackActivity.java
index 477b250c1..6a4368257 100644
--- a/hockeysdk/src/main/java/net/hockeyapp/android/FeedbackActivity.java
+++ b/hockeysdk/src/main/java/net/hockeyapp/android/FeedbackActivity.java
@@ -58,7 +58,6 @@
*
Description
*
* Activity to show the feedback form.
- *
**/
public class FeedbackActivity extends Activity implements OnClickListener {
@@ -496,6 +495,8 @@ protected void configureFeedbackView(boolean haveToken) {
mSubjectInput = (EditText) findViewById(R.id.input_subject);
mTextInput = (EditText) findViewById(R.id.input_message);
+ configureHints();
+
/** Check to see if the Name and Email are saved in {@link SharedPreferences} */
if (!mFeedbackViewInitialized) {
String nameEmailSubject = PrefsUtil.getInstance().getNameEmailFromPrefs(mContext);
@@ -596,6 +597,17 @@ private boolean addAttachment(int request) {
} else return false;
}
+ private void configureHints() {
+ if (FeedbackManager.getRequireUserName() == FeedbackUserDataElement.REQUIRED) {
+ mNameInput.setHint(getString(R.string.hockeyapp_feedback_name_hint_required));
+ }
+ if (FeedbackManager.getRequireUserEmail() == FeedbackUserDataElement.REQUIRED) {
+ mEmailInput.setHint(getString(R.string.hockeyapp_feedback_email_hint_required));
+ }
+ mSubjectInput.setHint(getString(R.string.hockeyapp_feedback_subject_hint_required));
+ mTextInput.setHint(getString(R.string.hockeyapp_feedback_message_hint_required));
+ }
+
private void configureAppropriateView() {
/** Try to retrieve the Feedback Token from {@link SharedPreferences} */
if (!mForceNewThread || mInSendFeedback) {
@@ -671,6 +683,7 @@ public void run() {
try {
date = format.parse(mFeedbackMessages.get(0).getCreatedAt());
mLastUpdatedTextView.setText(String.format(getString(R.string.hockeyapp_feedback_last_updated_text), formatNew.format(date)));
+ mLastUpdatedTextView.setContentDescription(mLastUpdatedTextView.getText());
mLastUpdatedTextView.setVisibility(View.VISIBLE);
} catch (ParseException e1) {
e1.printStackTrace();
diff --git a/hockeysdk/src/main/java/net/hockeyapp/android/FeedbackManager.java b/hockeysdk/src/main/java/net/hockeyapp/android/FeedbackManager.java
index 10f364f1f..afa821514 100644
--- a/hockeysdk/src/main/java/net/hockeyapp/android/FeedbackManager.java
+++ b/hockeysdk/src/main/java/net/hockeyapp/android/FeedbackManager.java
@@ -105,12 +105,21 @@ public class FeedbackManager {
*/
public static void register(Context context) {
String appIdentifier = Util.getAppIdentifier(context);
- if (appIdentifier == null || appIdentifier.length() == 0) {
- throw new IllegalArgumentException("HockeyApp app identifier was not configured correctly in manifest or build configuration.");
- }
register(context, appIdentifier);
}
+ /**
+ * Registers new Feedback manager.
+ * HockeyApp App Identifier is read from configuration values in AndroidManifest.xml
+ *
+ * @param context The context to use. Usually your Activity object.
+ * @param listener Implement for callback functions.
+ */
+ public static void register(Context context, FeedbackManagerListener listener) {
+ String appIdentifier = Util.getAppIdentifier(context);
+ register(context, appIdentifier, listener);
+ }
+
/**
* Registers new Feedback manager.
*
diff --git a/hockeysdk/src/main/java/net/hockeyapp/android/LoginManager.java b/hockeysdk/src/main/java/net/hockeyapp/android/LoginManager.java
index 0e860e334..26840b4f9 100644
--- a/hockeysdk/src/main/java/net/hockeyapp/android/LoginManager.java
+++ b/hockeysdk/src/main/java/net/hockeyapp/android/LoginManager.java
@@ -95,20 +95,32 @@ public class LoginManager {
*/
public static void register(final Context context, String appSecret, int mode) {
String appIdentifier = Util.getAppIdentifier(context);
- if (TextUtils.isEmpty(appIdentifier)) {
- throw new IllegalArgumentException("HockeyApp app identifier was not configured correctly in manifest or build configuration.");
- }
register(context, appIdentifier, appSecret, mode, (Class>) null);
}
+ /**
+ * Registers new login manager.
+ * HockeyApp App Identifier is read from configuration values in AndroidManifest.xml.
+ *
+ * @param context The context to use. Usually your Activity object. Has to be
+ * of class Activity or subclass for interactive login.
+ * @param appSecret The App Secret of your app on HockeyApp.
+ * @param mode The login mode to use.
+ * @param listener Instance of LoginListener
+ */
+ public static void register(final Context context, String appSecret, int mode, LoginManagerListener listener) {
+ String appIdentifier = Util.getAppIdentifier(context);
+ register(context, appIdentifier, appSecret, mode, listener);
+ }
+
/**
* Registers new LoginManager.
*
- * @param context the context to use. Usually your Activity object.
- * @param appIdentifier the App ID of your app on HockeyApp.
- * @param appSecret the App Secret of your app on HockeyApp.
- * @param mode the login mode.
- * @param listener instance of LoginListener
+ * @param context The context to use. Usually your Activity object.
+ * @param appIdentifier The App ID of your app on HockeyApp.
+ * @param appSecret The App Secret of your app on HockeyApp.
+ * @param mode The login mode.
+ * @param listener Instance of LoginListener
*/
public static void register(final Context context, String appIdentifier, String appSecret, int mode, LoginManagerListener listener) {
LoginManager.listener = listener;
diff --git a/hockeysdk/src/main/java/net/hockeyapp/android/UpdateActivity.java b/hockeysdk/src/main/java/net/hockeyapp/android/UpdateActivity.java
index 9ce66fe3c..437bf5093 100644
--- a/hockeysdk/src/main/java/net/hockeyapp/android/UpdateActivity.java
+++ b/hockeysdk/src/main/java/net/hockeyapp/android/UpdateActivity.java
@@ -223,6 +223,7 @@ public void onClick(View v) {
protected void configureView() {
TextView nameLabel = (TextView) findViewById(R.id.label_title);
nameLabel.setText(getAppName());
+ nameLabel.setContentDescription(getAppName());
final TextView versionLabel = (TextView) findViewById(R.id.label_version);
final String versionString = "Version " + mVersionHelper.getVersionString();
@@ -240,6 +241,7 @@ public void downloadSuccessful(DownloadFileTask task) {
long appSize = ((GetFileSizeTask) task).getSize();
String appSizeString = String.format(Locale.US, "%.2f", appSize / (1024.0f * 1024.0f)) + " MB";
versionLabel.setText(getString(R.string.hockeyapp_update_version_details_label, versionString, fileDate, appSizeString));
+ versionLabel.setContentDescription(versionLabel.getText());
}
}
});
diff --git a/hockeysdk/src/main/java/net/hockeyapp/android/UpdateManager.java b/hockeysdk/src/main/java/net/hockeyapp/android/UpdateManager.java
index 6af871f1e..fb466d7b8 100644
--- a/hockeysdk/src/main/java/net/hockeyapp/android/UpdateManager.java
+++ b/hockeysdk/src/main/java/net/hockeyapp/android/UpdateManager.java
@@ -46,12 +46,21 @@ public class UpdateManager {
*/
public static void register(Activity activity) {
String appIdentifier = Util.getAppIdentifier(activity);
- if (TextUtils.isEmpty(appIdentifier)) {
- throw new IllegalArgumentException("HockeyApp app identifier was not configured correctly in manifest or build configuration.");
- }
register(activity, appIdentifier);
}
+ /**
+ * Registers new update manager.
+ * HockeyApp app identifier is read from AndroidManifest.xml.
+ *
+ * @param activity The parent activity to return to.
+ * @param listener Implement for callback functions.
+ */
+ public static void register(Activity activity, UpdateManagerListener listener) {
+ String appIdentifier = Util.getAppIdentifier(activity);
+ register(activity, appIdentifier, listener);
+ }
+
/**
* Registers new update manager.
*
diff --git a/hockeysdk/src/main/java/net/hockeyapp/android/metrics/Sender.java b/hockeysdk/src/main/java/net/hockeyapp/android/metrics/Sender.java
index 4c6e753dd..294f15145 100644
--- a/hockeysdk/src/main/java/net/hockeyapp/android/metrics/Sender.java
+++ b/hockeysdk/src/main/java/net/hockeyapp/android/metrics/Sender.java
@@ -138,10 +138,10 @@ protected void sendAvailableFiles() {
protected void send(HttpURLConnection connection, File file, String persistedData) {
// TODO Why does this get the file and persistedData reference, even though everything is in the connection?
// TODO Looks like this will have to be rewritten for its own AsyncTask subclass.
- logRequest(connection, persistedData);
if (connection != null && file != null && persistedData != null) {
- mRequestCount.getAndIncrement();
try {
+ mRequestCount.getAndIncrement();
+ logRequest(connection, persistedData);
// Starts the query
connection.connect();
// read the response code while we're ready to catch the IO exception
@@ -149,13 +149,21 @@ protected void send(HttpURLConnection connection, File file, String persistedDat
// process the response
onResponse(connection, responseCode, persistedData, file);
} catch (IOException e) {
- //Probably offline
- HockeyLog.debug(TAG, "Couldn't send data with IOException: " + e.toString());
+ // Probably offline
+ HockeyLog.debug(TAG, "Couldn't send data with " + e.toString());
mRequestCount.getAndDecrement();
if (this.getPersistence() != null) {
HockeyLog.debug(TAG, "Persisting because of IOException: We're probably offline.");
this.getPersistence().makeAvailable(file); //send again later
}
+ } catch (SecurityException e) {
+ // Permission denied
+ HockeyLog.debug(TAG, "Couldn't send data with " + e.toString());
+ mRequestCount.getAndDecrement();
+ if (this.getPersistence() != null) {
+ HockeyLog.debug(TAG, "Persisting because of SecurityException: Missing INTERNET permission or the user might have removed the internet permission.");
+ this.getPersistence().makeAvailable(file); //send again later
+ }
}
}
}
@@ -309,11 +317,11 @@ protected void onUnexpected(HttpURLConnection connection, int responseCode, Stri
* @param connection the connection
* @param payload the payload of telemetry data
*/
- private void logRequest(HttpURLConnection connection, String payload) {
+ private void logRequest(HttpURLConnection connection, String payload) throws IOException, SecurityException {
// TODO Rename this to reflect the true nature of this method: Sending the payload
Writer writer = null;
try {
- if ((connection != null) && (payload != null)) {
+ if (connection != null && payload != null) {
HockeyLog.debug(TAG, "Sending payload:\n" + payload);
HockeyLog.debug(TAG, "Using URL:" + connection.getURL().toString());
//the following 3 lines actually appends the payload to the connection
@@ -321,8 +329,6 @@ private void logRequest(HttpURLConnection connection, String payload) {
writer.write(payload);
writer.flush();
}
- } catch (IOException e) {
- HockeyLog.debug(TAG, "Couldn't log data with: " + e.toString());
} finally {
if (writer != null) {
try {
diff --git a/hockeysdk/src/main/java/net/hockeyapp/android/metrics/TelemetryContext.java b/hockeysdk/src/main/java/net/hockeyapp/android/metrics/TelemetryContext.java
index 5d9bc027e..62803bdfa 100644
--- a/hockeysdk/src/main/java/net/hockeyapp/android/metrics/TelemetryContext.java
+++ b/hockeysdk/src/main/java/net/hockeyapp/android/metrics/TelemetryContext.java
@@ -161,23 +161,11 @@ protected void configApplicationContext() {
// App version
String version = "unknown";
mPackageName = "";
-
- try {
- final PackageManager manager = mContext.getPackageManager();
- final PackageInfo info = manager
- .getPackageInfo(mContext.getPackageName(), 0);
-
- if (info.packageName != null) {
- mPackageName = info.packageName;
- }
-
- String appBuild = Integer.toString(info.versionCode);
- version = String.format("%s (%S)", info.versionName, appBuild);
- } catch (PackageManager.NameNotFoundException e) {
- HockeyLog.debug(TAG, "Could not get application context");
- } finally {
- setAppVersion(version);
+ if (Constants.APP_PACKAGE != null) {
+ mPackageName = Constants.APP_PACKAGE;
}
+ version = String.format("%s (%S)", Constants.APP_VERSION_NAME, Constants.APP_VERSION);
+ setAppVersion(version);
// Hockey SDK version
String sdkVersionString = BuildConfig.VERSION_NAME;
diff --git a/hockeysdk/src/main/java/net/hockeyapp/android/utils/Util.java b/hockeysdk/src/main/java/net/hockeyapp/android/utils/Util.java
index 4ae4785f4..59bbd99ef 100644
--- a/hockeysdk/src/main/java/net/hockeyapp/android/utils/Util.java
+++ b/hockeysdk/src/main/java/net/hockeyapp/android/utils/Util.java
@@ -236,7 +236,11 @@ private static Notification buildNotificationWithBuilder(Context context, Pendin
* @return the HockeyApp AppIdentifier
*/
public static String getAppIdentifier(Context context) {
- return getManifestString(context, APP_IDENTIFIER_KEY);
+ String appIdentifier = getManifestString(context, APP_IDENTIFIER_KEY);
+ if (TextUtils.isEmpty(appIdentifier)) {
+ throw new IllegalArgumentException("HockeyApp app identifier was not configured correctly in manifest or build configuration.");
+ }
+ return appIdentifier;
}
/**
@@ -264,10 +268,15 @@ private static Bundle getBundle(Context context) {
}
public static boolean isConnectedToNetwork(Context context) {
- ConnectivityManager connectivityManager = (ConnectivityManager) context.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
- if (connectivityManager != null) {
- NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
- return activeNetwork != null && activeNetwork.isConnected();
+ try {
+ ConnectivityManager connectivityManager = (ConnectivityManager) context.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
+ if (connectivityManager != null) {
+ NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
+ return activeNetwork != null && activeNetwork.isConnected();
+ }
+ } catch (Exception e) {
+ HockeyLog.error("Exception thrown when check network is connected:");
+ e.printStackTrace();
}
return false;
}
diff --git a/hockeysdk/src/main/java/net/hockeyapp/android/views/AttachmentView.java b/hockeysdk/src/main/java/net/hockeyapp/android/views/AttachmentView.java
index 005fb840a..31d2a7254 100644
--- a/hockeysdk/src/main/java/net/hockeyapp/android/views/AttachmentView.java
+++ b/hockeysdk/src/main/java/net/hockeyapp/android/views/AttachmentView.java
@@ -79,6 +79,7 @@ public AttachmentView(Context context, ViewGroup parent, Uri attachmentUri, bool
initializeView(context, removable);
mTextView.setText(mFilename);
+ mTextView.setContentDescription(mFilename);
new AsyncTask() {
@Override
protected Bitmap doInBackground(Void... args) {
@@ -112,6 +113,7 @@ public AttachmentView(Context context, ViewGroup parent, FeedbackAttachment atta
mOrientation = ImageUtils.ORIENTATION_PORTRAIT;
mTextView.setText(R.string.hockeyapp_feedback_attachment_loading);
+ mTextView.setContentDescription(mTextView.getText());
configureViewForPlaceholder(false);
}
diff --git a/hockeysdk/src/main/java/net/hockeyapp/android/views/FeedbackMessageView.java b/hockeysdk/src/main/java/net/hockeyapp/android/views/FeedbackMessageView.java
index 742e5f5b8..443b73be7 100644
--- a/hockeysdk/src/main/java/net/hockeyapp/android/views/FeedbackMessageView.java
+++ b/hockeysdk/src/main/java/net/hockeyapp/android/views/FeedbackMessageView.java
@@ -61,12 +61,15 @@ public void setFeedbackMessage(FeedbackMessage feedbackMessage) {
try {
Date date = DATE_FORMAT_IN.parse(mFeedbackMessage.getCreatedAt());
mDateTextView.setText(DATE_FORMAT_OUT.format(date));
+ mDateTextView.setContentDescription(DATE_FORMAT_OUT.format(date));
} catch (ParseException e) {
e.printStackTrace();
}
mAuthorTextView.setText(mFeedbackMessage.getName());
+ mAuthorTextView.setContentDescription(mFeedbackMessage.getName());
mMessageTextView.setText(mFeedbackMessage.getText());
+ mMessageTextView.setContentDescription(mFeedbackMessage.getText());
mAttachmentListView.removeAllViews();
for (FeedbackAttachment feedbackAttachment : mFeedbackMessage.getFeedbackAttachments()) {
diff --git a/hockeysdk/src/main/res/layout-land/hockeyapp_activity_update.xml b/hockeysdk/src/main/res/layout-land/hockeyapp_activity_update.xml
index 0f10daf2b..2a4574466 100644
--- a/hockeysdk/src/main/res/layout-land/hockeyapp_activity_update.xml
+++ b/hockeysdk/src/main/res/layout-land/hockeyapp_activity_update.xml
@@ -61,6 +61,7 @@
android:background="@drawable/hockeyapp_btn_background"
android:minWidth="120dp"
android:text="@string/hockeyapp_update_button"
+ android:contentDescription="@string/hockeyapp_update_button"
android:textColor="@color/hockeyapp_text_white"
android:textSize="16sp"/>
diff --git a/hockeysdk/src/main/res/layout/hockeyapp_activity_feedback.xml b/hockeysdk/src/main/res/layout/hockeyapp_activity_feedback.xml
index 131672611..9d11fadbb 100644
--- a/hockeysdk/src/main/res/layout/hockeyapp_activity_feedback.xml
+++ b/hockeysdk/src/main/res/layout/hockeyapp_activity_feedback.xml
@@ -65,7 +65,8 @@
style="@style/HockeyApp.ButtonStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:text="@string/hockeyapp_feedback_attachment_button_text" />
+ android:text="@string/hockeyapp_feedback_attachment_button_text"
+ android:contentDescription="@string/hockeyapp_feedback_attachment_button_text"/>
@@ -126,7 +128,8 @@
android:gravity="center"
android:paddingLeft="10dp"
android:paddingRight="10dp"
- android:text="@string/hockeyapp_feedback_response_button_text" />
+ android:text="@string/hockeyapp_feedback_response_button_text"
+ android:contentDescription="@string/hockeyapp_feedback_response_button_text"/>
+ android:text="@string/hockeyapp_feedback_refresh_button_text"
+ android:contentDescription="@string/hockeyapp_feedback_refresh_button_text"/>
diff --git a/hockeysdk/src/main/res/layout/hockeyapp_activity_login.xml b/hockeysdk/src/main/res/layout/hockeyapp_activity_login.xml
index de62fd86d..eb872e12a 100644
--- a/hockeysdk/src/main/res/layout/hockeyapp_activity_login.xml
+++ b/hockeysdk/src/main/res/layout/hockeyapp_activity_login.xml
@@ -17,6 +17,7 @@
android:layout_height="wrap_content"
android:layout_marginBottom="30dp"
android:text="@string/hockeyapp_login_headline_text"
+ android:contentDescription="@string/hockeyapp_login_headline_text"
android:textColor="@color/hockeyapp_text_normal"
android:textSize="18sp"
android:padding="20dp"
@@ -28,7 +29,7 @@
android:layout_height="wrap_content"
android:padding="20dp"
android:layout_marginBottom="30dp"
- android:hint="@string/hockeyapp_login_email_hint"
+ android:hint="@string/hockeyapp_login_email_hint_required"
android:imeOptions="actionNext"
android:inputType="textEmailAddress"
android:textColor="@color/hockeyapp_text_normal"
@@ -42,7 +43,7 @@
android:layout_height="wrap_content"
android:padding="20dp"
android:layout_marginBottom="30dp"
- android:hint="@string/hockeyapp_login_password_hint"
+ android:hint="@string/hockeyapp_login_password_hint_required"
android:imeOptions="actionNext"
android:inputType="textPassword"
android:textColor="@color/hockeyapp_text_normal"
@@ -56,6 +57,7 @@
android:layout_height="wrap_content"
android:layout_marginBottom="30dp"
android:text="@string/hockeyapp_login_login_button_text"
+ android:contentDescription="@string/hockeyapp_login_login_button_text"
android:textColor="@color/hockeyapp_text_white"
android:textSize="15sp"
android:padding="20dp"
diff --git a/hockeysdk/src/main/res/layout/hockeyapp_activity_update.xml b/hockeysdk/src/main/res/layout/hockeyapp_activity_update.xml
index 9e1fdd087..cd7b173d9 100644
--- a/hockeysdk/src/main/res/layout/hockeyapp_activity_update.xml
+++ b/hockeysdk/src/main/res/layout/hockeyapp_activity_update.xml
@@ -68,6 +68,7 @@
android:paddingRight="20dp"
android:paddingTop="10dp"
android:text="@string/hockeyapp_update_button"
+ android:contentDescription="@string/hockeyapp_update_button"
android:textColor="@color/hockeyapp_text_white"
android:textSize="16sp"/>
diff --git a/hockeysdk/src/main/res/layout/hockeyapp_fragment_update.xml b/hockeysdk/src/main/res/layout/hockeyapp_fragment_update.xml
index 2fb4188bb..6c2cf225f 100644
--- a/hockeysdk/src/main/res/layout/hockeyapp_fragment_update.xml
+++ b/hockeysdk/src/main/res/layout/hockeyapp_fragment_update.xml
@@ -67,6 +67,7 @@
android:paddingRight="20dp"
android:paddingTop="10dp"
android:text="@string/hockeyapp_update_button"
+ android:contentDescription="@string/hockeyapp_update_button"
android:textColor="@color/hockeyapp_text_white"
android:textSize="16sp" />
diff --git a/hockeysdk/src/main/res/values-de/strings.xml b/hockeysdk/src/main/res/values-de/strings.xml
index 50c8f5a76..82cf736f0 100644
--- a/hockeysdk/src/main/res/values-de/strings.xml
+++ b/hockeysdk/src/main/res/values-de/strings.xml
@@ -53,6 +53,10 @@
Es sind maximal %s Anhänge möglich.Laden…Fehler
+ Name (erforderlich)
+ E-Mail (erforderlich)
+ Titel (erforderlich)
+ Nachricht (erforderlich)Feedback wird gesendet…
@@ -65,6 +69,8 @@
E-MailPasswortAnmelden
+ E-Mail (erforderlich)
+ Passwort (erforderlich)Zeichnen Sie etwas!
diff --git a/hockeysdk/src/main/res/values-es/strings.xml b/hockeysdk/src/main/res/values-es/strings.xml
index 01ce99d24..7ffc4e211 100644
--- a/hockeysdk/src/main/res/values-es/strings.xml
+++ b/hockeysdk/src/main/res/values-es/strings.xml
@@ -53,6 +53,10 @@
Sólo se permiten %s ficheros adjuntos.Cargando…Error
+ Nombre (obligatorio)
+ Email (obligatorio)
+ Asunto (obligatorio)
+ Mensaje (obligatorio)Envío…
@@ -65,6 +69,8 @@
EmailContraseñaEntrar
+ Email (obligatorio)
+ Contraseña (obligatorio)¡Dibuja algo!
diff --git a/hockeysdk/src/main/res/values-fa/strings.xml b/hockeysdk/src/main/res/values-fa/strings.xml
index ff8042734..c4dab1cc5 100644
--- a/hockeysdk/src/main/res/values-fa/strings.xml
+++ b/hockeysdk/src/main/res/values-fa/strings.xml
@@ -1,93 +1,99 @@
-
- نرم افزار
- %s بر خلاف انتظار متوقف شد
- آیا تمایل دارید که بصورت ناشناس گزارش این خطا را برای ما ارسال کنید تا ما آن را رفع کنیم ؟
- خیر
- همیشه ارسال کن
- ارسال
+
+ نرم افزار
+ %s بر خلاف انتظار متوقف شد
+ آیا تمایل دارید که بصورت ناشناس گزارش این خطا را برای ما ارسال کنید تا ما آن را رفع کنیم ؟
+ خیر
+ همیشه ارسال کن
+ ارسال
-
- دریافت ناموفق
- دریافت بروز رسانی ناموفق بود. آیا تمایل دارید دوباره امتحان کنید؟
- لغو
- تلاش مجدد
+
+ دریافت ناموفق
+ دریافت بروز رسانی ناموفق بود. آیا تمایل دارید دوباره امتحان کنید؟
+ لغو
+ تلاش مجدد
-
- %s به عنوان یک بروز رسانی الزامی آماده دریافت است
- بروز رسانی جدید آماده دریافت است
- بروز رسانی
- نمایش اطلاعات در مورد بروز رسانی جدید ؟
- خیر
- نمایش بده
+
+ %s به عنوان یک بروز رسانی الزامی آماده دریافت است
+ بروز رسانی جدید آماده دریافت است
+ بروز رسانی
+ نمایش اطلاعات در مورد بروز رسانی جدید ؟
+ خیر
+ نمایش بده
-
- زمان این شماره ساخت به پایان رسیده است
- %s منقضی شده است. لطفا برای دریافت بروز رسانی جدید به HockeyApp مراجعه کنید.
+
+ زمان این شماره ساخت به پایان رسیده است
+ %s منقضی شده است. لطفا برای دریافت بروز رسانی جدید به HockeyApp مراجعه کنید.
-
- در حال انتظار
- آیا تمایل دارید که دوباره نظر خود را ارسال کنید؟
- نام
- ایمیل
- موضوع
- متن پیام
- آخرین بروز رسانی : %s
- افزودن ضمیمه
- ارسال نظر
- افزودن پاسخ
- تازه کردن
- بازخورد
- پیام نمی تواند ارسال شود. لطفا اطلاعات ورودی و اتصال خود به اینترنت را چک کرده و دوباره امتحان کنید.
- پاسخی از سرور دریافت نشد. لطفا اتصال خود به اینترنت را چک کرده و دوباره امتحان کنید.
- لطفا موضوع را انتخاب کنید
- لطفا یک ایمیل معتبر وارد کنید
- لطفا یک ایمیل وارد کنید
- لطفا نام خود را وارد کنید
- پیام نمی تواند ارسال شود. لطفا متن پیام خود را وارد کنید
- بروز خطا
- ضمیمه فایل
- ضمیمه عکس
- انتخاب فایل
- انتخاب عکس
- تنها %s ضمیمه مجاز است.
- ...در حال بارگذاری
- خطا
+
+ در حال انتظار
+ آیا تمایل دارید که دوباره نظر خود را ارسال کنید؟
+ نام
+ ایمیل
+ موضوع
+ متن پیام
+ آخرین بروز رسانی : %s
+ افزودن ضمیمه
+ ارسال نظر
+ افزودن پاسخ
+ تازه کردن
+ بازخورد
+ پیام نمی تواند ارسال شود. لطفا اطلاعات ورودی و اتصال خود به اینترنت را چک کرده و دوباره امتحان کنید.
+ پاسخی از سرور دریافت نشد. لطفا اتصال خود به اینترنت را چک کرده و دوباره امتحان کنید.
+ لطفا موضوع را انتخاب کنید
+ لطفا یک ایمیل معتبر وارد کنید
+ لطفا یک ایمیل وارد کنید
+ لطفا نام خود را وارد کنید
+ پیام نمی تواند ارسال شود. لطفا متن پیام خود را وارد کنید
+ بروز خطا
+ ضمیمه فایل
+ ضمیمه عکس
+ انتخاب فایل
+ انتخاب عکس
+ تنها %s ضمیمه مجاز است.
+ ...در حال بارگذاری
+ خطا
+ نام (مورد نیاز)
+ ایمیل (مورد نیاز)
+ موضوع (مورد نیاز)
+ متن پیام (مورد نیاز)
-
- ...در حال ارسال بازخورد
- بازیابی بحث …
+
+ ...در حال ارسال بازخورد
+ بازیابی بحث …
-
- برای دسترسی به این نرم افزار لطفا ایمیل و کلمه عبور حساب کاربری خود در HockeyApp را وارد کنید.
- لطفا برای دسترسی به این نرم افزار، ایمیل حساب کاربری خود در HockeyApp را وارد کنید.
- لطفا گزینه های خالی را وارد کنید
- ایمیل
- کلمه عبور
- ورود
+
+ برای دسترسی به این نرم افزار لطفا ایمیل و کلمه عبور حساب کاربری خود در HockeyApp را وارد کنید.
+ لطفا برای دسترسی به این نرم افزار، ایمیل حساب کاربری خود در HockeyApp را وارد کنید.
+ لطفا گزینه های خالی را وارد کنید
+ ایمیل
+ کلمه عبور
+ ورود
+ ایمیل (مورد نیاز)
+ کلمه عبور (مورد نیاز)
-
- !چیزی را رسم کنید
- ذخیره
- بازگشت به قبل
- پاک کردن
- آیا تمایل دارید کار خود را ذخیره کنید؟
- خیر
- ذخیره
- لغو
+
+ !چیزی را رسم کنید
+ ذخیره
+ بازگشت به قبل
+ پاک کردن
+ آیا تمایل دارید کار خود را ذخیره کنید؟
+ خیر
+ ذخیره
+ لغو
-
- نیاز به دسترسی برای ذخیره سازی
- برای دریافت و نصب بروز رسانی های برنامه، شما باید اجازه دسترسی به حافظه دستگاه خود را بدهید
- لغو
- تلاش مجدد
+
+ نیاز به دسترسی برای ذخیره سازی
+ برای دریافت و نصب بروز رسانی های برنامه، شما باید اجازه دسترسی به حافظه دستگاه خود را بدهید
+ لغو
+ تلاش مجدد
-
- تایید
- لغو
- خطا
- بروز خطا
+
+ تایید
+ لغو
+ خطا
+ بروز خطا
-
- دستگاه شما به اینترنت متصل نیست. لطفا مشکل اتصال را حل و دوباره امتحان کنید.
+
+ دستگاه شما به اینترنت متصل نیست. لطفا مشکل اتصال را حل و دوباره امتحان کنید.
diff --git a/hockeysdk/src/main/res/values-fr/strings.xml b/hockeysdk/src/main/res/values-fr/strings.xml
index b5190880f..c1c25308e 100644
--- a/hockeysdk/src/main/res/values-fr/strings.xml
+++ b/hockeysdk/src/main/res/values-fr/strings.xml
@@ -53,6 +53,10 @@
Il ya un maximum de %s pièces jointes.Chargement…Erreur
+ Nom (requis)
+ Adresse (requis)
+ Sujet (requis)
+ Message (requis)Envoi…
@@ -65,6 +69,8 @@
EmailMot de passeConnectez-vous
+ Email (requis)
+ Mot de passe (requis)Dessinez quelque chose!
diff --git a/hockeysdk/src/main/res/values-it/strings.xml b/hockeysdk/src/main/res/values-it/strings.xml
index 8f9313f1a..44c18065d 100644
--- a/hockeysdk/src/main/res/values-it/strings.xml
+++ b/hockeysdk/src/main/res/values-it/strings.xml
@@ -53,6 +53,10 @@
E\' consentito un massimo di %s allegati.Caricamento…Errore
+ Nome (richiesto)
+ E-mail (richiesto)
+ Soggetto (richiesto)
+ Messaggio (richiesto)Invio feedback…
@@ -65,6 +69,8 @@
E-mailPasswordAccedi
+ E-mail (richiesto)
+ Password (richiesto)Disegna qualcosa!
diff --git a/hockeysdk/src/main/res/values-pt/strings.xml b/hockeysdk/src/main/res/values-pt/strings.xml
index 1fc6f57aa..e605d2d4b 100644
--- a/hockeysdk/src/main/res/values-pt/strings.xml
+++ b/hockeysdk/src/main/res/values-pt/strings.xml
@@ -54,6 +54,10 @@
Máximo %s anexos permitidos.Carregando…Erro
+ Nome (necessário)
+ Email (necessário)
+ Assunto (necessário)
+ Mensagem (necessário)Enviando Feedback…
@@ -66,6 +70,8 @@
EmailSenhaLogin
+ Email (necessário)
+ Senha (necessário)Desenhe algo!
diff --git a/hockeysdk/src/main/res/values-ru/strings.xml b/hockeysdk/src/main/res/values-ru/strings.xml
index 33afe5763..6b135346b 100644
--- a/hockeysdk/src/main/res/values-ru/strings.xml
+++ b/hockeysdk/src/main/res/values-ru/strings.xml
@@ -53,6 +53,10 @@
Количество вложений не может быть более чем %sЗагрузка…Ошибка
+ Имя (Обязательное поле)
+ Email (oбязательное поле)
+ Тема (oбязательное поле)
+ Сообщение (oбязательное поле)Отправка отзыва…
@@ -65,6 +69,8 @@
EmailПарольЛогин
+ Email (oбязательное поле)
+ Пароль (oбязательное поле)Нарисуйте что нибудь!
diff --git a/hockeysdk/src/main/res/values-zh/strings.xml b/hockeysdk/src/main/res/values-zh/strings.xml
index e2fc77307..26a52f01b 100644
--- a/hockeysdk/src/main/res/values-zh/strings.xml
+++ b/hockeysdk/src/main/res/values-zh/strings.xml
@@ -53,6 +53,10 @@
最多只允许添加 %s 个附件。加载中…错误
+ 姓名 (必填)
+ 电子邮件 (必填)
+ 主题 (必填)
+ 内容 (必填)发送反馈中…
@@ -65,6 +69,8 @@
电子邮件密码登录
+ 电子邮件 (必填)
+ 密码 (必填)来画点东西吧!
diff --git a/hockeysdk/src/main/res/values/strings.xml b/hockeysdk/src/main/res/values/strings.xml
index 80b0e688e..9d7faff07 100644
--- a/hockeysdk/src/main/res/values/strings.xml
+++ b/hockeysdk/src/main/res/values/strings.xml
@@ -54,6 +54,10 @@
Only %s attachments allowed.Loading…Error
+ Name (required)
+ Email (required)
+ Subject (required)
+ Message (required)Sending feedback…
@@ -66,6 +70,8 @@
EmailPasswordLogin
+ Email (required)
+ Password (required)Draw something!