Skip to content

Instantly share code, notes, and snippets.

@MwBakker
Last active May 13, 2019 14:06
Show Gist options
  • Save MwBakker/aa45b155f4d9fb40989eeb78ea73743d to your computer and use it in GitHub Desktop.
Save MwBakker/aa45b155f4d9fb40989eeb78ea73743d to your computer and use it in GitHub Desktop.
package com.mwb.digitalstorage;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import com.mwb.digitalstorage.command_handlers.ToolbarCmdHandler;
import com.mwb.digitalstorage.misc.ImageProcessor;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.BindingAdapter;
public class MainActivity extends AppCompatActivity
{
static int RESULT_LOAD_IMAGE = 1;
protected Executor executor = Executors.newSingleThreadExecutor();
protected ImageProcessor imgProcessor = new ImageProcessor();
//
// command handler for the toolbar
//
public ToolbarCmdHandler getToolbarCmdHandler(String nameOfPrevious, long idOfPrevious)
{
return new ToolbarCmdHandler()
{
@Override
public void openSearchActivity()
{
Intent intent = new Intent(MainActivity.this, SearchActivity.class);
intent.putExtra("previous_activity_id", idOfPrevious);
intent.putExtra("previous_activity_name", nameOfPrevious);
overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
}
};
}
@BindingAdapter("android:layout_height")
public static void setLayoutHeight(View view, float height)
{
ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
layoutParams.height = Math.round(height);
view.setLayoutParams(layoutParams);
}
//
// loadImg will be called on AS SOON AS
// the ViewModel property bound to imgSrc is called on
//
@BindingAdapter({"app:customSrc"})
public static void loadImg(ImageView view, Bitmap imgBitmap)
{
view.setImageBitmap(imgBitmap);
}
}
package com.mwb.digitalstorage;
import android.Manifest;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Environment;
import com.mwb.digitalstorage.command_handlers.RegistrationCmdHandler;
import com.mwb.digitalstorage.database.CompanyRepository;
import com.mwb.digitalstorage.databinding.ActivityMainBinding;
import com.mwb.digitalstorage.misc.ImageProcessor;
import com.mwb.digitalstorage.viewmodel.CompanyRegistrationViewModel;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.ViewModelProviders;
public class RegistrationActivity extends MainActivity
{
private CompanyRegistrationViewModel companyRegistrationVM;
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
checkPermissions();
companyRegistrationVM = new CompanyRegistrationViewModel(new CompanyRepository(getApplication()));
checkExistence();
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
RegistrationCmdHandler registrationCmdHandler = registrationCmdHandler();
binding.setVm(companyRegistrationVM);
binding.setCmdHandler(registrationCmdHandler);
}
//
// checks for permissions
//
private void checkPermissions()
{
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale((Activity)
this, Manifest.permission.READ_EXTERNAL_STORAGE)) {
} else {
ActivityCompat.requestPermissions((Activity) this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
200);
ActivityCompat.requestPermissions((Activity) this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
200);
}
}
}
//
// checks if there is already a company existing
//
private void checkExistence()
{
executor.execute(() ->
{
if (companyRegistrationVM.getCompany() != null)
{
switchActivity();
}
});
}
//
// registration activity handler
//
public RegistrationCmdHandler registrationCmdHandler()
{
return new RegistrationCmdHandler()
{
@Override
public void takePhoto()
{
imgProcessor.setCamerabool(true);
startActivityForResult(imgProcessor.dispatchTakePictureIntent(getApplicationContext(),
getExternalFilesDir(Environment.DIRECTORY_PICTURES)), 1);
}
@Override
public void browsePhoto()
{
imgProcessor.setCamerabool(false);
startActivityForResult(new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI),1);
}
@Override
public void removePhoto() { companyRegistrationVM.companyImgObsv.set(null); }
@Override
public void registerCompany()
{
executor.execute(() ->
{
companyRegistrationVM.addCompany();
switchActivity();
});
}
};
}
//
// immediately retrieves file from taken img
// sets the VM img resource property
// loadImg will be called on after trigger of set()
//
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (imgProcessor.isFromCamera())
{
companyRegistrationVM.setCompanyBitmap(imgProcessor.getImgPath());
}
else
{
companyRegistrationVM.companyImgObsv.set(imgProcessor.browseImage(data, getApplication()));
}
}
//
// switches activity
//
public void switchActivity()
{
Intent intent = new Intent(RegistrationActivity.this, StorageOverViewActivity.class);
startActivity(intent);
overridePendingTransition(android.R.anim.fade_out, android.R.anim.fade_in);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment