diff --git a/main.java b/main.java new file mode 100644 index 0000000..46d23db --- /dev/null +++ b/main.java @@ -0,0 +1,299 @@ +package com.example.nutri1; + +import android.Manifest; +import android.annotation.TargetApi; +import android.app.Activity; +import android.app.AlertDialog; +import android.content.ContentResolver; +import android.content.ContentValues; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.graphics.Bitmap; +import android.media.MediaScannerConnection; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.os.Environment; +import android.provider.MediaStore; +import android.util.Log; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.ActionBarDrawerToggle; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; +import androidx.core.view.GravityCompat; +import androidx.drawerlayout.widget.DrawerLayout; +import androidx.navigation.NavController; +import androidx.navigation.Navigation; +import androidx.navigation.ui.AppBarConfiguration; +import androidx.navigation.ui.NavigationUI; + +import com.google.android.material.floatingactionbutton.FloatingActionButton; +import com.google.android.material.navigation.NavigationView; +import com.google.android.material.snackbar.Snackbar; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; + + +public class Nutiknow extends AppCompatActivity { + + private AppBarConfiguration appBarConfiguration; + + public static int REQUEST_CAMERA = 0; + String userChoosenTask = "Take Photo"; + public static int SELECT_FILE = 1; + + private AppBarConfiguration mAppBarConfiguration; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + Toolbar toolbar = findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + FloatingActionButton fab = findViewById(R.id.fab); + fab.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) + .setAction("Action", null).show(); + boolean result=Utility.checkPermission(Nutiknow.this); + if(result) + cameraIntent(); + else + Log.i("aio", "no permission yet"); + } + } + ); + + 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); + // Passing each menu ID as a set of Ids because each + // menu should be considered as top level destinations. + mAppBarConfiguration = new AppBarConfiguration.Builder( + R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow) + .setDrawerLayout(drawer) + .build(); + NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment); + NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration); + NavigationUI.setupWithNavController(navigationView, navController); + + } + public static class Utility { + public static final int MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE = 123; + + @TargetApi(Build.VERSION_CODES.JELLY_BEAN) + public static boolean checkPermission(final Nutiknow context) + { + int currentAPIVersion = Build.VERSION.SDK_INT; + if(currentAPIVersion>=android.os.Build.VERSION_CODES.M) + { + if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) context, Manifest.permission.READ_EXTERNAL_STORAGE)) { + AlertDialog.Builder alertBuilder = new AlertDialog.Builder(context); + alertBuilder.setCancelable(true); + alertBuilder.setTitle("Permission necessary"); + alertBuilder.setMessage("External storage permission is necessary"); + alertBuilder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { + @TargetApi(Build.VERSION_CODES.JELLY_BEAN) + public void onClick(DialogInterface dialog, int which) { + ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE); + } + }); + AlertDialog alert = alertBuilder.create(); + alert.show(); + + } else { + ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE); + } + return false; + } else { + return true; + } + } else { + return true; + } + } + } + private void cameraIntent() { + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); + startActivityForResult(intent, REQUEST_CAMERA); + } + + @Override + public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + switch (requestCode) { + case Utility.MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE: + if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + if (userChoosenTask.equals("Take Photo")) + cameraIntent(); + } else { + //code for deny + } + break; + } + } + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == Activity.RESULT_OK) { + if (requestCode == REQUEST_CAMERA) + onCaptureImageResult(data); + } + } + private void onCaptureImageResult(Intent data) { + Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); + ByteArrayOutputStream bytes = new ByteArrayOutputStream(); + thumbnail.compress(Bitmap.CompressFormat.JPEG, 90, bytes); + File destination = new File(Environment.getExternalStorageDirectory(), + System.currentTimeMillis() + ".jpg"); + FileOutputStream fo; + try { + File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES); + File image = File.createTempFile( + String.valueOf(System.currentTimeMillis()), + ".jpg", + storageDir + ); + saveImage(this, thumbnail, storageDir.toString(), String.valueOf(System.currentTimeMillis())); +// destination.mkdirs(); +// destination.createNewFile(); +// fo = new FileOutputStream(destination); +// fo.write(bytes.toByteArray()); +// fo.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + Log.i("aio", e.toString()); + e.printStackTrace(); + } +// imageView.setImageBitmap(thumbnail); + } + private Uri saveImage(Context context, Bitmap bitmap, @NonNull String folderName, @NonNull String fileName) throws IOException + { + OutputStream fos; + File imageFile = null; + Uri imageUri = null; + + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + ContentResolver resolver = context.getContentResolver(); + ContentValues contentValues = new ContentValues(); + contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, fileName); + contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "image/png"); + contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, "DCIM" + File.separator + folderName); + imageUri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues); + fos = resolver.openOutputStream(imageUri); + } else { + String imagesDir = Environment.getExternalStoragePublicDirectory( + Environment.DIRECTORY_DCIM).toString() + File.separator + folderName; + imageFile = new File(imagesDir); + if (!imageFile.exists()) { + imageFile.mkdir(); + } + imageFile = new File(imagesDir, fileName + ".png"); + fos = new FileOutputStream(imageFile); + } + + boolean saved = bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); + fos.flush(); + fos.close(); + + if (imageFile != null) // pre Q + { + MediaScannerConnection.scanFile(context, new String[]{imageFile.toString()}, null, null); + imageUri = Uri.fromFile(imageFile); + } + + return imageUri; + } + + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.main, menu); + return true; + } +// @Override + public boolean onNavigationItemSelected(MenuItem item) { + // Handle navigation view item clicks here. + int id = item.getItemId(); + + if (id == R.id.nav_home) { + // Handle the camera action + } else if (id == R.id.nav_gallery) { + + } else if (id == R.id.nav_slideshow) { + + } else if (id == R.id.nav_share) { + Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND); + sharingIntent.setType("text/plain"); + String shareBody = "https://github.com/sarveshpatil1/nutrik"; + String shareSub = "Sharing the link"; + sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, shareSub); + sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody); + startActivity(Intent.createChooser(sharingIntent, "Share using")); + } + + DrawerLayout drawer = findViewById(R.id.drawer_layout); + drawer.closeDrawer(GravityCompat.START); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Inflate the menu; this adds items to the action bar if it is present. + switch(item.getItemId()){ + case R.id.menu_share: +// findViewById(R.id.nav_share).setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// + Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND); + sharingIntent.setType("text/plain"); + String shareBody = "Your body here"; + String shareSub = "Your subject here"; + sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, shareSub); + sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody); + startActivity(Intent.createChooser(sharingIntent, "Share using")); +// } +// }); + break; + case R.id.exit1: finish(); + System.exit(0); + break; + + default: } + return true; + } + + + @Override + public boolean onSupportNavigateUp() { + NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment); + return NavigationUI.navigateUp(navController, mAppBarConfiguration) + || super.onSupportNavigateUp(); + } + + +} + +