Browse Source

Background colors change, Invalid filenames won't upload, Change uploads notification icon

uploads
Apostolos Fanakis 6 years ago
parent
commit
3a9275b13d
  1. 234
      app/src/main/java/gr/thmmy/mthmmy/activities/upload/UploadActivity.java
  2. 2
      app/src/main/java/gr/thmmy/mthmmy/activities/upload/UploadsHelper.java
  3. 8
      app/src/main/res/layout/activity_upload.xml
  4. 2
      app/src/main/res/layout/activity_upload_fields_builder.xml
  5. 1
      app/src/main/res/layout/activity_upload_filename_info_popup.xml
  6. 2
      app/src/main/res/values-v21/styles.xml
  7. 1
      app/src/main/res/values/colors.xml
  8. 2
      app/src/main/res/values/styles.xml

234
app/src/main/java/gr/thmmy/mthmmy/activities/upload/UploadActivity.java

@ -1,7 +1,9 @@
package gr.thmmy.mthmmy.activities.upload; package gr.thmmy.mthmmy.activities.upload;
import android.app.Activity; import android.app.Activity;
import android.app.PendingIntent;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
@ -12,6 +14,7 @@ import android.os.Bundle;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.design.widget.FloatingActionButton; import android.support.design.widget.FloatingActionButton;
import android.support.v4.content.FileProvider; import android.support.v4.content.FileProvider;
import android.support.v7.app.AlertDialog;
import android.support.v7.content.res.AppCompatResources; import android.support.v7.content.res.AppCompatResources;
import android.support.v7.preference.PreferenceManager; import android.support.v7.preference.PreferenceManager;
import android.support.v7.widget.AppCompatButton; import android.support.v7.widget.AppCompatButton;
@ -36,6 +39,7 @@ import android.widget.Toast;
import net.gotev.uploadservice.MultipartUploadRequest; import net.gotev.uploadservice.MultipartUploadRequest;
import net.gotev.uploadservice.ServerResponse; import net.gotev.uploadservice.ServerResponse;
import net.gotev.uploadservice.UploadInfo; import net.gotev.uploadservice.UploadInfo;
import net.gotev.uploadservice.UploadNotificationAction;
import net.gotev.uploadservice.UploadNotificationConfig; import net.gotev.uploadservice.UploadNotificationConfig;
import net.gotev.uploadservice.UploadStatusDelegate; import net.gotev.uploadservice.UploadStatusDelegate;
@ -232,7 +236,6 @@ public class UploadActivity extends BaseActivity {
popUp.setHeight(LinearLayout.LayoutParams.WRAP_CONTENT); popUp.setHeight(LinearLayout.LayoutParams.WRAP_CONTENT);
popUp.setFocusable(true); popUp.setFocusable(true);
//((TextView) popUpContent.findViewById(R.id.upload_filename_info_text)).setTe
((TextView) popUpContent.findViewById(R.id.upload_filename_info_text)). ((TextView) popUpContent.findViewById(R.id.upload_filename_info_text)).
setMovementMethod(LinkMovementMethod.getInstance()); setMovementMethod(LinkMovementMethod.getInstance());
//Displays the popup //Displays the popup
@ -279,7 +282,7 @@ public class UploadActivity extends BaseActivity {
String uploadTitleText = uploadTitle.getText().toString(); String uploadTitleText = uploadTitle.getText().toString();
String editTextFilename = uploadFilename.getText().toString(); String editTextFilename = uploadFilename.getText().toString();
String uploadDescriptionText = uploadDescription.getText().toString(); final String[] uploadDescriptionText = {uploadDescription.getText().toString()};
//Checks if all required fields are filled //Checks if all required fields are filled
{ {
@ -307,7 +310,9 @@ public class UploadActivity extends BaseActivity {
shouldReturn = true; shouldReturn = true;
} }
} }
if (!editTextFilename.matches("(.+\\.)+.+")) { if (!editTextFilename.matches("(.+\\.)+.+") ||
!FileUtils.getFilenameWithoutExtension(editTextFilename).
matches("[0-9a-zA-Z~!@#$%^&()_+=\\-`\\[\\]{};',.]+")) {
uploadFilename.setError("Invalid filename"); uploadFilename.setError("Invalid filename");
shouldReturn = true; shouldReturn = true;
} }
@ -317,121 +322,144 @@ public class UploadActivity extends BaseActivity {
} }
} }
//Checks settings and possibly adds "Uploaded from mTHMMY" string to description AlertDialog.Builder builder = new AlertDialog.Builder(this);
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(view.getContext()); builder.setTitle("Upload to thmmy");
if (sharedPrefs.getBoolean(UPLOADING_APP_SIGNATURE_ENABLE_KEY, true)) { builder.setMessage("Are you sure?");
uploadDescriptionText += uploadedFromThmmyPromptHtml; builder.setPositiveButton("YES, FIRE AWAY", (dialog, which) -> {
} //Checks settings and possibly adds "Uploaded from mTHMMY" string to description
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(view.getContext());
if (sharedPrefs.getBoolean(UPLOADING_APP_SIGNATURE_ENABLE_KEY, true)) {
uploadDescriptionText[0] += uploadedFromThmmyPromptHtml;
}
Uri tempFileUri = null; Uri tempFileUri = null;
if (filesList.size() == 1) { if (filesList.size() == 1) {
//Checks if the file needs renaming //Checks if the file needs renaming
UploadFile uploadFile = filesList.get(0); UploadFile uploadFile = filesList.get(0);
String selectedFileFilename = FileUtils.filenameFromUri(this, uploadFile.getFileUri()); String selectedFileFilename = FileUtils.filenameFromUri(this, uploadFile.getFileUri());
if (!editTextFilename.equals(selectedFileFilename)) { if (!editTextFilename.equals(selectedFileFilename)) {
//File should be uploaded with a different name //File should be uploaded with a different name
if (!uploadFile.isCameraPhoto()) { if (!uploadFile.isCameraPhoto()) {
//Temporarily copies the file to a another location and renames it //Temporarily copies the file to a another location and renames it
tempFileUri = UploadsHelper.createTempFile(this, storage, tempFileUri = UploadsHelper.createTempFile(this, storage,
uploadFile.getFileUri(), uploadFile.getFileUri(),
FileUtils.getFilenameWithoutExtension(editTextFilename)); FileUtils.getFilenameWithoutExtension(editTextFilename));
} else { } else {
//Renames the photo taken //Renames the photo taken
String photoPath = uploadFile.getPhotoFile().getPath(); String photoPath = uploadFile.getPhotoFile().getPath();
photoPath = photoPath.substring(0, photoPath.lastIndexOf(File.separator)); photoPath = photoPath.substring(0, photoPath.lastIndexOf(File.separator));
String destinationFilename = photoPath + File.separator + String destinationFilename = photoPath + File.separator +
FileUtils.getFilenameWithoutExtension(editTextFilename) + ".jpg"; FileUtils.getFilenameWithoutExtension(editTextFilename) + ".jpg";
if (!storage.rename(uploadFile.getPhotoFile().getAbsolutePath(), destinationFilename)) { if (!storage.rename(uploadFile.getPhotoFile().getAbsolutePath(), destinationFilename)) {
//Something went wrong, abort //Something went wrong, abort
Toast.makeText(this, "Could not create temporary file for renaming", Toast.LENGTH_SHORT).show(); Toast.makeText(this, "Could not create temporary file for renaming", Toast.LENGTH_SHORT).show();
progressBar.setVisibility(View.GONE); progressBar.setVisibility(View.GONE);
return; return;
} }
//Points photoFile and fileUri to the new copied and renamed file //Points photoFile and fileUri to the new copied and renamed file
uploadFile.setPhotoFile(storage.getFile(destinationFilename)); uploadFile.setPhotoFile(storage.getFile(destinationFilename));
uploadFile.setFileUri(FileProvider.getUriForFile(this, getPackageName() + uploadFile.setFileUri(FileProvider.getUriForFile(this, getPackageName() +
".provider", uploadFile.getPhotoFile())); ".provider", uploadFile.getPhotoFile()));
}
}
} else {
Uri[] filesListArray = new Uri[filesList.size()];
for (int i = 0; i < filesList.size(); ++i) {
filesListArray[i] = filesList.get(i).getFileUri();
} }
}
} else {
Uri[] filesListArray = new Uri[filesList.size()];
for (int i = 0; i < filesList.size(); ++i) {
filesListArray[i] = filesList.get(i).getFileUri();
}
File zipFile = UploadsHelper.createZipFile(this); File zipFile = UploadsHelper.createZipFile(this);
assert zipFile != null; assert zipFile != null;
tempFileUri = FileProvider.getUriForFile(this, getPackageName() + tempFileUri = FileProvider.getUriForFile(this, getPackageName() +
".provider", zipFile); ".provider", zipFile);
UploadsHelper.zip(this, filesListArray, tempFileUri); UploadsHelper.zip(this, filesListArray, tempFileUri);
} }
try { try {
new MultipartUploadRequest(view.getContext(), uploadIndexUrl) UploadNotificationConfig uploadNotificationConfig = new UploadNotificationConfig();
.setUtf8Charset() uploadNotificationConfig.setIconForAllStatuses(android.R.drawable.stat_sys_upload);
.addParameter("tp-dluploadtitle", uploadTitleText)
.addParameter("tp-dluploadcat", categorySelected) uploadNotificationConfig.getProgress().iconResourceID = android.R.drawable.stat_sys_upload;
.addParameter("tp-dluploadtext", uploadDescriptionText) uploadNotificationConfig.getCompleted().iconResourceID = android.R.drawable.stat_sys_upload_done;
.addFileToUpload(tempFileUri == null uploadNotificationConfig.getError().iconResourceID = android.R.drawable.stat_sys_upload_done;
? filesList.get(0).getFileUri().toString() uploadNotificationConfig.getError().iconColorResourceID = R.color.error_red;
: tempFileUri.toString()
, "tp-dluploadfile") new MultipartUploadRequest(view.getContext(), uploadIndexUrl)
.addParameter("tp_dluploadicon", fileIcon) .setUtf8Charset()
.addParameter("tp-uploaduser", uploaderProfileIndex) .setNotificationConfig(uploadNotificationConfig)
.setNotificationConfig(new UploadNotificationConfig()) .addParameter("tp-dluploadtitle", uploadTitleText)
.setMaxRetries(2) .addParameter("tp-dluploadcat", categorySelected)
.setDelegate(new UploadStatusDelegate() { .addParameter("tp-dluploadtext", uploadDescriptionText[0])
@Override .addFileToUpload(tempFileUri == null
public void onProgress(Context context, UploadInfo uploadInfo) { ? filesList.get(0).getFileUri().toString()
} : tempFileUri.toString()
, "tp-dluploadfile")
.addParameter("tp_dluploadicon", fileIcon)
.addParameter("tp-uploaduser", uploaderProfileIndex)
.setNotificationConfig(new UploadNotificationConfig())
.setMaxRetries(2)
.setDelegate(new UploadStatusDelegate() {
@Override
public void onProgress(Context context, UploadInfo uploadInfo) {
}
@Override @Override
public void onError(Context context, UploadInfo uploadInfo, ServerResponse serverResponse, public void onError(Context context, UploadInfo uploadInfo, ServerResponse serverResponse,
Exception exception) { Exception exception) {
Toast.makeText(context, "Upload failed", Toast.LENGTH_SHORT).show(); Toast.makeText(context, "Upload failed", Toast.LENGTH_SHORT).show();
UploadsHelper.deleteTempFiles(); UploadsHelper.deleteTempFiles();
progressBar.setVisibility(View.GONE); progressBar.setVisibility(View.GONE);
} }
@Override @Override
public void onCompleted(Context context, UploadInfo uploadInfo, ServerResponse serverResponse) { public void onCompleted(Context context, UploadInfo uploadInfo, ServerResponse serverResponse) {
Toast.makeText(context, "Upload completed successfully", Toast.LENGTH_SHORT).show(); Toast.makeText(context, "Upload completed successfully", Toast.LENGTH_SHORT).show();
UploadsHelper.deleteTempFiles(); UploadsHelper.deleteTempFiles();
BaseApplication.getInstance().logFirebaseAnalyticsEvent("file_upload", null); BaseApplication.getInstance().logFirebaseAnalyticsEvent("file_upload", null);
for (UploadFile file : filesList) { for (UploadFile file : filesList) {
if (file.isCameraPhoto()) { if (file.isCameraPhoto()) {
TakePhoto.galleryAddPic(context, file.getPhotoFile()); TakePhoto.galleryAddPic(context, file.getPhotoFile());
}
} }
uploadTitle.setText(null);
uploadFilename.setText(null);
hasModifiedFilename = false;
uploadDescription.setText(null);
filesList.clear();
filesListView.removeAllViews();
photoFileCreated = null;
progressBar.setVisibility(View.GONE);
} }
uploadTitle.setText(null); @Override
uploadFilename.setText(null); public void onCancelled(Context context, UploadInfo uploadInfo) {
hasModifiedFilename = false; Toast.makeText(context, "Upload canceled", Toast.LENGTH_SHORT).show();
uploadDescription.setText(null);
filesList.clear();
filesListView.removeAllViews();
photoFileCreated = null;
progressBar.setVisibility(View.GONE);
}
@Override UploadsHelper.deleteTempFiles();
public void onCancelled(Context context, UploadInfo uploadInfo) { progressBar.setVisibility(View.GONE);
Toast.makeText(context, "Upload canceled", Toast.LENGTH_SHORT).show(); }
})
.startUpload();
} catch (Exception exception) {
Timber.e(exception, "AndroidUploadService: %s", exception.getMessage());
progressBar.setVisibility(View.GONE);
}
dialog.dismiss();
});
UploadsHelper.deleteTempFiles(); builder.setNegativeButton("NOPE", (dialog, which) -> {
progressBar.setVisibility(View.GONE);
}
})
.startUpload();
} catch (Exception exception) {
Timber.e(exception, "AndroidUploadService: %s", exception.getMessage());
progressBar.setVisibility(View.GONE); progressBar.setVisibility(View.GONE);
} dialog.dismiss();
});
AlertDialog alert = builder.create();
alert.show();
}); });
if (uploadRootCategories.isEmpty()) { if (uploadRootCategories.isEmpty()) {

2
app/src/main/java/gr/thmmy/mthmmy/activities/upload/UploadsHelper.java

@ -83,7 +83,7 @@ class UploadsHelper {
@Nullable @Nullable
public static File createZipFile(Context context) { public static File createZipFile(Context context) {
// Create an image file name // Create a zip file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.FRANCE).format(new Date()); String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.FRANCE).format(new Date());
String zipFileName = "mThmmy_" + timeStamp + ".zip"; String zipFileName = "mThmmy_" + timeStamp + ".zip";

8
app/src/main/res/layout/activity_upload.xml

@ -28,7 +28,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_gravity="top|start" android:layout_gravity="top|start"
android:background="@color/background" android:background="@color/primary_light"
android:paddingEnd="@dimen/activity_horizontal_margin" android:paddingEnd="@dimen/activity_horizontal_margin"
android:paddingStart="@dimen/activity_horizontal_margin" android:paddingStart="@dimen/activity_horizontal_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior" app:layout_behavior="@string/appbar_scrolling_view_behavior"
@ -37,7 +37,7 @@
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@color/background" android:background="@color/primary_light"
android:focusableInTouchMode="true" android:focusableInTouchMode="true"
android:orientation="vertical"> android:orientation="vertical">
@ -46,7 +46,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="8dp" android:layout_marginTop="8dp"
android:background="@color/background" android:background="@color/primary_light"
android:orientation="vertical"> android:orientation="vertical">
<gr.thmmy.mthmmy.utils.AppCompatSpinnerWithoutDefault <gr.thmmy.mthmmy.utils.AppCompatSpinnerWithoutDefault
@ -100,7 +100,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginTop="12dp" android:layout_marginTop="12dp"
android:background="@color/background" android:theme="@style/LightBackgroundColoredButton"
app:srcCompat="@drawable/ic_info_outline_white_24dp" /> app:srcCompat="@drawable/ic_info_outline_white_24dp" />
</LinearLayout> </LinearLayout>

2
app/src/main/res/layout/activity_upload_fields_builder.xml

@ -27,7 +27,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_gravity="top|start" android:layout_gravity="top|start"
android:background="@color/background" android:background="@color/primary_light"
android:paddingEnd="@dimen/activity_horizontal_margin" android:paddingEnd="@dimen/activity_horizontal_margin"
android:paddingStart="@dimen/activity_horizontal_margin" android:paddingStart="@dimen/activity_horizontal_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior" app:layout_behavior="@string/appbar_scrolling_view_behavior"

1
app/src/main/res/layout/activity_upload_filename_info_popup.xml

@ -3,6 +3,7 @@
android:id="@+id/upload_filename_info_text" android:id="@+id/upload_filename_info_text"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@color/primary_light"
android:linksClickable="true" android:linksClickable="true"
android:padding="8dp" android:padding="8dp"
android:text="@string/upload_filename_info" android:text="@string/upload_filename_info"

2
app/src/main/res/values-v21/styles.xml

@ -33,6 +33,6 @@
</style> </style>
<style name="LightBackgroundColoredButton" parent="Widget.AppCompat.ImageButton"> <style name="LightBackgroundColoredButton" parent="Widget.AppCompat.ImageButton">
<item name="android:colorButtonNormal">@color/background</item> <item name="android:colorButtonNormal">@color/primary_light</item>
</style> </style>
</resources> </resources>

1
app/src/main/res/values/colors.xml

@ -18,6 +18,7 @@
<color name="divider">#8B8B8B</color> <color name="divider">#8B8B8B</color>
<color name="link_color">#FF9800</color> <color name="link_color">#FF9800</color>
<color name="mention_color">#FAA61A</color> <color name="mention_color">#FAA61A</color>
<color name="error_red">#890d0d</color>
<color name="white">#FFFFFF</color> <color name="white">#FFFFFF</color>
<color name="iron">#CCCCCC</color> <color name="iron">#CCCCCC</color>

2
app/src/main/res/values/styles.xml

@ -84,6 +84,6 @@
</style> </style>
<style name="LightBackgroundColoredButton" parent="Widget.AppCompat.ImageButton"> <style name="LightBackgroundColoredButton" parent="Widget.AppCompat.ImageButton">
<item name="colorButtonNormal">@color/background</item> <item name="colorButtonNormal">@color/primary_light</item>
</style> </style>
</resources> </resources>

Loading…
Cancel
Save