Commit 6c4d043c authored by Varun Patil's avatar Varun Patil

Implement AddEvent using WebView

parent a5e845c3
...@@ -19,6 +19,7 @@ import android.view.Menu; ...@@ -19,6 +19,7 @@ import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
import android.webkit.WebChromeClient;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
......
...@@ -9,6 +9,7 @@ import app.insti.api.model.ImageUploadRequest; ...@@ -9,6 +9,7 @@ import app.insti.api.model.ImageUploadRequest;
import app.insti.api.model.ImageUploadResponse; import app.insti.api.model.ImageUploadResponse;
import app.insti.api.model.LoginResponse; import app.insti.api.model.LoginResponse;
import app.insti.api.model.NewsFeedResponse; import app.insti.api.model.NewsFeedResponse;
import app.insti.data.Event;
import app.insti.data.HostelMessMenu; import app.insti.data.HostelMessMenu;
import app.insti.data.NewsArticle; import app.insti.data.NewsArticle;
import app.insti.data.Notification; import app.insti.data.Notification;
...@@ -37,6 +38,9 @@ public interface RetrofitInterface { ...@@ -37,6 +38,9 @@ public interface RetrofitInterface {
@POST("events") @POST("events")
Call<EventCreateResponse> createEvent(@Header("Cookie") String sessionId, @Body EventCreateRequest eventCreateRequest); Call<EventCreateResponse> createEvent(@Header("Cookie") String sessionId, @Body EventCreateRequest eventCreateRequest);
@GET("events/{uuid}")
Call<Event> getEvent(@Header("Cookie") String sessionId, @Path("uuid") String uuid);
@GET("events") @GET("events")
Call<NewsFeedResponse> getNewsFeed(@Header("Cookie") String sessionId); Call<NewsFeedResponse> getNewsFeed(@Header("Cookie") String sessionId);
......
package app.insti.fragment; package app.insti.fragment;
import android.Manifest; import android.content.ActivityNotFoundException;
import android.app.DatePickerDialog;
import android.app.ProgressDialog;
import android.app.TimePickerDialog;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.provider.MediaStore; import android.support.v4.app.FragmentManager;
import android.support.v4.app.ActivityCompat; import android.support.v4.app.FragmentTransaction;
import android.support.v4.content.ContextCompat;
import android.support.v4.widget.ImageViewCompat;
import android.support.v7.widget.Toolbar;
import android.util.Base64;
import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Button; import android.webkit.CookieManager;
import android.widget.CheckBox; import android.webkit.CookieSyncManager;
import android.widget.DatePicker; import android.webkit.ValueCallback;
import android.widget.EditText; import android.webkit.WebChromeClient;
import android.widget.ImageButton; import android.webkit.WebSettings;
import android.widget.ImageView; import android.webkit.WebView;
import android.widget.RelativeLayout; import android.webkit.WebViewClient;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast; import android.widget.Toast;
import com.squareup.picasso.Picasso; import com.google.gson.Gson;
import java.io.ByteArrayOutputStream;
import java.sql.Timestamp;
import java.util.Arrays;
import java.util.Calendar;
import java.util.GregorianCalendar;
import butterknife.BindView;
import butterknife.ButterKnife;
import app.insti.Constants; import app.insti.Constants;
import app.insti.MainActivity;
import app.insti.R; import app.insti.R;
import app.insti.api.RetrofitInterface; import app.insti.api.RetrofitInterface;
import app.insti.api.ServiceGenerator; import app.insti.api.ServiceGenerator;
import app.insti.api.model.EventCreateRequest; import app.insti.data.Event;
import app.insti.api.model.EventCreateResponse;
import app.insti.api.model.ImageUploadRequest;
import app.insti.api.model.ImageUploadResponse;
import retrofit2.Call; import retrofit2.Call;
import retrofit2.Callback; import retrofit2.Callback;
import retrofit2.Response; import retrofit2.Response;
import static android.app.Activity.RESULT_OK;
import static app.insti.Constants.MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE;
import static app.insti.Constants.RESULT_LOAD_IMAGE;
public class AddEventFragment extends BaseFragment { public class AddEventFragment extends BaseFragment {
@BindView(R.id.button_createEvent) public ValueCallback<Uri[]> uploadMessage;
Button createEvent;
@BindView(R.id.tv_start)
TextView start;
@BindView(R.id.et_eventName)
EditText eventName;
@BindView(R.id.tv_end)
TextView end;
@BindView(R.id.et_venue)
EditText venue;
@BindView(R.id.et_eventDetails)
EditText details;
@BindView(R.id.iv_eventImage)
ImageView eventImage;
@BindView(R.id.ib_eventImage)
ImageButton imageButton;
Timestamp timestamp_start;
Timestamp timestamp_end;
@BindView(R.id.advanced_menu)
RelativeLayout advancedMenu;
@BindView(R.id.cb_public)
CheckBox cb_public;
@BindView(R.id.cb_permission)
CheckBox cb_permission;
@BindView(R.id.map_location)
EditText et_mapLocation;
@BindView(R.id.open)
ImageView open;
@BindView(R.id.close)
ImageView close;
ImageView eventPictureImageView;
int publicStatus;
View view;
String base64Image;
ProgressDialog progressDialog;
String TAG = "AddEventFragment";
public AddEventFragment() { public AddEventFragment() {
// Required empty public constructor // Required empty public constructor
} }
public static String convertImageToString(Bitmap imageBitmap) { @Override
ByteArrayOutputStream stream = new ByteArrayOutputStream(); public void onStart() {
if (imageBitmap != null) { super.onStart();
imageBitmap.compress(Bitmap.CompressFormat.JPEG, 60, stream);
byte[] byteArray = stream.toByteArray();
return Base64.encodeToString(byteArray, Base64.DEFAULT);
} else {
return null;
}
}
public static Timestamp makeTimestamp(int year, int month, int day, int hour, int minute) {
Calendar cal = new GregorianCalendar();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month);
cal.set(Calendar.DATE, day);
cal.set(Calendar.HOUR_OF_DAY, hour);
cal.set(Calendar.MINUTE, minute);
return new Timestamp(cal.getTimeInMillis());
} }
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
container.removeAllViews(); container.removeAllViews();
View view = inflater.inflate(R.layout.fragment_add_event, container, false);
view = inflater.inflate(R.layout.fragment_add_event, container, false); String host = "10.0.2.2:4200";
ButterKnife.bind(this, view);
Toolbar toolbar = getActivity().findViewById(R.id.toolbar);
toolbar.setTitle("Add Event");
eventPictureImageView = view.findViewById(R.id.ib_eventImage);
progressDialog = new ProgressDialog(getContext());
cb_permission.setVisibility(View.GONE);
cb_public.setVisibility(View.GONE);
et_mapLocation.setVisibility(View.GONE);
if (savedInstanceState == null) {
WebView webView = view.findViewById(R.id.add_event_webview);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setDisplayZoomControls(false);
webView.getSettings().setAllowFileAccess(true);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
close.setVisibility(View.GONE); webView.setWebChromeClient(new MyWebChromeClient());
open.setVisibility(View.VISIBLE); webView.setWebViewClient(new MyWebViewClient());
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final Calendar calendar = Calendar.getInstance(); CookieManager cookieManager = CookieManager.getInstance();
int mYear = calendar.get(Calendar.YEAR); String cookieString = ((MainActivity) getActivity()).getSessionIDHeader();
int mMonth = calendar.get(Calendar.MONTH); cookieManager.setCookie(host, cookieString);
int mDay = calendar.get(Calendar.DAY_OF_MONTH); CookieSyncManager.getInstance().sync();
final int mHour = calendar.get(Calendar.HOUR_OF_DAY); String url = "http://" + host + "/add-event?sandbox=true";
final int mMin = calendar.get(Calendar.MINUTE); if (getArguments().containsKey("id")) {
url = "http://" + host + "/edit-event/" + getArguments().getString("id") + "?sandbox=true";
DatePickerDialog datePickerDialog = new DatePickerDialog(getContext(), new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, final int year, final int month, final int dayOfMonth) {
TimePickerDialog timePickerDialog = new TimePickerDialog(getContext(), new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
timestamp_start = makeTimestamp(year, month, dayOfMonth, hourOfDay, minute);
if (timestamp_start.after(new Timestamp(Calendar.getInstance().getTimeInMillis()))) {
if (timestamp_end == null || timestamp_end.after(timestamp_start)) {
start.setText(dayOfMonth + "/" + month + "/" + year + " " + hourOfDay + ":" + minute);
enableEndDatePicker(year, month, dayOfMonth, hourOfDay, minute);
}
} else {
Toast.makeText(getContext(), "Start Time cannot be in the past", Toast.LENGTH_SHORT).show();
}
}
}, mHour, mMin, true);
timePickerDialog.show();
}
}, mYear, mMonth, mDay);
datePickerDialog.show();
} }
webView.loadUrl(url);
}); webView.setOnTouchListener(new View.OnTouchListener() {
float m_downX;
public boolean onTouch(View v, MotionEvent event) {
if (cb_permission.isChecked()) { if (event.getPointerCount() > 1) {
publicStatus = 1; //Multi touch detected
} else publicStatus = 0; return true;
}
advancedMenu.setOnClickListener(new View.OnClickListener() { switch (event.getAction()) {
@Override case MotionEvent.ACTION_DOWN: {
public void onClick(View v) { // save the x
if (cb_public.getVisibility() == View.VISIBLE) { m_downX = event.getX();
open.setVisibility(View.VISIBLE); break;
close.setVisibility(View.GONE);
cb_permission.setVisibility(View.GONE);
cb_public.setVisibility(View.GONE);
et_mapLocation.setVisibility(View.GONE);
} else {
close.setVisibility(View.VISIBLE);
open.setVisibility(View.GONE);
cb_permission.setVisibility(View.VISIBLE);
cb_public.setVisibility(View.VISIBLE);
et_mapLocation.setVisibility(View.VISIBLE);
} }
case MotionEvent.ACTION_MOVE:
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP: {
// set x so that it doesn't move
event.setLocation(m_downX, event.getY());
break;
} }
});
imageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (ContextCompat.checkSelfPermission(getContext(), Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
// Permission is not granted
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
return;
} }
Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); return false;
startActivityForResult(i, RESULT_LOAD_IMAGE);
} }
}); });
createEvent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
progressDialog.setIndeterminate(true);
progressDialog.setCancelable(false);
progressDialog.show();
sendImage();
} }
});
return view; return view;
} }
private void enableEndDatePicker(final int startYear, final int startMonth, final int startDayOfMonth, final int startHourOfDay, final int startMinute) { public class MyWebViewClient extends WebViewClient{
end.setEnabled(true);
end.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public boolean shouldOverrideUrlLoading(WebView view, String url) {
DatePickerDialog datePickerDialog = new DatePickerDialog(getContext(), new DatePickerDialog.OnDateSetListener() { if (url.contains("/event/")) {
url = url.substring(url.lastIndexOf("/") + 1);
@Override
public void onDateSet(DatePicker view, final int year, final int month, final int dayOfMonth) {
TimePickerDialog timePickerDialog = new TimePickerDialog(getContext(), new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
timestamp_end = makeTimestamp(year, month, dayOfMonth, hourOfDay, minute);
if (timestamp_end.after(timestamp_start))
end.setText(dayOfMonth + "/" + month + "/" + year + " " + hourOfDay + ":" + minute);
else {
Toast.makeText(getContext(), "End Time cannot be before Start Time", Toast.LENGTH_SHORT).show();
}
}
}, startHourOfDay, startMinute, true);
timePickerDialog.show();
}
}, startYear, startMonth, startDayOfMonth);
datePickerDialog.show();
}
});
}
private void sendImage() {
progressDialog.setMessage("Uploading Image");
ImageUploadRequest imageUploadRequest = new ImageUploadRequest(base64Image);
RetrofitInterface retrofitInterface = ServiceGenerator.createService(RetrofitInterface.class); RetrofitInterface retrofitInterface = ServiceGenerator.createService(RetrofitInterface.class);
retrofitInterface.uploadImage("sessionid=" + getArguments().getString(Constants.SESSION_ID), imageUploadRequest).enqueue(new Callback<ImageUploadResponse>() { retrofitInterface.getEvent(((MainActivity) getActivity()).getSessionIDHeader(), url).enqueue(new Callback<Event>() {
@Override @Override
public void onResponse(Call<ImageUploadResponse> call, Response<ImageUploadResponse> response) { public void onResponse(Call<Event> call, Response<Event> response) {
if (response.isSuccessful()) { if (response.isSuccessful()) {
ImageUploadResponse imageUploadResponse = response.body(); openEvent(response.body());
String imageURL = imageUploadResponse.getPictureURL();
addEvent(imageURL);
} }
} }
@Override @Override
public void onFailure(Call<ImageUploadResponse> call, Throwable t) { public void onFailure(Call<Event> call, Throwable t) { }
progressDialog.dismiss();
}
}); });
}
public void addEvent(String eventImageURL) { return true;
progressDialog.setMessage("Creating Event");
EventCreateRequest eventCreateRequest = new EventCreateRequest(eventName.getText().toString(), details.getText().toString(), eventImageURL, timestamp_start.toString(), timestamp_end.toString(), false, Arrays.asList(new String[]{venue.getText().toString()}), Arrays.asList(new String[]{"bde82d5e-f379-4b8a-ae38-a9f03e4f1c4a"}));
RetrofitInterface retrofitInterface = ServiceGenerator.createService(RetrofitInterface.class);
retrofitInterface.createEvent("sessionid=" + getArguments().getString(Constants.SESSION_ID), eventCreateRequest).enqueue(new Callback<EventCreateResponse>() {
@Override
public void onResponse(Call<EventCreateResponse> call, Response<EventCreateResponse> response) {
Toast.makeText(getContext(), "Event Created", Toast.LENGTH_SHORT).show();
progressDialog.dismiss();
}
@Override
public void onFailure(Call<EventCreateResponse> call, Throwable t) {
Toast.makeText(getContext(), "Event Creation Failed", Toast.LENGTH_SHORT).show();
progressDialog.dismiss();
} }
}); // return true; //Indicates WebView to NOT load the url;
} return false; //Allow WebView to load url
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
Uri selectedImage = data.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getActivity().getContentResolver().query(selectedImage, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
ImageViewCompat.setImageTintList(eventPictureImageView, null);
Picasso.get().load(selectedImage).into(eventPictureImageView);
base64Image = convertImageToString(getScaledBitmap(picturePath, 800, 800));
Log.d(TAG, "onActivityResult: " + base64Image);
} }
} }
private Bitmap getScaledBitmap(String picturePath, int width, int height) { public class MyWebChromeClient extends WebChromeClient {
BitmapFactory.Options sizeOptions = new BitmapFactory.Options(); /*@Override
sizeOptions.inJustDecodeBounds = true; public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
BitmapFactory.decodeFile(picturePath, sizeOptions); android.util.Log.wtf("cWebView", consoleMessage.message());
return true;
int inSampleSize = calculateInSampleSize(sizeOptions, width, height); }*/
sizeOptions.inJustDecodeBounds = false; public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
sizeOptions.inSampleSize = inSampleSize; // make sure there is no existing message
if (uploadMessage != null) {
return BitmapFactory.decodeFile(picturePath, sizeOptions); uploadMessage.onReceiveValue(null);
uploadMessage = null;
} }
private int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) { uploadMessage = filePathCallback;
// Raw height and width of image
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;
if (height > reqHeight || width > reqWidth) { Intent intent = fileChooserParams.createIntent();
try {
startActivityForResult(intent, 101);
} catch (ActivityNotFoundException e) {
uploadMessage = null;
Toast.makeText(getContext(), "Cannot open file chooser", Toast.LENGTH_LONG).show();
return false;
}
// Calculate ratios of height and width to requested height and return true;
// width }
final int heightRatio = Math.round((float) height / (float) reqHeight); }
final int widthRatio = Math.round((float) width / (float) reqWidth);
// Choose the smallest ratio as inSampleSize value, this will void openEvent(Event event) {
// guarantee String eventJson = new Gson().toJson(event);
// a final image with both dimensions larger than or equal to the Bundle bundle = getArguments();
// requested height and width. if (bundle == null)
inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio; bundle = new Bundle();
bundle.putString(Constants.EVENT_JSON, eventJson);
EventFragment eventFragment = new EventFragment();
eventFragment.setArguments(bundle);
FragmentManager manager = getActivity().getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left, R.anim.slide_in_right, R.anim.slide_out_right);
transaction.replace(R.id.framelayout_for_fragment, eventFragment, eventFragment.getTag());
transaction.addToBackStack(eventFragment.getTag()).commit();
} }
return inSampleSize; public void onActivityResult(int requestCode, int resultCode, Intent data){
if (requestCode == 101) {
if (uploadMessage == null) return;
uploadMessage.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(resultCode, data));
uploadMessage = null;
}
} }
} }
...@@ -75,11 +75,12 @@ public class FeedFragment extends BaseFragment { ...@@ -75,11 +75,12 @@ public class FeedFragment extends BaseFragment {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
AddEventFragment addEventFragment = new AddEventFragment(); AddEventFragment addEventFragment = new AddEventFragment();
addEventFragment.setArguments(getArguments()); Bundle bundle = new Bundle();
addEventFragment.setArguments(bundle);
FragmentTransaction ft = getChildFragmentManager().beginTransaction(); FragmentTransaction ft = getChildFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left, R.anim.slide_in_right, R.anim.slide_out_right); ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left, R.anim.slide_in_right, R.anim.slide_out_right);
ft.replace(R.id.relative_layout, addEventFragment); ft.replace(R.id.relative_layout, addEventFragment, addEventFragment.getTag());
ft.addToBackStack("addEvent"); ft.addToBackStack(addEventFragment.getTag());
ft.commit(); ft.commit();
} }
}); });
...@@ -89,10 +90,9 @@ public class FeedFragment extends BaseFragment { ...@@ -89,10 +90,9 @@ public class FeedFragment extends BaseFragment {
@Override @Override
public void onStart() { public void onStart() {
super.onStart(); super.onStart();
fab.setVisibility(View.VISIBLE);
if (((MainActivity) getActivity()).createEventAccess()) { if (((MainActivity) getActivity()).createEventAccess()) {
/* TODO: Uncomment the following line when Add Event is completed */ fab.setVisibility(View.VISIBLE);
// fab.setVisibility(View.VISIBLE);
} }
appDatabase = AppDatabase.getAppDatabase(getContext()); appDatabase = AppDatabase.getAppDatabase(getContext());
......
...@@ -5,183 +5,11 @@ ...@@ -5,183 +5,11 @@
android:orientation="vertical" android:orientation="vertical"
tools:context="app.insti.fragment.AddEventFragment"> tools:context="app.insti.fragment.AddEventFragment">
<ScrollView <WebView
android:id="@+id/add_event_webview"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="match_parent">
android:layout_weight="1">
<LinearLayout </WebView>
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="200dp">
<ImageView
android:id="@+id/iv_eventImage"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#EEEEEE" />
<ImageButton
android:id="@+id/ib_eventImage"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#EEEEEE"
android:src="@drawable/ic_input_add"
android:tint="@android:color/black" />
</RelativeLayout>
<EditText
android:id="@+id/et_eventName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
android:hint="Event Name"
android:padding="16dp"
android:paddingBottom="16dp"
android:textColorHint="#FFFFFF"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginLeft="15dp"
android:layout_marginRight="16dp"
android:layout_marginTop="10dp"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_start"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="?attr/editTextBackground"
android:gravity="bottom"
android:hint="From "
android:paddingRight="6dp"
android:paddingTop="8dp"
android:textSize="20sp" />
<View
android:layout_width="3dp"
android:layout_height="match_parent"
android:layout_marginBottom="5dp"
android:layout_marginTop="5dp"
android:background="@color/common_google_signin_btn_text_dark_disabled" />
<TextView
android:id="@+id/tv_end"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="?attr/editTextBackground"
android:enabled="false"
android:gravity="bottom"
android:hint="To "
android:paddingRight="6dp"
android:paddingTop="8dp"
android:textSize="20sp" />
</LinearLayout>
<EditText
android:id="@+id/et_venue"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginLeft="15dp"
android:layout_marginRight="16dp"
android:layout_marginTop="10dp"
android:hint="Venue"
android:paddingRight="6dp"
android:textSize="20sp" />
<EditText
android:id="@+id/et_eventDetails"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginLeft="15dp"
android:layout_marginRight="16dp"
android:layout_marginTop="8dp"
android:layout_weight="1"
android:gravity="top"
android:hint="Details"
android:paddingRight="6dp"
android:textSize="20sp" />
<RelativeLayout
android:id="@+id/advanced_menu"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="30dp"
android:paddingLeft="18dp"
android:paddingRight="16dp"
android:text="Advanced Options"
android:textSize="20sp" />
<ImageView
android:id="@+id/close"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_alignParentEnd="true"
android:src="@mipmap/advanced_menu_close" />
<ImageView
android:id="@+id/open"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_alignParentEnd="true"
android:src="@mipmap/advanced_menu_open" />
</RelativeLayout>
<CheckBox
android:id="@+id/cb_public"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="12dp"
android:text="Outsiders Allowed " />
<EditText
android:id="@+id/map_location"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="22dp"
android:layout_marginRight="12dp"
android:hint="Map Location" />
<CheckBox
android:id="@+id/cb_permission"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="12dp"
android:text="Request User Info" />
</LinearLayout>
</ScrollView>
<Button
android:id="@+id/button_createEvent"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_margin="8dp"
android:background="@drawable/round_text_box"
android:gravity="center"
android:text="Create" />
</LinearLayout> </LinearLayout>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment