Skip to content

Instantly share code, notes, and snippets.

@gauravrai1
Created January 26, 2018 11:56
Show Gist options
  • Save gauravrai1/137328b341160f80e63ccd2e0ba63639 to your computer and use it in GitHub Desktop.
Save gauravrai1/137328b341160f80e63ccd2e0ba63639 to your computer and use it in GitHub Desktop.
Interface for fragment
package ctize.connectplus.com.communitize;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.NonNull;
import android.support.annotation.RequiresApi;
import android.support.design.internal.BottomNavigationMenuView;
import android.support.design.widget.BottomNavigationView;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.NavigationView;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.util.ArrayMap;
import android.support.v4.view.GravityCompat;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.DisplayMetrics;
import android.util.Log;
import android.util.TypedValue;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupMenu;
import android.widget.Toast;
import com.google.android.gms.appinvite.AppInviteInvitation;
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.ServerValue;
import com.google.firebase.database.ValueEventListener;
import com.miguelcatalan.materialsearchview.MaterialSearchView;
import java.util.HashMap;
import ctize.connectplus.com.communitize.model.model.Community;
import ctize.connectplus.com.communitize.model.model.Post;
import io.codetail.animation.SupportAnimator;
import io.codetail.animation.ViewAnimationUtils;
public class Home extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
public static final int REQUEST_INVITE = 95;
private static final String TAG = Home.class.getSimpleName();
public ImageView send;
public boolean postpermission = false;
MaterialSearchView searchView;
FloatingActionButton fab;
LinearLayout mRevealView;
LinearLayout ask_a_question,requirement,offering,event,announcement,poll,postoptions;
EditText postscreen;
Uri deepLink;
private FirebaseAuth auth;
private FirebaseUser user;
private DatabaseReference mUserRef;
private String admin, community, communityId, communityUrl,type="Default";
private Boolean admincheck = false;
private boolean hidden = true;
private update_post listener;
private ArrayMap<Integer, String> communityKeys;
public FloatingActionButton getFab() {
return fab;
}
listener = (UpdatesFragment) getFragmentManager().findFragmentById(R.id.fragement_updates); //Here is listnere attcahed with fragment and thisis where th NullPointer error is pointed.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
auth = FirebaseAuth.getInstance();
mRevealView = findViewById(R.id.reveal_items);
mRevealView.setVisibility(View.GONE);
create_post_options();
final BottomNavigationView bottomNavigationView = findViewById(R.id.navigation);
BottomNavigationMenuView menuView = (BottomNavigationMenuView)
bottomNavigationView.getChildAt(0);
for (int i = 0; i < menuView.getChildCount(); i++) {
final View iconView =
menuView.getChildAt(i).findViewById(android.support.design.R.id.icon);
final ViewGroup.LayoutParams layoutParams =
iconView.getLayoutParams();
final DisplayMetrics displayMetrics =
getResources().getDisplayMetrics();
layoutParams.height = (int)
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 18,
displayMetrics);
layoutParams.width = (int)
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 18,
displayMetrics);
iconView.setLayoutParams(layoutParams);
}
final ViewPager viewPager = findViewById(R.id.view_pager);
FragmentPagerAdapter pagerAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public int getCount() {
return 4;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new UpdatesFragment();
case 1:
return new ForumsFragment();
case 2:
return new ChatsFragment();
case 3:
return new NotificationsFragment();
}
return null;
}
};
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener()
{
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
switch (position) {
case 0:
fab.hide();
postoptions.setVisibility(View.VISIBLE);
mRevealView.setVisibility(View.GONE);
break;
case 1:
fab.hide();
postoptions.setVisibility(View.GONE);
mRevealView.setVisibility(View.GONE);
break;
case 2:
fab.hide();
postoptions.setVisibility(View.GONE);
mRevealView.setVisibility(View.GONE);
break;
case 3:
fab.hide();
postoptions.setVisibility(View.GONE);
mRevealView.setVisibility(View.GONE);
break;
default:
fab.hide();
postoptions.setVisibility(View.VISIBLE);
mRevealView.setVisibility(View.GONE);
break;
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
viewPager.setAdapter(pagerAdapter);
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.navigation_status:
viewPager.setCurrentItem(0);
break;
case R.id.navigation_forum:
viewPager.setCurrentItem(1);
break;
case R.id.navigation_message:
viewPager.setCurrentItem(2);
break;
case R.id.navigation_notification:
viewPager.setCurrentItem(3);
break;
}
return false;
}
});
DrawerLayout drawer = findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView = findViewById(R.id.nav_view);
//for switching communit
Menu menu = navigationView.getMenu();
final MenuItem post_approval = menu.findItem(R.id.nav_post_approval);
final MenuItem shareLink = menu.findItem(R.id.share_link);
final MenuItem addMembers = menu.findItem(R.id.add_members);
// Post approval menu item
if (!admincheck) {
post_approval.setVisible(false); //non admin members
shareLink.setVisible(false);
addMembers.setVisible(false);
announcement.setVisibility(View.GONE);
event.setVisibility(View.GONE);
poll.setVisibility(View.GONE);
} else {
post_approval.setVisible(true);
shareLink.setVisible(true);
addMembers.setVisible(true);
//for admin
}
navigationView.setNavigationItemSelectedListener(this);
auth = FirebaseAuth.getInstance();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.home, menu);
MenuItem item = menu.findItem(R.id.action_search);
searchView.setMenuItem(item);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.bookmark) {
Intent i = new Intent(Home.this,Boolmarksv2.class);
startActivity(i);
return true;
}
if (id == R.id.forum) {
return true;
}
if (id == R.id.accout_setting) {
Intent i = new Intent(Home.this,AccountSetting.class);
startActivity(i);
return true;
}
if (id == R.id.Logout) {
mUserRef.child("online").setValue(ServerValue.TIMESTAMP);
auth.signOut();
user = FirebaseAuth.getInstance().getCurrentUser();
if (user == null) {
// user auth state is changed - user is null
// launch login activity
startActivity(new Intent(Home.this, Login.class));
finish();
}
return true;
}
return super.onOptionsItemSelected(item);
}
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.new_community) {
Intent intent = new Intent(Home.this, CreateCommunity.class);
startActivity(intent);
finish();
} else if (id == R.id.nav_profile) {
Intent i = new Intent(Home.this,UserDetails.class);
i.putExtra("type","0");
startActivity(i);
} else if (id == R.id.nav_bookmark) {
Intent i = new Intent(Home.this,Boolmarksv2.class);
startActivity(i);
} else if (id == R.id.nav_settings) {
Intent i = new Intent(Home.this,AccountSetting.class);
startActivity(i);
} else if (id == R.id.nav_post_approval) {
Intent i = new Intent(Home.this,Post_approval.class);
startActivity(i);
}
else if (id == R.id.share_link) {
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, getString(R.string.invitation_title).concat(community) + " on ConnectPlus" + "\n" +
"https://czj4d.app.goo.gl/?link=http://" + communityUrl + "/join/" + communityId +
"/&apn=ctize.connectplus.com.communitize");
sendIntent.setType("text/plain");
startActivity(Intent.createChooser(sendIntent, getResources().getText(R.string.share_link)).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
}
else if (id == R.id.add_members) {
try {
Intent intent = new AppInviteInvitation.IntentBuilder(getString(R.string.invitation_title).concat(community))
.setEmailSubject(getString(R.string.invitation_title).concat(community))
.setEmailHtmlContent("<html>" +
" <body>" +
" <img src='" + getString(R.string.invitation_custom_image) + "'/>" +
" <a href='" + deepLink + "'>Click here to install</a>" +
" </body>" +
" </html>")
.build();
startActivityForResult(intent, REQUEST_INVITE);
} catch (ActivityNotFoundException ac) {
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.setType("text/plain");
startActivity(sendIntent);
}
}
DrawerLayout drawer = findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d(TAG, "onActivityResult: requestCode=" + requestCode + ", resultCode=" + resultCode);
if (requestCode == REQUEST_INVITE) {
if (resultCode == RESULT_OK) {
// Get the invitation IDs of all sent messages
String[] ids = AppInviteInvitation.getInvitationIds(resultCode, data);
for (String id : ids) {
Log.d(TAG, "onActivityResult: sent invitation " + id);
}
}
else {
Log.d(TAG, "invite send failed or cancelled:" + requestCode + ",resultCode:" + resultCode );
}
}
}
public void print(String s) {
Toast.makeText(this,s,Toast.LENGTH_SHORT).show();
}
public void post_data(View view) {
String message = postscreen.getText().toString().trim();
if (type.equals("Default")) {
print("Choose a Post Type to continue");
} else if (message.isEmpty()) {
print("Type your Post to continue");
} else {
permissionCheck();
DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference(communityId);
if (postpermission) {
mDatabase = mDatabase.child("temp_connectplus_posts");
} else {
mDatabase = mDatabase.child("connectplus_posts");
}
String key = mDatabase.push().getKey();
long timeStamp = System.currentTimeMillis();
Post post = new Post(timeStamp, auth.getUid().toString(),"0",type,message,"0",0,0,0,null);
mDatabase.child(key).setValue(post);
print("Posted Successfully");
postscreen.setText("");
postscreen.setCursorVisible(false);
postscreen.setHint("Start typing..");
type = "Default";
InputMethodManager im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
im.hideSoftInputFromWindow(postscreen.getWindowToken(), 0);
listener.update_it(); //Listner is called here.
}
}
public void post_option(View view) {
int cx = (mRevealView.getLeft() + mRevealView.getRight());
int cy = mRevealView.getTop();
int radius = Math.max(mRevealView.getWidth(), mRevealView.getHeight());
//Below Android LOLIPOP Version
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
SupportAnimator animator =
ViewAnimationUtils.createCircularReveal(mRevealView, cx, cy, 0, radius);
animator.setInterpolator(new AccelerateDecelerateInterpolator());
animator.setDuration(700);
SupportAnimator animator_reverse = animator.reverse();
if (hidden) {
mRevealView.setVisibility(View.VISIBLE);
animator.addListener(new SupportAnimator.AnimatorListener() {
@Override
public void onAnimationStart() {
}
@Override
public void onAnimationEnd() {
postscreen.setHint("Choose a category");
}
@Override
public void onAnimationCancel() {
}
@Override
public void onAnimationRepeat() {
}
});
hidden = false;
animator.start();
} else {
animator_reverse.addListener(new SupportAnimator.AnimatorListener() {
@Override
public void onAnimationStart() {
}
@Override
public void onAnimationEnd() {
mRevealView.setVisibility(View.INVISIBLE);
hidden = true;
postscreen.setHint("Start typing");
}
@Override
public void onAnimationCancel() {
}
@Override
public void onAnimationRepeat() {
}
});
animator_reverse.start();
}
}
// Android LOLIPOP And ABOVE Version
else {
if (hidden) {
Animator anim = android.view.ViewAnimationUtils.
createCircularReveal(mRevealView, cx, cy, 0, radius);
mRevealView.setVisibility(View.VISIBLE);
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
postscreen.setHint("Choose a category");
// Do something after 5s = 5000ms
}
}, 400);
anim.start();
hidden = false;
} else {
Animator anim = android.view.ViewAnimationUtils.
createCircularReveal(mRevealView, cx, cy, radius, 0);
anim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
mRevealView.setVisibility(View.INVISIBLE);
hidden = true;
}
});
anim.start();
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
postscreen.setHint("Start typing");
}
}, 400);
}
}
}
private void hideRevealView() {
if (mRevealView.getVisibility() == View.VISIBLE) {
mRevealView.setVisibility(View.GONE);
hidden = true;
}
}
private void create_post_options() {
if (!communityId.equals(auth.getUid())) { //for non admin members
ask_a_question.setOnClickListener(new View.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public void onClick(View v) {
postscreen.setFocusableInTouchMode(true);
postscreen.setEnabled(true);
postscreen.setFocusable(true);
postscreen.setHint("Ask your question");
postscreen.setCursorVisible(true);
postscreen.setShowSoftInputOnFocus(true);
postscreen.requestFocus();
postscreen.setSelection(0);
type = "Question";
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(postscreen, InputMethodManager.SHOW_IMPLICIT);
hideRevealView();
/* Intent i = new Intent(Home.this,Create_post.class);
i.putExtra("type",3);
startActivity(i);*/
}
});
offering.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
postscreen.setFocusableInTouchMode(true);
postscreen.setEnabled(true);
postscreen.setFocusable(true);
postscreen.setHint("Enter your offering");
postscreen.setCursorVisible(true);
postscreen.requestFocus();
postscreen.setSelection(0);
type = "Offerings";
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(postscreen, InputMethodManager.SHOW_IMPLICIT);
hideRevealView();
/* Intent i = new Intent(Home.this,Create_post.class);
i.putExtra("type",2);
startActivity(i);*/
}
});
requirement.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
postscreen.setFocusableInTouchMode(true);
postscreen.setEnabled(true);
postscreen.setFocusable(true);
postscreen.setHint("Enter your requirement");
postscreen.setCursorVisible(true);
postscreen.requestFocus();
postscreen.setSelection(0);
type = "Requirement";
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(postscreen, InputMethodManager.SHOW_IMPLICIT);
hideRevealView();
/* Intent i = new Intent(Home.this,Create_post.class);
i.putExtra("type",1);
startActivity(i);*/
}
});
announcement.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
postscreen.setFocusableInTouchMode(true);
postscreen.setEnabled(true);
postscreen.setFocusable(true);
postscreen.setHint("Enter your announcement");
postscreen.setCursorVisible(true);
postscreen.requestFocus();
postscreen.setSelection(0);
type = "Announcement";
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(postscreen, InputMethodManager.SHOW_IMPLICIT);
hideRevealView();
/* Intent i = new Intent(Home.this,Create_post.class);
i.putExtra("type",5);
startActivity(i);*/
}
});
}
}
public void setListener(update_post listener) { // Listner for update_post Interface
this.listener = listener ;
}
public interface update_post {
void update_it(); //the function which connects with the fragment
}
private void permissionCheck() {
DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("communities").child(communityId).child("postPermission");
reference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.getValue() != null) {
Boolean check = (Boolean) dataSnapshot.getValue();
postpermission = check;
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
package ctize.connectplus.com.communitize;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.Toast;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import java.util.Calendar;
import ctize.connectplus.com.communitize.model.model.Post;
/**
* A simple {@link Fragment} subclass.
*/
public class UpdatesFragment extends Fragment implements Home.update_post {
FirebaseRecyclerAdapter<Post, PostAdapterViewHolder> adapter;
SwipeRefreshLayout mSwipeRefreshLayout;
RecyclerView recyclerView;
LinearLayoutManager layoutManager;
LinearLayout mRevealView;
DatabaseReference databaseReference;
View view;
FirebaseAuth auth = FirebaseAuth.getInstance();
String admin,CommunityId;
public UpdatesFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
view = inflater.inflate(R.layout.fragment_updates, container, false);
layoutManager = new LinearLayoutManager(view.getContext());
layoutManager.setReverseLayout(false);
layoutManager.setStackFromEnd(true);
recyclerView = view.findViewById(R.id.rv_post_list);
SharedPreferencesUtils sharedPreferencesUtils = new SharedPreferencesUtils();
CommunityId = SharedPreferencesUtils.getCommunityId(getContext());
admin = SharedPreferencesUtils.getCurrentAdmin(getContext());
databaseReference = FirebaseDatabase.getInstance().getReference().child(CommunityId).child("connectplus_posts");
mSwipeRefreshLayout = view.findViewById(R.id.swip);
loaddata();
mSwipeRefreshLayout.setOnRefreshListener(
new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
mSwipeRefreshLayout.setRefreshing(false);
adapter.cleanup();
adapter.notifyDataSetChanged();
recyclerView.removeAllViews();
loaddata();
}
}
);
return view;
}
public void print(String s) {
Toast.makeText(getActivity(),s,Toast.LENGTH_SHORT).show();
}
private void loaddata() {
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(layoutManager);
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, -30);
adapter = new FirebaseRecyclerAdapter<Post, PostAdapterViewHolder>(Post.class, R.layout.post_list_item, PostAdapterViewHolder.class, databaseReference.orderByChild("timestamp").startAt(calendar.getTimeInMillis()).endAt(System.currentTimeMillis())) {
public void populateViewHolder(final PostAdapterViewHolder postAdapterViewHolder, final Post post, final int position) {
final String key = this.getRef(position).getKey();
postAdapterViewHolder.setKey(key);
postAdapterViewHolder.setContext(getActivity().getApplicationContext());
postAdapterViewHolder.setCommunityId(CommunityId);
postAdapterViewHolder.setDescription(post.getText());
postAdapterViewHolder.setUser(post.getCreator());
postAdapterViewHolder.setTime(post.getTimestamp());
postAdapterViewHolder.setImage(post.getImageUrl());
postAdapterViewHolder.setType(post.getType());
postAdapterViewHolder.postdata(key,CommunityId);
postAdapterViewHolder.setLike(post.getLikesCount());
postAdapterViewHolder.setBookmark();
postAdapterViewHolder.time.setVisibility(View.INVISIBLE);
postAdapterViewHolder.activitybar.setVisibility(View.GONE);
}
};
recyclerView.setAdapter(adapter);
}
@Override
public void update_it() {
adapter.notifyDataSetChanged(); //Here the adapter gets updated.
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment