fork download
  1. /**
  2.  * Copyright Google Inc. All Rights Reserved.
  3.  * <p/>
  4.  * Licensed under the Apache License, Version 2.0 (the "License");
  5.  * you may not use this file except in compliance with the License.
  6.  * You may obtain a copy of the License at
  7.  * <p/>
  8.  * http://w...content-available-to-author-only...e.org/licenses/LICENSE-2.0
  9.  * <p/>
  10.  * Unless required by applicable law or agreed to in writing, software
  11.  * distributed under the License is distributed on an "AS IS" BASIS,
  12.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13.  * See the License for the specific language governing permissions and
  14.  * limitations under the License.
  15.  */
  16. package com.google.firebase.udacity.friendlychat;
  17.  
  18. import android.content.Intent;
  19. import android.os.Bundle;
  20. import android.support.annotation.NonNull;
  21. import android.support.annotation.Nullable;
  22. import android.support.v7.app.AppCompatActivity;
  23. import android.text.Editable;
  24. import android.text.InputFilter;
  25. import android.text.TextWatcher;
  26. import android.view.Menu;
  27. import android.view.MenuInflater;
  28. import android.view.MenuItem;
  29. import android.view.View;
  30. import android.widget.Button;
  31. import android.widget.EditText;
  32. import android.widget.ImageButton;
  33. import android.widget.ListView;
  34. import android.widget.ProgressBar;
  35. import android.widget.Toast;
  36.  
  37. import com.firebase.ui.auth.AuthUI;
  38. import com.google.firebase.auth.FirebaseAuth;
  39. import com.google.firebase.auth.FirebaseUser;
  40. import com.google.firebase.database.ChildEventListener;
  41. import com.google.firebase.database.DataSnapshot;
  42. import com.google.firebase.database.DatabaseError;
  43. import com.google.firebase.database.FirebaseDatabase;
  44. import com.google.firebase.database.DatabaseReference;
  45.  
  46. import java.util.ArrayList;
  47. import java.util.Arrays;
  48. import java.util.List;
  49.  
  50. public class MainActivity extends AppCompatActivity {
  51.  
  52. private static final String TAG = "MainActivity";
  53.  
  54. public static final String ANONYMOUS = "anonymous";
  55. public static final int DEFAULT_MSG_LENGTH_LIMIT = 1000;
  56. public static final int RC_SIGN_IN = 1;
  57.  
  58. private ListView mMessageListView;
  59. private MessageAdapter mMessageAdapter;
  60. private ProgressBar mProgressBar;
  61. private ImageButton mPhotoPickerButton;
  62. private EditText mMessageEditText;
  63. private Button mSendButton;
  64.  
  65. private String mUsername;
  66.  
  67. // Firebase instance variables
  68. private FirebaseDatabase mFirebaseDatabase;
  69. private DatabaseReference mMessagesDatabaseReference;
  70. private ChildEventListener mChildEventListener;
  71. private FirebaseAuth mFirebaseAuth;
  72. private FirebaseAuth.AuthStateListener mAuthStateListener;
  73.  
  74.  
  75. @Override
  76. protected void onCreate(Bundle savedInstanceState) {
  77. super.onCreate(savedInstanceState);
  78. setContentView(R.layout.activity_main);
  79.  
  80. mUsername = ANONYMOUS;
  81.  
  82. // Initialize Firebase components. Added manually
  83. mFirebaseDatabase = FirebaseDatabase.getInstance();
  84. mFirebaseAuth = FirebaseAuth.getInstance();
  85.  
  86. mMessagesDatabaseReference = mFirebaseDatabase.getReference().child("messages");
  87.  
  88. // Initialize references to views
  89. mProgressBar = (ProgressBar) findViewById(R.id.progressBar);
  90. mMessageListView = (ListView) findViewById(R.id.messageListView);
  91. mPhotoPickerButton = (ImageButton) findViewById(R.id.photoPickerButton);
  92. mMessageEditText = (EditText) findViewById(R.id.messageEditText);
  93. mSendButton = (Button) findViewById(R.id.sendButton);
  94.  
  95. // Initialize message ListView and its adapter
  96. List<FriendlyMessage> friendlyMessages = new ArrayList<>();
  97. mMessageAdapter = new MessageAdapter(this, R.layout.item_message, friendlyMessages);
  98. mMessageListView.setAdapter(mMessageAdapter);
  99.  
  100. // Initialize progress bar
  101. mProgressBar.setVisibility(ProgressBar.INVISIBLE);
  102.  
  103. // ImagePickerButton shows an image picker to upload a image for a message
  104. mPhotoPickerButton.setOnClickListener(new View.OnClickListener() {
  105. @Override
  106. public void onClick(View view) {
  107. // TODO: Fire an intent to show an image picker
  108. }
  109. });
  110.  
  111. // Enable Send button when there's text to send
  112. mMessageEditText.addTextChangedListener(new TextWatcher() {
  113. @Override
  114. public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
  115. }
  116.  
  117. @Override
  118. public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
  119. if (charSequence.toString().trim().length() > 0) {
  120. mSendButton.setEnabled(true);
  121. } else {
  122. mSendButton.setEnabled(false);
  123. }
  124. }
  125.  
  126. @Override
  127. public void afterTextChanged(Editable editable) {
  128. }
  129. });
  130. mMessageEditText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(DEFAULT_MSG_LENGTH_LIMIT)});
  131.  
  132. // Send button sends a message and clears the EditText
  133. // Added manually
  134. mSendButton.setOnClickListener(new View.OnClickListener() {
  135. @Override
  136. public void onClick(View view){
  137. // TODO: Send messages on click
  138.  
  139. FriendlyMessage friendlyMessage = new FriendlyMessage(mMessageEditText.getText().toString(), mUsername, null);
  140. mMessagesDatabaseReference.push().setValue(friendlyMessage);
  141.  
  142. // Clear input box
  143. mMessageEditText.setText("");
  144. }
  145. });
  146. /*mSendButton.setOnClickListener(new View.OnClickListener() {
  147.   @Override
  148.   public void onClick(View view) {
  149.   // TODO: Send messages on click
  150.  
  151.   // Clear input box
  152.   mMessageEditText.setText("");
  153.   }
  154.   });*/
  155.  
  156. mAuthStateListener = new FirebaseAuth.AuthStateListener() {
  157. @Override
  158. public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth){
  159. FirebaseUser user = firebaseAuth.getCurrentUser();
  160. if (user != null){
  161. // User is signed in
  162. //Toast.makeText(MainActivity.this, "You're now signed in. Welcome to FriendlyChat!", Toast.LENGTH_SHORT).show();
  163. onSignedInInitialize(user.getDisplayName());
  164. }else{
  165. // User is signed out
  166. onSignedOutCleanup();
  167. startActivityForResult(
  168. AuthUI.getInstance()
  169. .createSignInIntentBuilder()
  170. .setIsSmartLockEnabled(false)
  171. .setAvailableProviders(Arrays.asList(
  172. new AuthUI.IdpConfig.GoogleBuilder().build(),
  173. new AuthUI.IdpConfig.EmailBuilder().build()))
  174. .build(),
  175. RC_SIGN_IN);
  176. }
  177. }
  178. };
  179. }
  180.  
  181. @Override
  182. public boolean onCreateOptionsMenu(Menu menu) {
  183. MenuInflater inflater = getMenuInflater();
  184. inflater.inflate(R.menu.main_menu, menu);
  185. return true;
  186. }
  187.  
  188. @Override
  189. public boolean onOptionsItemSelected(MenuItem item) {
  190. switch ( item.getItemId()){
  191. case R.id.sign_out_menu:
  192. // Sign out
  193. AuthUI.getInstance().signOut(this);
  194. return true;
  195.  
  196. default:
  197. return super.onOptionsItemSelected(item);
  198. }
  199. }
  200.  
  201. /*@Override
  202.   protected void onStop(){
  203.   super.onStop();
  204.   FirebaseAuth.getInstance().signOut();
  205.   }*/
  206.  
  207. @Override // Added manually.
  208. protected void onPause(){
  209. super.onPause();
  210.  
  211. if (mAuthStateListener != null) {
  212. mFirebaseAuth.removeAuthStateListener(mAuthStateListener);
  213. }
  214.  
  215. detachDatabaseReadListener();
  216. mMessageAdapter.clear();
  217. }
  218.  
  219. @Override // Added manually.
  220. public void onActivityResult(int requestCode, int resultCode, Intent data){
  221. super.onActivityResult(requestCode, resultCode, data);
  222.  
  223. if(requestCode == RC_SIGN_IN){
  224. if(resultCode == RESULT_OK) {
  225. Toast.makeText(this, "Signed in!", Toast.LENGTH_SHORT).show();
  226. }
  227. }else if(resultCode == RESULT_CANCELED){
  228. Toast.makeText(this, "Sign in canceled", Toast.LENGTH_SHORT).show();
  229. finish();
  230. }
  231.  
  232. Toast.makeText(this, String.valueOf(requestCode), Toast.LENGTH_SHORT).show();
  233. }
  234.  
  235. @Override // Added manually.
  236. protected void onResume() {
  237. super.onResume();
  238. mFirebaseAuth.addAuthStateListener(mAuthStateListener);
  239. }
  240.  
  241. private void onSignedInInitialize(String username){
  242. mUsername = username;
  243. attachDatabaseReadListener();
  244. }
  245.  
  246. private void onSignedOutCleanup(){
  247. mUsername = ANONYMOUS;
  248. mMessageAdapter.clear();
  249. detachDatabaseReadListener();
  250. }
  251.  
  252. private void attachDatabaseReadListener(){
  253. if( mChildEventListener == null ) {
  254. mChildEventListener = new ChildEventListener() {
  255. @Override
  256. public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
  257. FriendlyMessage friendlyMessage = dataSnapshot.getValue(FriendlyMessage.class);
  258. mMessageAdapter.add(friendlyMessage);
  259. }
  260.  
  261. @Override
  262. public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
  263.  
  264. }
  265.  
  266. @Override
  267. public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
  268.  
  269. }
  270.  
  271. @Override
  272. public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
  273.  
  274. }
  275.  
  276. @Override
  277. public void onCancelled(@NonNull DatabaseError databaseError) {
  278.  
  279. }
  280. };
  281. mMessagesDatabaseReference.addChildEventListener(mChildEventListener);
  282. }
  283. }
  284.  
  285. private void detachDatabaseReadListener(){
  286. if (mChildEventListener != null) {
  287. mMessagesDatabaseReference.removeEventListener(mChildEventListener);
  288. mChildEventListener = null;
  289. }
  290. }
  291. }
  292.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
Main.java:50: error: class MainActivity is public, should be declared in a file named MainActivity.java
public class MainActivity extends AppCompatActivity {
       ^
Main.java:18: error: package android.content does not exist
import android.content.Intent;
                      ^
Main.java:19: error: package android.os does not exist
import android.os.Bundle;
                 ^
Main.java:20: error: package android.support.annotation does not exist
import android.support.annotation.NonNull;
                                 ^
Main.java:21: error: package android.support.annotation does not exist
import android.support.annotation.Nullable;
                                 ^
Main.java:22: error: package android.support.v7.app does not exist
import android.support.v7.app.AppCompatActivity;
                             ^
Main.java:23: error: package android.text does not exist
import android.text.Editable;
                   ^
Main.java:24: error: package android.text does not exist
import android.text.InputFilter;
                   ^
Main.java:25: error: package android.text does not exist
import android.text.TextWatcher;
                   ^
Main.java:26: error: package android.view does not exist
import android.view.Menu;
                   ^
Main.java:27: error: package android.view does not exist
import android.view.MenuInflater;
                   ^
Main.java:28: error: package android.view does not exist
import android.view.MenuItem;
                   ^
Main.java:29: error: package android.view does not exist
import android.view.View;
                   ^
Main.java:30: error: package android.widget does not exist
import android.widget.Button;
                     ^
Main.java:31: error: package android.widget does not exist
import android.widget.EditText;
                     ^
Main.java:32: error: package android.widget does not exist
import android.widget.ImageButton;
                     ^
Main.java:33: error: package android.widget does not exist
import android.widget.ListView;
                     ^
Main.java:34: error: package android.widget does not exist
import android.widget.ProgressBar;
                     ^
Main.java:35: error: package android.widget does not exist
import android.widget.Toast;
                     ^
Main.java:37: error: package com.firebase.ui.auth does not exist
import com.firebase.ui.auth.AuthUI;
                           ^
Main.java:38: error: package com.google.firebase.auth does not exist
import com.google.firebase.auth.FirebaseAuth;
                               ^
Main.java:39: error: package com.google.firebase.auth does not exist
import com.google.firebase.auth.FirebaseUser;
                               ^
Main.java:40: error: package com.google.firebase.database does not exist
import com.google.firebase.database.ChildEventListener;
                                   ^
Main.java:41: error: package com.google.firebase.database does not exist
import com.google.firebase.database.DataSnapshot;
                                   ^
Main.java:42: error: package com.google.firebase.database does not exist
import com.google.firebase.database.DatabaseError;
                                   ^
Main.java:43: error: package com.google.firebase.database does not exist
import com.google.firebase.database.FirebaseDatabase;
                                   ^
Main.java:44: error: package com.google.firebase.database does not exist
import com.google.firebase.database.DatabaseReference;
                                   ^
Main.java:50: error: cannot find symbol
public class MainActivity extends AppCompatActivity {
                                  ^
  symbol: class AppCompatActivity
Main.java:58: error: cannot find symbol
    private ListView mMessageListView;
            ^
  symbol:   class ListView
  location: class MainActivity
Main.java:59: error: cannot find symbol
    private MessageAdapter mMessageAdapter;
            ^
  symbol:   class MessageAdapter
  location: class MainActivity
Main.java:60: error: cannot find symbol
    private ProgressBar mProgressBar;
            ^
  symbol:   class ProgressBar
  location: class MainActivity
Main.java:61: error: cannot find symbol
    private ImageButton mPhotoPickerButton;
            ^
  symbol:   class ImageButton
  location: class MainActivity
Main.java:62: error: cannot find symbol
    private EditText mMessageEditText;
            ^
  symbol:   class EditText
  location: class MainActivity
Main.java:63: error: cannot find symbol
    private Button mSendButton;
            ^
  symbol:   class Button
  location: class MainActivity
Main.java:68: error: cannot find symbol
    private FirebaseDatabase mFirebaseDatabase;
            ^
  symbol:   class FirebaseDatabase
  location: class MainActivity
Main.java:69: error: cannot find symbol
    private DatabaseReference mMessagesDatabaseReference;
            ^
  symbol:   class DatabaseReference
  location: class MainActivity
Main.java:70: error: cannot find symbol
    private ChildEventListener mChildEventListener;
            ^
  symbol:   class ChildEventListener
  location: class MainActivity
Main.java:71: error: cannot find symbol
    private FirebaseAuth mFirebaseAuth;
            ^
  symbol:   class FirebaseAuth
  location: class MainActivity
Main.java:72: error: package FirebaseAuth does not exist
    private FirebaseAuth.AuthStateListener mAuthStateListener;
                        ^
Main.java:76: error: cannot find symbol
    protected void onCreate(Bundle savedInstanceState) {
                            ^
  symbol:   class Bundle
  location: class MainActivity
Main.java:182: error: cannot find symbol
    public boolean onCreateOptionsMenu(Menu menu) {
                                       ^
  symbol:   class Menu
  location: class MainActivity
Main.java:189: error: cannot find symbol
    public boolean onOptionsItemSelected(MenuItem item) {
                                         ^
  symbol:   class MenuItem
  location: class MainActivity
Main.java:220: error: cannot find symbol
    public void onActivityResult(int requestCode, int resultCode, Intent data){
                                                                  ^
  symbol:   class Intent
  location: class MainActivity
Main.java:75: error: method does not override or implement a method from a supertype
    @Override
    ^
Main.java:77: error: cannot find symbol
        super.onCreate(savedInstanceState);
        ^
  symbol:   variable super
  location: class MainActivity
Main.java:78: error: package R does not exist
        setContentView(R.layout.activity_main);
                        ^
Main.java:83: error: cannot find symbol
        mFirebaseDatabase = FirebaseDatabase.getInstance();
                            ^
  symbol:   variable FirebaseDatabase
  location: class MainActivity
Main.java:84: error: cannot find symbol
        mFirebaseAuth = FirebaseAuth.getInstance();
                        ^
  symbol:   variable FirebaseAuth
  location: class MainActivity
Main.java:89: error: cannot find symbol
        mProgressBar = (ProgressBar) findViewById(R.id.progressBar);
                        ^
  symbol:   class ProgressBar
  location: class MainActivity
Main.java:89: error: package R does not exist
        mProgressBar = (ProgressBar) findViewById(R.id.progressBar);
                                                   ^
Main.java:90: error: cannot find symbol
        mMessageListView = (ListView) findViewById(R.id.messageListView);
                            ^
  symbol:   class ListView
  location: class MainActivity
Main.java:90: error: package R does not exist
        mMessageListView = (ListView) findViewById(R.id.messageListView);
                                                    ^
Main.java:91: error: cannot find symbol
        mPhotoPickerButton = (ImageButton) findViewById(R.id.photoPickerButton);
                              ^
  symbol:   class ImageButton
  location: class MainActivity
Main.java:91: error: package R does not exist
        mPhotoPickerButton = (ImageButton) findViewById(R.id.photoPickerButton);
                                                         ^
Main.java:92: error: cannot find symbol
        mMessageEditText = (EditText) findViewById(R.id.messageEditText);
                            ^
  symbol:   class EditText
  location: class MainActivity
Main.java:92: error: package R does not exist
        mMessageEditText = (EditText) findViewById(R.id.messageEditText);
                                                    ^
Main.java:93: error: cannot find symbol
        mSendButton = (Button) findViewById(R.id.sendButton);
                       ^
  symbol:   class Button
  location: class MainActivity
Main.java:93: error: package R does not exist
        mSendButton = (Button) findViewById(R.id.sendButton);
                                             ^
Main.java:96: error: cannot find symbol
        List<FriendlyMessage> friendlyMessages = new ArrayList<>();
             ^
  symbol:   class FriendlyMessage
  location: class MainActivity
Main.java:97: error: cannot find symbol
        mMessageAdapter = new MessageAdapter(this, R.layout.item_message, friendlyMessages);
                              ^
  symbol:   class MessageAdapter
  location: class MainActivity
Main.java:97: error: package R does not exist
        mMessageAdapter = new MessageAdapter(this, R.layout.item_message, friendlyMessages);
                                                    ^
Main.java:101: error: cannot find symbol
        mProgressBar.setVisibility(ProgressBar.INVISIBLE);
                                   ^
  symbol:   variable ProgressBar
  location: class MainActivity
Main.java:104: error: package View does not exist
        mPhotoPickerButton.setOnClickListener(new View.OnClickListener() {
                                                      ^
Main.java:112: error: cannot find symbol
        mMessageEditText.addTextChangedListener(new TextWatcher() {
                                                    ^
  symbol:   class TextWatcher
  location: class MainActivity
Main.java:130: error: cannot find symbol
        mMessageEditText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(DEFAULT_MSG_LENGTH_LIMIT)});
                                        ^
  symbol:   class InputFilter
  location: class MainActivity
Main.java:130: error: package InputFilter does not exist
        mMessageEditText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(DEFAULT_MSG_LENGTH_LIMIT)});
                                                                     ^
Main.java:134: error: package View does not exist
        mSendButton.setOnClickListener(new View.OnClickListener() {
                                               ^
Main.java:156: error: package FirebaseAuth does not exist
        mAuthStateListener = new FirebaseAuth.AuthStateListener() {
                                             ^
Main.java:181: error: method does not override or implement a method from a supertype
    @Override
    ^
Main.java:183: error: cannot find symbol
        MenuInflater inflater = getMenuInflater();
        ^
  symbol:   class MenuInflater
  location: class MainActivity
Main.java:183: error: cannot find symbol
        MenuInflater inflater = getMenuInflater();
                                ^
  symbol:   method getMenuInflater()
  location: class MainActivity
Main.java:184: error: package R does not exist
        inflater.inflate(R.menu.main_menu, menu);
                          ^
Main.java:188: error: method does not override or implement a method from a supertype
    @Override
    ^
Main.java:191: error: package R does not exist
            case R.id.sign_out_menu:
                  ^
Main.java:193: error: cannot find symbol
                AuthUI.getInstance().signOut(this);
                ^
  symbol:   variable AuthUI
  location: class MainActivity
Main.java:197: error: cannot find symbol
                return super.onOptionsItemSelected(item);
                       ^
  symbol:   variable super
  location: class MainActivity
Main.java:207: error: method does not override or implement a method from a supertype
    @Override  // Added manually.
    ^
Main.java:209: error: cannot find symbol
        super.onPause();
        ^
  symbol:   variable super
  location: class MainActivity
Main.java:219: error: method does not override or implement a method from a supertype
    @Override  // Added manually.
    ^
Main.java:221: error: cannot find symbol
        super.onActivityResult(requestCode, resultCode, data);
        ^
  symbol:   variable super
  location: class MainActivity
Main.java:224: error: cannot find symbol
            if(resultCode == RESULT_OK) {
                             ^
  symbol:   variable RESULT_OK
  location: class MainActivity
Main.java:225: error: cannot find symbol
                Toast.makeText(this, "Signed in!", Toast.LENGTH_SHORT).show();
                                                   ^
  symbol:   variable Toast
  location: class MainActivity
Main.java:225: error: cannot find symbol
                Toast.makeText(this, "Signed in!", Toast.LENGTH_SHORT).show();
                ^
  symbol:   variable Toast
  location: class MainActivity
Main.java:227: error: cannot find symbol
        }else if(resultCode == RESULT_CANCELED){
                               ^
  symbol:   variable RESULT_CANCELED
  location: class MainActivity
Main.java:228: error: cannot find symbol
            Toast.makeText(this, "Sign in canceled", Toast.LENGTH_SHORT).show();
                                                     ^
  symbol:   variable Toast
  location: class MainActivity
Main.java:228: error: cannot find symbol
            Toast.makeText(this, "Sign in canceled", Toast.LENGTH_SHORT).show();
            ^
  symbol:   variable Toast
  location: class MainActivity
Main.java:229: error: cannot find symbol
            finish();
            ^
  symbol:   method finish()
  location: class MainActivity
Main.java:232: error: cannot find symbol
        Toast.makeText(this, String.valueOf(requestCode), Toast.LENGTH_SHORT).show();
                                                          ^
  symbol:   variable Toast
  location: class MainActivity
Main.java:232: error: cannot find symbol
        Toast.makeText(this, String.valueOf(requestCode), Toast.LENGTH_SHORT).show();
        ^
  symbol:   variable Toast
  location: class MainActivity
Main.java:235: error: method does not override or implement a method from a supertype
    @Override  // Added manually.
    ^
Main.java:237: error: cannot find symbol
        super.onResume();
        ^
  symbol:   variable super
  location: class MainActivity
Main.java:254: error: cannot find symbol
            mChildEventListener = new ChildEventListener() {
                                      ^
  symbol:   class ChildEventListener
  location: class MainActivity
92 errors
stdout
Standard output is empty