diff --git a/.gitignore b/.gitignore new file mode 100755 index 0000000..a4c7838 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +*.iml +.gradle +/local.properties +/.idea/workspace.xml +/.idea/libraries +.DS_Store +/build +/captures +.externalNativeBuild diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..96cc43e --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml new file mode 100644 index 0000000..e7bedf3 --- /dev/null +++ b/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..97626ba --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..0e23f8e --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,19 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..7158618 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1.8 + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..f5e9010 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..7f68460 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/app/.gitignore b/app/.gitignore new file mode 100755 index 0000000..3543521 --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/app/build.gradle b/app/build.gradle new file mode 100755 index 0000000..0e9fedc --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,49 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 24 + buildToolsVersion "24.0.2" + defaultConfig { + applicationId "com.demo.mdb.mdbsocials" + minSdkVersion 14 + targetSdkVersion 24 + versionCode 1 + versionName "1.0" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + compile fileTree(dir: 'libs', include: ['*.jar']) + androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { + exclude group: 'com.android.support', module: 'support-annotations' + }) + compile 'com.android.support:appcompat-v7:24.2.1' + compile 'com.android.support:design:24.2.1' + + compile 'com.google.firebase:firebase-core:9.6.1' + compile 'com.google.firebase:firebase-database:9.6.1' + compile 'com.google.firebase:firebase-storage:9.6.1' + compile 'com.google.firebase:firebase-crash:9.6.1' + compile 'com.google.firebase:firebase-auth:9.6.1' + compile 'com.google.firebase:firebase-messaging:9.6.1' + compile 'com.google.firebase:firebase-config:9.6.1' + compile 'com.google.firebase:firebase-invites:9.6.1' + compile 'com.google.firebase:firebase-ads:9.6.1' + compile 'com.google.android.gms:play-services-appindexing:9.6.1' + compile 'com.android.support:palette-v7:24.1.1' + + testCompile 'junit:junit:4.12' + compile 'com.android.support:recyclerview-v7:+' + compile 'com.android.support:cardview-v7:24.2.1' + compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha8' + compile 'com.android.support:support-v4:24.2.1' +} + +apply plugin: 'com.google.gms.google-services' \ No newline at end of file diff --git a/app/google-services.json b/app/google-services.json new file mode 100755 index 0000000..ff262c2 --- /dev/null +++ b/app/google-services.json @@ -0,0 +1,42 @@ +{ + "project_info": { + "project_number": "882125936106", + "firebase_url": "https://mdb-socials-6fb87.firebaseio.com", + "project_id": "mdb-socials-6fb87", + "storage_bucket": "mdb-socials-6fb87.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:882125936106:android:47eb6aeddd7fdcb6", + "android_client_info": { + "package_name": "com.demo.mdb.mdbsocials" + } + }, + "oauth_client": [ + { + "client_id": "882125936106-iqjuv6q1busn0q6hvouo3e2lc2ohugpr.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyADpDTbITXvyqtc-qO8nhUDRWZNHMPSyAA" + } + ], + "services": { + "analytics_service": { + "status": 1 + }, + "appinvite_service": { + "status": 1, + "other_platform_oauth_client": [] + }, + "ads_service": { + "status": 2 + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100755 index 0000000..329de9f --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in C:\Users\reddy\AppData\Local\Android\sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/app/src/androidTest/java/com/demo/mdb/mdbsocials/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/demo/mdb/mdbsocials/ExampleInstrumentedTest.java new file mode 100755 index 0000000..cde459b --- /dev/null +++ b/app/src/androidTest/java/com/demo/mdb/mdbsocials/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.demo.mdb.mdbsocials; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumentation test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() throws Exception { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("com.demo.mdb.mdbsocials", appContext.getPackageName()); + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100755 index 0000000..e9f4ae3 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/demo/mdb/mdbsocials/DetailActivity.java b/app/src/main/java/com/demo/mdb/mdbsocials/DetailActivity.java new file mode 100755 index 0000000..7545cc0 --- /dev/null +++ b/app/src/main/java/com/demo/mdb/mdbsocials/DetailActivity.java @@ -0,0 +1,154 @@ +package com.demo.mdb.mdbsocials; + +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.net.Uri; +import android.os.AsyncTask; +import android.provider.ContactsContract; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.support.v7.graphics.Palette; +import android.util.Log; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.google.android.gms.tasks.OnSuccessListener; +import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.database.DataSnapshot; +import com.google.firebase.database.DatabaseError; +import com.google.firebase.database.ValueEventListener; +import com.google.firebase.storage.FirebaseStorage; +import com.google.firebase.storage.StorageReference; + +import org.w3c.dom.Text; + +import java.io.IOException; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.ArrayList; +import java.util.HashMap; + +public class DetailActivity extends AppCompatActivity { + ImageView eventImageView; + TextView eventTitleTextView; + TextView eventUserTextView; + TextView eventDescriptionTextView; + Button eventInterestedButton; + CheckBox interestedCheckBox; + FirebaseAuth mAuth; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_detail); + + eventImageView = (ImageView) findViewById(R.id.eventImageView); + eventTitleTextView = (TextView) findViewById(R.id.eventTitleTextView); + eventUserTextView = (TextView) findViewById(R.id.eventUserTextView); + eventDescriptionTextView = (TextView) findViewById(R.id.eventDescriptionTextView); + eventInterestedButton = (Button) findViewById(R.id.eventInterestedButton); + interestedCheckBox = (CheckBox) findViewById(R.id.interestedCheckBox); + + Intent intent = getIntent(); + String title = intent.getStringExtra("title"); + final String user = intent.getStringExtra("user"); + String description = intent.getStringExtra("description"); + final ArrayList interestedPeople = intent.getStringArrayListExtra("interestedPeople"); + + eventTitleTextView.setText(title); + eventUserTextView.setText("Created by " + user); + eventDescriptionTextView.setText("Description: " + description); + + if (interestedPeople != null) { + eventInterestedButton.setText(interestedPeople.size() + " People Interested"); + } + + StorageReference ref = FirebaseStorage.getInstance().getReferenceFromUrl("gs://mdb-socials-6fb87.appspot.com"); + StorageReference eventRef = ref.child(title); + eventRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener() { + @Override + public void onSuccess(final Uri uri) { + AsyncTask asyncTask = new AsyncTask() { + @Override + protected Bitmap doInBackground(Void... params) { + return getBitmapFromURL(uri.toString()); + } + + public Bitmap getBitmapFromURL(String src) { + try { + URL url = new URL(src); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setDoInput(true); + connection.connect(); + InputStream input = connection.getInputStream(); + Bitmap myBitmap = BitmapFactory.decodeStream(input); + return myBitmap; + } catch (IOException e) { + // Log exception + return null; + } + } + + @Override + protected void onPostExecute(Bitmap result) { + eventImageView.setImageBitmap(result); + final LinearLayout linlay = (LinearLayout)findViewById(R.id.activity_detail); + Palette.from(result).generate(new Palette.PaletteAsyncListener() { + public void onGenerated(Palette p) { + Palette.Swatch vibSwatch = p.getVibrantSwatch(); + if (vibSwatch != null) { + linlay.setBackgroundColor(vibSwatch.getRgb()); + } + } + }); + } + }.execute(); + } + }); + + eventInterestedButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(interestedCheckBox.isChecked()) { + Intent intent = new Intent(DetailActivity.this, InterestedActivity.class); + //intent.putStringArrayListExtra("users", ); + startActivity(intent); + } + } + }); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.logout, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + mAuth = FirebaseAuth.getInstance(); + + switch (item.getItemId()) { + case R.id.action_logout: + mAuth.getInstance().signOut(); + Intent intent = new Intent(DetailActivity.this, MainActivity.class); + startActivity(intent); + return true; + + default: + return super.onOptionsItemSelected(item); + + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/demo/mdb/mdbsocials/EventList.java b/app/src/main/java/com/demo/mdb/mdbsocials/EventList.java new file mode 100755 index 0000000..f1aab89 --- /dev/null +++ b/app/src/main/java/com/demo/mdb/mdbsocials/EventList.java @@ -0,0 +1,49 @@ +package com.demo.mdb.mdbsocials; + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.util.Base64; + +import java.io.IOException; +import java.util.ArrayList; + +/** + * Created by reddy on 10/12/2016. + */ + +public class EventList { + public ArrayList eventArrayList; + + public EventList() { + this.eventArrayList = new ArrayList<>(); + } + + public ArrayList getArrayList() { + return eventArrayList; + } + + public static class Event { + String email; + String name; + String pictureURL; + String description; + String date; + Bitmap picture; + ArrayList interestedPeople; + + public Event(String email, String name, String pictureURL, String description, String date, + ArrayList interestedPeople) { + this.email = email; + this.name = name; + this.pictureURL = pictureURL; + this.description = description; + this.date = date; + this.interestedPeople = interestedPeople; + } + + public static Bitmap decodeFromFirebase(String image) throws IOException { + byte[] decodedByteArray = android.util.Base64.decode(image, Base64.DEFAULT); + return BitmapFactory.decodeByteArray(decodedByteArray, 0, decodedByteArray.length); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/demo/mdb/mdbsocials/FeedActivity.java b/app/src/main/java/com/demo/mdb/mdbsocials/FeedActivity.java new file mode 100755 index 0000000..8d61dbd --- /dev/null +++ b/app/src/main/java/com/demo/mdb/mdbsocials/FeedActivity.java @@ -0,0 +1,117 @@ +package com.demo.mdb.mdbsocials; + +import android.content.Intent; +import android.support.design.widget.FloatingActionButton; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.util.Log; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.Toast; + +import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.database.DataSnapshot; +import com.google.firebase.database.DatabaseError; +import com.google.firebase.database.DatabaseReference; +import com.google.firebase.database.FirebaseDatabase; +import com.google.firebase.database.ValueEventListener; + +import java.util.ArrayList; +import java.util.HashMap; + +public class FeedActivity extends AppCompatActivity { + FloatingActionButton fab; + RecyclerView recyclerView; + ListViewAdapter listViewAdapter; + DatabaseReference ref; + EventList eventList; + ArrayList eventArrayList; + FirebaseAuth mAuth; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_feed); + + ref = FirebaseDatabase.getInstance().getReference(); + eventList = new EventList(); + eventArrayList = eventList.getArrayList(); + + recyclerView = (RecyclerView) findViewById(R.id.recyclerView); + recyclerView.setLayoutManager(new LinearLayoutManager(this)); + listViewAdapter = new ListViewAdapter(getApplicationContext(), eventArrayList); + recyclerView.setAdapter(listViewAdapter); + + ValueEventListener eventListener = new ValueEventListener() { + @Override + public void onDataChange(DataSnapshot dataSnapshot) { + eventArrayList = new ArrayList<>(); + for (DataSnapshot eventSnapshot: dataSnapshot.getChildren()) { + HashMap map = (HashMap) eventSnapshot.getValue(); + String email = (String) map.get("user"); + String name = (String) map.get("name"); + String pictureURL = (String) map.get("pictureURL"); + String description = (String) map.get("description"); + String date = (String) map.get("date"); + ArrayList interestedPeople = (ArrayList) map.get("interestedPeople"); + EventList.Event event = new EventList.Event(email, name, pictureURL, description, date, interestedPeople); + //Log.d("SOS", email + name + pictureURL + description + date + interestedPeople); + eventArrayList.add(0, event); + } + listViewAdapter.eventArrayList = eventArrayList; + listViewAdapter.notifyItemInserted(0); + recyclerView.setAdapter(listViewAdapter); + } + + @Override + public void onCancelled(DatabaseError databaseError) {} + }; + + ref.child("Events").addValueEventListener(eventListener); + + fab = (FloatingActionButton) findViewById(R.id.fab); + fab.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent intent = new Intent(FeedActivity.this, NewSocial.class); + startActivity(intent); + } + }); + } + + @Override + public void onBackPressed() { + Intent a = new Intent(Intent.ACTION_MAIN); + a.addCategory(Intent.CATEGORY_HOME); + a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + startActivity(a); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.logout, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + mAuth = FirebaseAuth.getInstance(); + + switch (item.getItemId()) { + case R.id.action_logout: + mAuth.getInstance().signOut(); + Intent intent = new Intent(FeedActivity.this, MainActivity.class); + startActivity(intent); + return true; + + default: + return super.onOptionsItemSelected(item); + + } + } +} diff --git a/app/src/main/java/com/demo/mdb/mdbsocials/InterestedActivity.java b/app/src/main/java/com/demo/mdb/mdbsocials/InterestedActivity.java new file mode 100755 index 0000000..eb6d641 --- /dev/null +++ b/app/src/main/java/com/demo/mdb/mdbsocials/InterestedActivity.java @@ -0,0 +1,65 @@ +package com.demo.mdb.mdbsocials; + +import android.content.Intent; +import android.support.design.widget.FloatingActionButton; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.Toast; + +import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.database.DatabaseReference; +import com.google.firebase.database.FirebaseDatabase; + +import java.util.ArrayList; + +public class InterestedActivity extends AppCompatActivity { + ArrayList userArrayList; + RecyclerView recyclerView; + InterestedViewAdapter interestedViewAdapter; + DatabaseReference ref; + FirebaseAuth mAuth; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_interested); + + Intent intent = getIntent(); + userArrayList = intent.getStringArrayListExtra("users"); + + recyclerView = (RecyclerView) findViewById(R.id.recyclerView); + recyclerView.setLayoutManager(new LinearLayoutManager(this)); + interestedViewAdapter = new InterestedViewAdapter(getApplicationContext(), userArrayList); + recyclerView.setAdapter(interestedViewAdapter); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.logout, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + mAuth = FirebaseAuth.getInstance(); + + switch (item.getItemId()) { + case R.id.action_logout: + mAuth.getInstance().signOut(); + Intent intent = new Intent(InterestedActivity.this, MainActivity.class); + startActivity(intent); + return true; + + default: + return super.onOptionsItemSelected(item); + + } + } +} diff --git a/app/src/main/java/com/demo/mdb/mdbsocials/InterestedViewAdapter.java b/app/src/main/java/com/demo/mdb/mdbsocials/InterestedViewAdapter.java new file mode 100755 index 0000000..d1e8616 --- /dev/null +++ b/app/src/main/java/com/demo/mdb/mdbsocials/InterestedViewAdapter.java @@ -0,0 +1,54 @@ +package com.demo.mdb.mdbsocials; + +import android.content.Context; +import android.content.Intent; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import java.util.ArrayList; + +/** + * Created by reddy on 10/4/2016. + */ + +public class InterestedViewAdapter extends RecyclerView.Adapter { + + private Context context; + public ArrayList userArrayList; + + public InterestedViewAdapter(Context context, ArrayList userArrayList) { + this.context = context; + this.userArrayList = userArrayList; + } + + @Override + public CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.interested_view, parent, false); + return new CustomViewHolder(view); + } + + @Override + public void onBindViewHolder(CustomViewHolder holder, int position) { + String user = userArrayList.get(position); + holder.interestedUserTextView.setText(user); + } + + @Override + public int getItemCount() { + return userArrayList.size(); + } + + class CustomViewHolder extends RecyclerView.ViewHolder { + TextView interestedUserTextView; + + public CustomViewHolder(View view) { + super(view); + this.interestedUserTextView = (TextView) view.findViewById(R.id.interestedUserTextView); + } + } +} + diff --git a/app/src/main/java/com/demo/mdb/mdbsocials/ListViewAdapter.java b/app/src/main/java/com/demo/mdb/mdbsocials/ListViewAdapter.java new file mode 100755 index 0000000..d179e9b --- /dev/null +++ b/app/src/main/java/com/demo/mdb/mdbsocials/ListViewAdapter.java @@ -0,0 +1,103 @@ +package com.demo.mdb.mdbsocials; + +import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.AsyncTask; +import android.os.Bundle; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import java.io.IOException; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.ArrayList; + +/** + * Created by reddy on 10/4/2016. + */ + +public class ListViewAdapter extends RecyclerView.Adapter { + + public Context context; + public ArrayList eventArrayList; + + public ListViewAdapter(Context context, ArrayList eventArrayList) { + this.context = context; + this.eventArrayList = eventArrayList; + } + + @Override + public CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_view, parent, false); + return new CustomViewHolder(view); + } + + @Override + public void onBindViewHolder(CustomViewHolder holder, int position) { + EventList.Event event = eventArrayList.get(position); + + try { + Bitmap imageBitmap = EventList.Event.decodeFromFirebase(event.pictureURL); + holder.eventImageView.setImageBitmap(imageBitmap); + } catch (IOException e) { + e.printStackTrace(); + } + + if (event.interestedPeople != null) { + holder.eventInterestedTextView.setText(event.interestedPeople.size() + " people interested"); + } + holder.eventTitleTextView.setText(event.name); + holder.eventUserTextView.setText("Created by " + event.email); + } + + @Override + public int getItemCount() { + if (eventArrayList != null) { + return eventArrayList.size(); + } + else { + return 0; + } + } + + class CustomViewHolder extends RecyclerView.ViewHolder { + ImageView eventImageView; + TextView eventTitleTextView; + TextView eventUserTextView; + TextView eventInterestedTextView; + + public CustomViewHolder(View view) { + super(view); + this.eventImageView = (ImageView) view.findViewById(R.id.eventImageView); + this.eventTitleTextView = (TextView) view.findViewById(R.id.eventTitleTextView); + this.eventUserTextView = (TextView) view.findViewById(R.id.eventUserTextView); + this.eventInterestedTextView = (TextView) view.findViewById(R.id.eventInterestedTextView); + view.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + EventList.Event event = eventArrayList.get(getAdapterPosition()); + Intent intent = new Intent(v.getContext(), DetailActivity.class); + intent.putExtra("title", event.name); + intent.putExtra("user", event.email); + intent.putExtra("description", event.description); + intent.putStringArrayListExtra("interestedPeople", event.interestedPeople); + + eventImageView.buildDrawingCache(); + Bitmap image= eventImageView.getDrawingCache(); + Bundle extras = new Bundle(); + extras.putParcelable("imagebitmap", image); + intent.putExtras(extras); + + v.getContext().startActivity(intent); + } + }); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/demo/mdb/mdbsocials/MainActivity.java b/app/src/main/java/com/demo/mdb/mdbsocials/MainActivity.java new file mode 100755 index 0000000..f7f7fef --- /dev/null +++ b/app/src/main/java/com/demo/mdb/mdbsocials/MainActivity.java @@ -0,0 +1,100 @@ +package com.demo.mdb.mdbsocials; + +import android.content.Intent; +import android.support.annotation.NonNull; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.Toast; + +import com.google.android.gms.tasks.OnCompleteListener; +import com.google.android.gms.tasks.Task; +import com.google.firebase.auth.AuthResult; +import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.auth.FirebaseUser; +import com.google.firebase.database.DataSnapshot; +import com.google.firebase.database.DatabaseError; +import com.google.firebase.database.DatabaseReference; +import com.google.firebase.database.FirebaseDatabase; +import com.google.firebase.database.GenericTypeIndicator; +import com.google.firebase.database.ValueEventListener; + +import java.util.ArrayList; + +import static android.R.attr.onClick; + +public class MainActivity extends AppCompatActivity { + EditText email; + EditText password; + Button logIn; + Button signUp; + FirebaseAuth mAuth; + FirebaseAuth.AuthStateListener mAuthListener; + DatabaseReference ref; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + + email = (EditText) findViewById(R.id.email); + password = (EditText) findViewById(R.id.password); + logIn = (Button) findViewById(R.id.log_in_button); + signUp = (Button) findViewById(R.id.sign_up_button); + mAuth = FirebaseAuth.getInstance(); + ref = FirebaseDatabase.getInstance().getReference(); + + mAuthListener = new FirebaseAuth.AuthStateListener() { + @Override + public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { + FirebaseUser user = firebaseAuth.getCurrentUser(); + if (user != null) { + // User is signed in + Intent intent = new Intent(MainActivity.this, FeedActivity.class); + startActivity(intent); + } + } + }; + + logIn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String userEmail = email.getText().toString(); + String userPassword = password.getText().toString(); + mAuth.signInWithEmailAndPassword(userEmail, userPassword) + .addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (!task.isSuccessful()) { + Toast.makeText(MainActivity.this, "Authentication failed", Toast.LENGTH_SHORT).show(); + } + } + }); + } + }); + + signUp.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(MainActivity.this, SignUpActivity.class); + startActivity(intent); + } + }); + } + + @Override + public void onStart() { + super.onStart(); + mAuth.addAuthStateListener(mAuthListener); + } + + @Override + public void onStop() { + super.onStop(); + if (mAuthListener != null) { + mAuth.removeAuthStateListener(mAuthListener); + } + } +} diff --git a/app/src/main/java/com/demo/mdb/mdbsocials/NewSocial.java b/app/src/main/java/com/demo/mdb/mdbsocials/NewSocial.java new file mode 100755 index 0000000..9412967 --- /dev/null +++ b/app/src/main/java/com/demo/mdb/mdbsocials/NewSocial.java @@ -0,0 +1,130 @@ +package com.demo.mdb.mdbsocials; + +import android.app.Dialog; +import android.app.DialogFragment; +import android.app.Fragment; +import android.content.DialogInterface; +import android.content.Intent; +import android.database.Cursor; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.media.Image; +import android.net.Uri; +import android.provider.MediaStore; +import android.support.v7.app.AlertDialog; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.util.Base64; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.TextView; +import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.auth.FirebaseUser; +import com.google.firebase.database.DataSnapshot; +import com.google.firebase.database.DatabaseError; +import com.google.firebase.database.DatabaseReference; +import com.google.firebase.database.FirebaseDatabase; +import com.google.firebase.database.ValueEventListener; +import com.google.firebase.storage.FirebaseStorage; +import com.google.firebase.storage.StorageReference; +import com.google.firebase.storage.UploadTask; + +import java.io.ByteArrayOutputStream; +import java.io.FileNotFoundException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +public class NewSocial extends AppCompatActivity { + ImageView eventImg; + EditText nameEditText; + EditText desEditText; + EditText dateEditText; + String picURL; + DatabaseReference ref; + FirebaseAuth mAuth; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_new_social); + + nameEditText = (EditText)findViewById(R.id.eventName); + eventImg = (ImageView)findViewById(R.id.eventImg); + desEditText = (EditText)findViewById(R.id.des); + dateEditText = (EditText)findViewById(R.id.date); + + eventImg.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent pickPhoto = new Intent(Intent.ACTION_PICK); + pickPhoto.setType("image/*"); + startActivityForResult(pickPhoto , 1); + } + }); + + Button done = (Button)findViewById(R.id.done); + done.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + ref = FirebaseDatabase.getInstance().getReference(); + mAuth = FirebaseAuth.getInstance(); + + String email = mAuth.getCurrentUser().getEmail(); + String eventName = nameEditText.getText().toString(); + String description = desEditText.getText().toString(); + String eventDate = dateEditText.getText().toString(); + ArrayList interestedPeople = new ArrayList<>(); + + Map event = new HashMap(); + event.put("user", email); + event.put("name", eventName); + event.put("pictureURL", picURL); + event.put("description", description); + event.put("date", eventDate); + event.put("interestedPeople", interestedPeople); + ref.child("Events").push().setValue(event); + + eventImg.setDrawingCacheEnabled(true); + eventImg.buildDrawingCache(); + Bitmap image = eventImg.getDrawingCache(); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + image.compress(Bitmap.CompressFormat.JPEG, 100, baos); + byte[] data = baos.toByteArray(); + StorageReference ref = FirebaseStorage.getInstance().getReferenceFromUrl("gs://mdb-socials-6fb87.appspot.com"); + StorageReference eventRef = ref.child(eventName); + UploadTask uploadTask = eventRef.putBytes(data); + + Intent intent = new Intent(NewSocial.this, FeedActivity.class); + startActivity(intent); + } + }); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { + super.onActivityResult(requestCode, resultCode, imageReturnedIntent); + switch(requestCode) { + case 1: + if (resultCode == RESULT_OK) { + Uri selectedImage = imageReturnedIntent.getData(); + InputStream imageStream = null; + try { + imageStream = getContentResolver().openInputStream(selectedImage); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + Bitmap myImg = BitmapFactory.decodeStream(imageStream); + eventImg.setImageBitmap(myImg); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + myImg.compress(Bitmap.CompressFormat.PNG, 100, baos); + picURL = Base64.encodeToString(baos.toByteArray(), Base64.DEFAULT); + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/demo/mdb/mdbsocials/SignUpActivity.java b/app/src/main/java/com/demo/mdb/mdbsocials/SignUpActivity.java new file mode 100755 index 0000000..618ae26 --- /dev/null +++ b/app/src/main/java/com/demo/mdb/mdbsocials/SignUpActivity.java @@ -0,0 +1,91 @@ +package com.demo.mdb.mdbsocials; + +import android.content.Intent; +import android.support.annotation.NonNull; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.Toast; + +import com.google.android.gms.tasks.OnCompleteListener; +import com.google.android.gms.tasks.Task; +import com.google.firebase.auth.AuthResult; +import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.auth.FirebaseUser; +import com.google.firebase.auth.UserProfileChangeRequest; +import com.google.firebase.database.DatabaseReference; +import com.google.firebase.database.FirebaseDatabase; + +import java.util.ArrayList; + +import static com.demo.mdb.mdbsocials.R.id.email; + +public class SignUpActivity extends AppCompatActivity { + EditText email; + EditText password; + Button signUp; + FirebaseAuth mAuth; + FirebaseAuth.AuthStateListener mAuthListener; + DatabaseReference ref; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_sign_up); + + email = (EditText) findViewById(R.id.email); + password = (EditText) findViewById(R.id.password); + signUp = (Button) findViewById(R.id.sign_up_button); + mAuth = FirebaseAuth.getInstance(); + ref = FirebaseDatabase.getInstance().getReference(); + + mAuthListener = new FirebaseAuth.AuthStateListener() { + @Override + public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { + FirebaseUser user = firebaseAuth.getCurrentUser(); + if (user != null) { + // User is signed in + String userEmail = user.getEmail(); + String uid = user.getUid(); + ref.child("Users").child(uid).child("email").setValue(userEmail); + Intent intent = new Intent(SignUpActivity.this, FeedActivity.class); + startActivity(intent); + } + } + }; + + signUp.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String userEmail = email.getText().toString(); + String userPassword = password.getText().toString(); + mAuth.createUserWithEmailAndPassword(userEmail, userPassword) + .addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (!task.isSuccessful()) { + Toast.makeText(SignUpActivity.this, "Authentication failed", Toast.LENGTH_SHORT).show(); + } + } + }); + } + }); + } + + @Override + public void onStart() { + super.onStart(); + mAuth.addAuthStateListener(mAuthListener); + } + + @Override + public void onStop() { + super.onStop(); + if (mAuthListener != null) { + mAuth.removeAuthStateListener(mAuthListener); + } + } +} diff --git a/app/src/main/java/com/demo/mdb/mdbsocials/SplashActivity.java b/app/src/main/java/com/demo/mdb/mdbsocials/SplashActivity.java new file mode 100755 index 0000000..1cb72e0 --- /dev/null +++ b/app/src/main/java/com/demo/mdb/mdbsocials/SplashActivity.java @@ -0,0 +1,17 @@ +package com.demo.mdb.mdbsocials; + +import android.content.Intent; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; + +public class SplashActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + Intent intent = new Intent(this, MainActivity.class); + startActivity(intent); + finish(); + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_add_white_24dp.xml b/app/src/main/res/drawable/ic_add_white_24dp.xml new file mode 100755 index 0000000..0258249 --- /dev/null +++ b/app/src/main/res/drawable/ic_add_white_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/mdb_logo.jpg b/app/src/main/res/drawable/mdb_logo.jpg new file mode 100755 index 0000000..b010e9e Binary files /dev/null and b/app/src/main/res/drawable/mdb_logo.jpg differ diff --git a/app/src/main/res/drawable/mdb_logo_no_background.png b/app/src/main/res/drawable/mdb_logo_no_background.png new file mode 100755 index 0000000..566ae01 Binary files /dev/null and b/app/src/main/res/drawable/mdb_logo_no_background.png differ diff --git a/app/src/main/res/drawable/splash_screen.xml b/app/src/main/res/drawable/splash_screen.xml new file mode 100755 index 0000000..572f68c --- /dev/null +++ b/app/src/main/res/drawable/splash_screen.xml @@ -0,0 +1,13 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_detail.xml b/app/src/main/res/layout/activity_detail.xml new file mode 100755 index 0000000..ef7cd1e --- /dev/null +++ b/app/src/main/res/layout/activity_detail.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + +