Skip to content

Instantly share code, notes, and snippets.

@cliffgr
Created December 10, 2018 14:46
Show Gist options
  • Save cliffgr/b6e77701b3e5680c3e8f1b0422519353 to your computer and use it in GitHub Desktop.
Save cliffgr/b6e77701b3e5680c3e8f1b0422519353 to your computer and use it in GitHub Desktop.
package wizzo.mbc.net.activities;
import android.app.Activity;
import android.content.ContentProvider;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.media.ThumbnailUtils;
import android.media.session.MediaController;
import android.net.TrafficStats;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.ParcelFileDescriptor;
import android.provider.DocumentsContract;
import android.provider.MediaStore;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.util.Base64;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.ToggleButton;
import android.widget.VideoView;
import com.flurry.android.FlurryAgent;
import com.orhanobut.logger.Logger;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.entity.BufferedHttpEntity;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.ByteArrayBody;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.InputStreamBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.util.EntityUtils;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import mbc.analytics.sdk.agent.MbcAnalytics;
import me.gujun.android.taggroup.TagGroup;
import wizzo.mbc.net.Constants;
import wizzo.mbc.net.R;
import wizzo.mbc.net.WApplication;
import wizzo.mbc.net.fragments.UpdateMyProfileFragment;
import wizzo.mbc.net.utils.AppHelper;
import wizzo.mbc.net.utils.SessionManager;
public class VideoUploadActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener, View.OnClickListener {
String videoUrl;
VideoView videoView;
Spinner spinner;
TextView videoButton;
Uri uri;
FileInputStream anotFileInputStream;
FileDescriptor fd;
String[] bankNames = {"هجوم أو دفاع؟", "Test category QA video feature!@#$%", "بسيط ومدمن جدا", "PNB", "OBC"};
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_video_upload);
showToolbar();
TagGroup mTagGroup = (TagGroup) findViewById(R.id.tag_group);
spinner = findViewById(R.id.Spinner);
spinner.setOnItemSelectedListener(this);
ArrayAdapter aa = new ArrayAdapter(this, android.R.layout.simple_spinner_item, bankNames);
aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(aa);
videoView = findViewById(R.id.videoView);
videoButton = (TextView) findViewById(R.id.uploadVideo);
videoButton.setOnClickListener(this);
Intent intent = getIntent();
if (intent != null) {
videoUrl = intent.getStringExtra("videoUrl");
}
uri = Uri.parse(videoUrl);
if (uri.getAuthority() != null) {
Logger.d("Video url authority: " + uri.getAuthority());
}
final Uri uri = Uri.parse(videoUrl);
final Runnable timeoutCheck = new Runnable() {
public void run() {
ParcelFileDescriptor mInputPFD = null;
try {
mInputPFD = getContentResolver().openFileDescriptor(uri, "r");
fd = mInputPFD.getFileDescriptor();
anotFileInputStream = new FileInputStream(fd);
try {
Logger.d("Total file size to read (in bytes) : " + anotFileInputStream.available());
Thread updateThread = new Thread(new UpdateProfileTask());
updateThread.start();
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
Logger.e("Video File not found.");
return;
} finally {
if (mInputPFD != null) {
try {
mInputPFD.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
};
timeoutCheck.run();
videoView.setVideoURI(uri);
videoView.requestFocus();
videoView.start();
mTagGroup.setTags("android", "demo", "Hack");
}
private void showToolbar() {
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
try {
setSupportActionBar(toolbar);
} catch (NoClassDefFoundError e) {
Logger.d("Error initializing AppCompat Toolbar");
Logger.e(e.getCause(), e.getMessage());
AppHelper.showAlertDialog(this
, getString(R.string.errorAppCompatToolbarMessage)
, SignUpActivity.class);
}
getSupportActionBar().setTitle("");
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
;
@Override
public void onClick(View v) {
}
class UpdateProfileTask implements Runnable {
String mError;
int mTimeoutConnection = 15 * 1000;
int mTimeoutSocket = 15 * 1000;
int mStatusCode = 0;
private static final int THREAD_ID = 10000;
@Override
public void run() {
TrafficStats.setThreadStatsTag(THREAD_ID);
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, mTimeoutConnection);
HttpConnectionParams.setSoTimeout(httpParameters, mTimeoutSocket);
httpClient.setParams(httpParameters);
HttpPost postRequest = new HttpPost("https://competition.mbc.net/wizzo_videos/api/SubmitVideo?key=f6ad442c164c54486b83d5cf12b3cdf77291eb69");
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
builder.addPart("video", new InputStreamBody(anotFileInputStream,"test"));
builder.addBinaryBody("video", anotFileInputStream);
builder.addTextBody("secret", "7c35ff248907336322eee003f993905a6926dd45", ContentType.DEFAULT_BINARY);
builder.addTextBody("title", "xa");
builder.addTextBody("description", "xa");
builder.addTextBody("category_id", "5");
builder.addTextBody("wizzo_user_id", "12313121212");
builder.addTextBody("tagIds", "[4,5]");
HttpEntity entity = builder.build();
postRequest.setEntity(entity);
try {
HttpResponse httpResponse = httpClient.execute(postRequest);
HttpEntity entity2 = httpResponse.getEntity();
mStatusCode = httpResponse.getStatusLine().getStatusCode();
String json = EntityUtils.toString(entity2);
Logger.d("/api/profile response: " + json);
Header[] headers = httpResponse.getAllHeaders();
for (Header header : headers) {
System.out.println("Key : " + header.getName() + " ,Value : " + header.getValue());
}
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static String uploadFileToServer(FileInputStream fileInputStream, String targetUrl) {
String response = "error";
HttpURLConnection connection = null;
DataOutputStream outputStream = null;
String urlServer = targetUrl;
String lineEnd = "\r\n";
String twoHyphens = "--";
String boundary = "*****";
int bytesRead, bytesAvailable, bufferSize;
byte[] buffer;
int maxBufferSize = 1 * 1024;
try {
URL url = new URL(urlServer);
connection = (HttpURLConnection) url.openConnection();
// Allow Inputs & Outputs
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setUseCaches(false);
connection.setChunkedStreamingMode(1024);
// Enable POST method
connection.setRequestMethod("POST");
connection.setRequestProperty("Connection", "Keep-Alive");
connection.setRequestProperty("Content-Type",
"multipart/form-data; boundary=" + boundary);
outputStream = new DataOutputStream(connection.getOutputStream());
outputStream.writeBytes(twoHyphens + boundary + lineEnd);
String token = "anyvalye";
outputStream.writeBytes("Content-Disposition: form-data; name=\"Token\"" + lineEnd);
outputStream.writeBytes("Content-Type: text/plain;charset=UTF-8" + lineEnd);
outputStream.writeBytes("Content-Length: " + token.length() + lineEnd);
outputStream.writeBytes(lineEnd);
outputStream.writeBytes(token + lineEnd);
outputStream.writeBytes(twoHyphens + boundary + lineEnd);
String taskId = "anyvalue";
outputStream.writeBytes("Content-Disposition: form-data; name=\"TaskID\"" + lineEnd);
outputStream.writeBytes("Content-Type: text/plain;charset=UTF-8" + lineEnd);
outputStream.writeBytes("Content-Length: " + taskId.length() + lineEnd);
outputStream.writeBytes(lineEnd);
outputStream.writeBytes(taskId + lineEnd);
outputStream.writeBytes(twoHyphens + boundary + lineEnd);
String connstr = null;
connstr = "Content-Disposition: form-data; name=\"video\";filename=\""
+ "test" + "\"" + lineEnd;
outputStream.writeBytes(connstr);
outputStream.writeBytes(lineEnd);
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
buffer = new byte[bufferSize];
// Read file
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
System.out.println("Image length " + bytesAvailable + "");
try {
while (bytesRead > 0) {
try {
outputStream.write(buffer, 0, bufferSize);
} catch (OutOfMemoryError e) {
e.printStackTrace();
response = "outofmemoryerror";
return response;
}
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
}
} catch (Exception e) {
e.printStackTrace();
response = "error";
return response;
}
outputStream.writeBytes(lineEnd);
outputStream.writeBytes(twoHyphens + boundary + twoHyphens
+ lineEnd);
// Responses from the server (code and message)
int serverResponseCode = connection.getResponseCode();
String serverResponseMessage = connection.getResponseMessage();
System.out.println("Server Response Code " + " " + serverResponseCode);
System.out.println("Server Response Message " + serverResponseMessage);
if (serverResponseCode == 200) {
response = "true";
} else {
response = "false";
}
fileInputStream.close();
outputStream.flush();
connection.getInputStream();
//for android InputStream is = connection.getInputStream();
java.io.InputStream is = connection.getInputStream();
int ch;
StringBuffer b = new StringBuffer();
while ((ch = is.read()) != -1) {
b.append((char) ch);
}
String responseString = b.toString();
System.out.println("response string is" + responseString); //Here is the actual output
outputStream.close();
outputStream = null;
} catch (Exception ex) {
// Exception handling
response = "error";
System.out.println("Send file Exception" + ex.getMessage() + "");
ex.printStackTrace();
}
return response;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment