package com.goshenapps.clipboard; import android.app.Activity; import android.app.ActivityManager; import android.app.ProgressDialog; import android.app.VoiceInteractor; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.Signature; import android.content.res.Configuration; import android.graphics.Color; import android.net.Uri; import android.os.Handler; import android.preference.PreferenceManager; import android.support.annotation.NonNull; import android.support.design.widget.BottomSheetBehavior; import android.support.design.widget.BottomSheetDialogFragment; import android.support.design.widget.NavigationView; import android.support.transition.TransitionManager; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.DividerItemDecoration; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.util.Base64; import android.util.Log; import android.view.MenuItem; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import com.firebase.ui.auth.AuthUI; import com.firebase.ui.database.FirebaseRecyclerAdapter; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.Task; 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 com.google.i18n.phonenumbers.PhoneNumberMatch; import com.google.i18n.phonenumbers.PhoneNumberUtil; import com.goshenapps.clipboard.ActionPack.ShotTaker; import com.goshenapps.clipboard.BootCamp.Clipboard; import com.goshenapps.clipboard.BottomSheets.MyBottomSheetDialogFragment; import com.goshenapps.clipboard.Intro.Hello; import com.goshenapps.clipboard.LoginError.Errors; import com.goshenapps.clipboard.MFM.Fire; import com.goshenapps.clipboard.MFM.FireHolder; import com.goshenapps.clipboard.QRCodes.QRDialogFragment; import com.goshenapps.clipboard.Siri.SiriDialogFragment; import com.goshenapps.clipboard.Welcome.Kaboo; import com.squareup.picasso.Picasso; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.regex.Matcher; import java.util.regex.Pattern; import de.hdodenhof.circleimageview.CircleImageView; import static com.goshenapps.clipboard.R.id.clipz; import static com.goshenapps.clipboard.R.id.email; import static com.goshenapps.clipboard.R.id.positron; public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener{ DividerItemDecoration mDividerItemDecoration; FirebaseAuth auth; TextView username,emails; CircleImageView circleImageView; Boolean isShowing = false; private int expandedPosition = -1; RecyclerView recyclerView; FirebaseRecyclerAdapter adapter; RecyclerView.AdapterDataObserver mObserver; private DatabaseReference mDatabase; ProgressDialog progressDialog; private static final long DRAWER_CLOSE_DELAY_MS = 250; private static final String NAV_ITEM_ID = "navItemId"; private final Handler mDrawerActionHandler = new Handler(); private DrawerLayout mDrawerLayout; private ActionBarDrawerToggle mDrawerToggle; private int mNavItemId; NavigationView navigationView; boolean isCall = false; boolean isEmail = false; boolean isWeb = false; String callValue; String emailValue; String webValue; RelativeLayout spinner; @Override protected void onCreate(Bundle savedInstanceState) { setTheme(R.style.AppTheme); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); navigationView = (NavigationView) findViewById(R.id.navigation); View hView = navigationView.getHeaderView(0); recyclerView = (RecyclerView) findViewById(R.id.recycler_view); spinner = (RelativeLayout) findViewById(R.id.spinner); spinner.setVisibility(View.VISIBLE); recyclerView.setHasFixedSize(true); recyclerView.setLayoutManager(new LinearLayoutManager(this)); circleImageView = (CircleImageView) hView.findViewById(R.id.circularcular); username = (TextView) hView.findViewById(R.id.username); emails = (TextView) hView.findViewById(R.id.emailz); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); toolbar.setTitle("Clipboard"); toolbar.setTitleTextColor(Color.parseColor("#FFFFFF")); if (toolbar != null) { setSupportActionBar(toolbar); } mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); // load saved navigation state if present if (null == savedInstanceState) { } else { mNavItemId = savedInstanceState.getInt(NAV_ITEM_ID); } // listen for navigation events // select the correct nav menu item // set up the hamburger icon to open and close the drawer mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.open, R.string.close); mDrawerLayout.setDrawerListener(mDrawerToggle); mDrawerToggle.syncState(); navigate(mNavItemId); navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.mail: Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts( "mailto","goshenapps@gmail.com", null)); emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject"); emailIntent.putExtra(Intent.EXTRA_TEXT, "Hello Developer"); startActivity(Intent.createChooser(emailIntent, "Send email...")); return true; case R.id.share: Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, "Best Clipboard app: https://play.google.com/store/apps/details?id="+getPackageName()); sendIntent.setType("text/plain"); startActivity(sendIntent); return true; case R.id.rate: Toast.makeText(MainActivity.this, "Please rate this app", Toast.LENGTH_LONG).show(); Intent intet = new Intent(Intent.ACTION_VIEW); intet.setData(Uri.parse("market://details?id=" + getPackageName())); startActivity(intet); return true; case R.id.logouts: AuthUI.getInstance() .signOut(MainActivity.this) .addOnCompleteListener(new OnCompleteListener<Void>() { public void onComplete(@NonNull Task<Void> task) { // user is now signed out SharedPreferences edits = PreferenceManager.getDefaultSharedPreferences(MainActivity.this); SharedPreferences.Editor headies = edits.edit(); headies.putString("LOGIN",null); headies.putString("PASS",null); headies.commit(); stopService(new Intent(MainActivity.this,Clipboard.class)); startActivity(new Intent(MainActivity.this,Kaboo.class)); finish(); } }); return true; default: return true; } } }); } @Override protected void onStart() { super.onStart(); auth = FirebaseAuth.getInstance(); if (auth.getCurrentUser() != null) { Activated(); } else { startActivity(new Intent(getApplicationContext(), Kaboo.class)); } } @Override protected void onResume() { super.onResume(); } public static String printKeyHash(Activity context) { PackageInfo packageInfo; String key = null; try { //getting application package name, as defined in manifest String packageName = context.getApplicationContext().getPackageName(); //Retriving package info packageInfo = context.getPackageManager().getPackageInfo(packageName, PackageManager.GET_SIGNATURES); // Log.e("Package Name=", context.getApplicationContext().getPackageName()); for (Signature signature : packageInfo.signatures) { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); key = new String(Base64.encode(md.digest(), 0)); // String key = new String(Base64.encodeBytes(md.digest())); Log.e("Key Hash=========", key); } } catch (PackageManager.NameNotFoundException e1) { Log.e("Name not found", e1.toString()); } catch (NoSuchAlgorithmException e) { Log.e("No such an algorithm", e.toString()); } catch (Exception e) { Log.e("Exception", e.toString()); } return key; } private void navigate(final int itemId) { // perform the actual navigation logic, updating the main content fragment etc } @Override public boolean onNavigationItemSelected(final MenuItem menuItem) { menuItem.setChecked(true); mNavItemId = menuItem.getItemId(); // allow some time after closing the drawer before performing real navigation // so the user can see what is happening mDrawerLayout.closeDrawer(GravityCompat.START); mDrawerActionHandler.postDelayed(new Runnable() { @Override public void run() { navigate(menuItem.getItemId()); } }, DRAWER_CLOSE_DELAY_MS); return true; } @Override public void onConfigurationChanged(final Configuration newConfig) { super.onConfigurationChanged(newConfig); mDrawerToggle.onConfigurationChanged(newConfig); } @Override public void onBackPressed() { if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) { mDrawerLayout.closeDrawer(GravityCompat.START); } else { super.onBackPressed(); } } @Override protected void onSaveInstanceState(final Bundle outState) { super.onSaveInstanceState(outState); outState.putInt(NAV_ITEM_ID, mNavItemId); } private boolean isServiceRunning() { ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)){ if("com.goshenapps.clipboard.BootCamp.Clipboard".equals(service.service.getClassName())) { return true; } } return false; } public void Activated() { if (isServiceRunning()) { DataFetch(); }else { startService(new Intent(MainActivity.this, Clipboard.class)); DataFetch(); } } public void DataFetch() { String banku = auth.getCurrentUser().getDisplayName().toString(); username.setText(""+banku); emails.setText(auth.getCurrentUser().getEmail().toString() ); Picasso.with(getApplicationContext()).load(auth.getCurrentUser().getPhotoUrl()).into(circleImageView); mDatabase = FirebaseDatabase.getInstance().getReference(); DatabaseReference raps = mDatabase.child(auth.getCurrentUser().getUid()); adapter = new FirebaseRecyclerAdapter<Fire, FireHolder>(Fire.class, R.layout.acrobat, FireHolder.class, raps.orderByChild("sorts")) { @Override protected void populateViewHolder(FireHolder viewHolder, final Fire fire, final int position) { viewHolder.setClips(fire.getClip()); viewHolder.setKeys(fire.getKey()); viewHolder.setTickers(fire.getTimestamp()); viewHolder.setPositrons("" + position); View bottomSheet = (LinearLayout) viewHolder.itemView.findViewById(R.id.bottom_sheet); final boolean isExpanded = position== expandedPosition; bottomSheet.setVisibility(isExpanded?View.VISIBLE:View.GONE); viewHolder.itemView.setActivated(isExpanded); // Copy button onclicklistener!! viewHolder.itemView.findViewById(R.id.copy).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Copys(fire.getClip()); } }); // Qr button onclicklistener!! viewHolder.itemView.findViewById(R.id.qr).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Qrs(fire.getClip()); } }); // Search button onclicklistener!! viewHolder.itemView.findViewById(R.id.searched).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Searchs(fire.getClip()); } }); // Delete button onclicklistener!! viewHolder.itemView.findViewById(R.id.delete).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Remover(position); } }); // Share button onclicklistener!! viewHolder.itemView.findViewById(R.id.shared).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Shares(fire.getClip()); } }); // Screenshot button onclicklistener!! viewHolder.itemView.findViewById(R.id.camera).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Cameras(fire.getClip()); } }); // Speaker button onclicklistener!! viewHolder.itemView.findViewById(R.id.speaker).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Speakers(fire.getClip()); } }); // Copy button onclicklistener!! viewHolder.itemView.findViewById(R.id.copy).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Copys(fire.getClip()); } }); viewHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { expandedPosition = isExpanded ? -1:position; TransitionManager.beginDelayedTransition(recyclerView); notifyDataSetChanged(); isEmail = false; isCall = false; isWeb = false; // Imageview call,sms,web,email are inline clipboard action icons ImageView call = (ImageView) view.findViewById(R.id.call); ImageView web = (ImageView) view.findViewById(R.id.web); ImageView email = (ImageView) view.findViewById(R.id.email); ImageView sms = (ImageView) view.findViewById(R.id.sms); // all clipboard action icons are set to disabled by default call.setColorFilter(Color.GRAY); sms.setColorFilter(Color.GRAY); web.setColorFilter(Color.GRAY); email.setColorFilter(Color.GRAY); // onclicklistener to check if the call action icon was clicked call.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (isCall) { Intent intent = new Intent(Intent.ACTION_DIAL); intent.setData(Uri.parse("tel:"+callValue)); startActivity(intent); } } }); // onclicklistener to check if the sms action icon was clicked sms.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (isCall) { Intent intent = new Intent(Intent.ACTION_DIAL); intent.setData(Uri.parse("tel:"+callValue)); startActivity(intent); } } }); // onclicklistener to check if the email action icon was clicked email.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (isEmail) { String[] bull = {emailValue}; composeEmail(bull,fire.getClip()); } } }); // onclicklistener to check if the email action icon was clicked web.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (isWeb) { Intent intent= new Intent(Intent.ACTION_VIEW,Uri.parse(webValue)); startActivity(intent); } } }); // Method to run operations on String Opera(fire.getClip()); if (isCall) { call.setColorFilter(null); sms.setColorFilter(null); } if (isWeb) { web.setColorFilter(null); } if (isEmail) { email.setColorFilter(null); } } }); } }; recyclerView.setAdapter(adapter); adapter.notifyDataSetChanged(); raps.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { spinner.setVisibility(View.GONE); if (adapter.getItemCount() == 0){ String intro = getString(R.string.clip_intro); ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); ClipData clip = ClipData.newPlainText("intro", ""+intro); clipboard.setPrimaryClip(clip); } } @Override public void onCancelled(DatabaseError databaseError) { } }); } public void Gestura(String string,String banana) { SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); editor.putString("posit",""+banana); editor.commit(); BottomSheetDialogFragment myBottomSheet = MyBottomSheetDialogFragment.newInstance(string); myBottomSheet.show(getSupportFragmentManager(), myBottomSheet.getTag()); } public void Remover(int position) { adapter.getRef(position).removeValue(); } public void Copys(String strings) { ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); ClipData clip = ClipData.newPlainText("labels", strings); clipboard.setPrimaryClip(clip); } public void Qrs(String strings) { QRDialogFragment qrDialogFragment = QRDialogFragment.newInstance(strings); qrDialogFragment.show(getSupportFragmentManager(),qrDialogFragment.getTag()); } public void Searchs(String strings) { Uri uri = Uri.parse("http://www.google.com/#q="+strings); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); } public void Shares(String strings) { Intent shareIntent = new Intent(Intent.ACTION_SEND); shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); shareIntent.setType("text/plain"); shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, ""+strings); startActivity(shareIntent); } public void Cameras(String strings) { Intent intent = new Intent(MainActivity.this, ShotTaker.class); intent.putExtra("fishbowl",""+strings); startActivity(intent); } public void Speakers(String strings) { SiriDialogFragment sirDialog = SiriDialogFragment.newInstance(strings); sirDialog.show(getSupportFragmentManager(), sirDialog.getTag()); } public void Opera(String aString) { if(aString != null) { Iterator<PhoneNumberMatch> existsPhone = PhoneNumberUtil.getInstance().findNumbers(aString, "IN").iterator(); if (existsPhone.hasNext()) { long ayo = existsPhone.next().number().getNationalNumber(); callValue = String.valueOf(ayo); isCall = true; }else { } } if (aString.contains("http://") || aString.contains("https://") || aString.contains("www.")) { webValue = pullLinks(aString).get(0); isWeb = true; } if (aString.contains("@")){ Pattern p = Pattern.compile("\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}\\b", Pattern.CASE_INSENSITIVE); Matcher matcher = p.matcher(aString); while(matcher.find()) { emailValue = matcher.group(); isEmail = true; } } } public ArrayList<String> pullLinks(String text) { ArrayList<String> links = new ArrayList<String>(); //String regex = "\\(?\\b(http://|www[.])[-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|]"; String regex = "\\(?\\b(https?://|www[.]|ftp://)[-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|]"; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(text); while(m.find()) { String urlStr = m.group(); if (urlStr.startsWith("(") && urlStr.endsWith(")")) { urlStr = urlStr.substring(1, urlStr.length() - 1); } links.add(urlStr); } return links; } public void composeEmail(String[] addresses, String subject) { Intent intent = new Intent(Intent.ACTION_SENDTO); intent.setData(Uri.parse("mailto:")); // only email apps should handle this intent.putExtra(Intent.EXTRA_EMAIL, addresses); intent.putExtra(Intent.EXTRA_SUBJECT, subject); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } } }