Commit 159a0f3e authored by samesh97's avatar samesh97

initializing photo editor other features.

parent f38769e7
......@@ -72,6 +72,13 @@ dependencies {
//Ui
implementation "com.airbnb.android:lottie:3.7.0"
implementation 'com.github.QuadFlask:colorpicker:0.0.13'
implementation 'org.jsoup:jsoup:1.8.3'
implementation 'com.github.warkiz.tickseekbar:tickseekbar:0.1.4'
implementation 'net.alhazmy13.ImageFilters:library:0.1.2-beta'
implementation 'de.hdodenhof:circleimageview:3.1.0'
implementation 'info.androidhive:imagefilters:1.0.7'
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
......
......@@ -19,21 +19,15 @@ import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.app.smartphotoeditor.R;
import com.app.smartphotoeditor.adapters.FilterAdapter;
import com.app.smartphotoeditor.asynctask.AddImageToArrayListAsyncTask;
import com.app.smartphotoeditor.config.ImageList;
import com.app.smartphotoeditor.database.DatabaseHelper;
import com.app.smartphotoeditor.listeners.OnAsyncTaskState;
import com.app.smartphotoeditor.listeners.OnBitmapChanged;
import com.app.smartphotoeditor.sdk.Methods;
import com.bumptech.glide.Glide;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
import com.google.android.gms.ads.InterstitialAd;
import com.google.android.gms.ads.MobileAds;
import com.google.android.gms.ads.initialization.InitializationStatus;
import com.google.android.gms.ads.initialization.OnInitializationCompleteListener;
import com.sba.sinhalaphotoeditor.R;
import com.sba.sinhalaphotoeditor.adapters.FilterAdapter;
import com.sba.sinhalaphotoeditor.aynctask.AddImageToArrayListAsyncTask;
import com.sba.sinhalaphotoeditor.callbacks.OnAsyncTaskState;
import com.sba.sinhalaphotoeditor.callbacks.OnBitmapChanged;
import com.sba.sinhalaphotoeditor.database.DatabaseHelper;
import com.sba.sinhalaphotoeditor.sdk.Methods;
import com.sba.sinhalaphotoeditor.singleton.ImageList;
import com.warkiz.tickseekbar.OnSeekChangeListener;
import com.warkiz.tickseekbar.SeekParams;
import com.warkiz.tickseekbar.TickSeekBar;
......@@ -43,15 +37,12 @@ import com.zomato.photofilters.imageprocessors.subfilters.BrightnessSubFilter;
import com.zomato.photofilters.imageprocessors.subfilters.SaturationSubfilter;
import com.zomato.photofilters.imageprocessors.subfilters.VignetteSubfilter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import static com.sba.sinhalaphotoeditor.config.Constants.LANGUAGE_KEY;
import static com.sba.sinhalaphotoeditor.config.Constants.LANGUAGE_SINHALA;
import static com.sba.sinhalaphotoeditor.config.Constants.SHARED_PREF_NAME;
public class AddEffects extends AppCompatActivity implements OnBitmapChanged, OnAsyncTaskState {
......@@ -63,7 +54,6 @@ public class AddEffects extends AppCompatActivity implements OnBitmapChanged, On
private Bitmap currentEditingBitmap;
private ImageView userSelectedImage;
private InterstitialAd mInterstitialAd;
private DatabaseHelper helper = new DatabaseHelper(AddEffects.this);
private FilterAdapter filterAdapter;
private ProgressBar progress_bar;
......@@ -86,12 +76,7 @@ public class AddEffects extends AppCompatActivity implements OnBitmapChanged, On
@Override
public void onBackPressed()
{
if(mInterstitialAd.isLoaded())
{
mInterstitialAd.show();
}
else
{
if(subFiltersLayout.getVisibility() == View.VISIBLE)
{
......@@ -100,10 +85,9 @@ public class AddEffects extends AppCompatActivity implements OnBitmapChanged, On
else
{
super.onBackPressed();
overridePendingTransition(R.anim.activity_start_animation__for_tools,R.anim.activity_exit_animation__for_tools);
}
}
}
......@@ -113,43 +97,13 @@ public class AddEffects extends AppCompatActivity implements OnBitmapChanged, On
getMenuInflater().inflate(R.menu.photo_on_photo_menu, menu);
return true;
}
@Override
protected void attachBaseContext(Context newBase)
{
SharedPreferences pref = newBase.getSharedPreferences(SHARED_PREF_NAME, MODE_PRIVATE);
String localeString = pref.getString(LANGUAGE_KEY,LANGUAGE_SINHALA);
Locale myLocale = new Locale(localeString);
Locale.setDefault(myLocale);
Configuration config = newBase.getResources().getConfiguration();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
config.setLocale(myLocale);
if(Build.VERSION.SDK_INT > Build.VERSION_CODES.N){
Context newContext = newBase.createConfigurationContext(config);
super.attachBaseContext(newContext);
return;
}
}
else
{
config.locale = myLocale;
}
super.attachBaseContext(newBase);
getResources().updateConfiguration(config, getResources().getDisplayMetrics());
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
if (item.getItemId() == R.id.setImage)
{
if(mInterstitialAd.isLoaded())
{
mInterstitialAd.show();
}
else
{
progress_bar.setVisibility(View.VISIBLE);
mInterstitialAd.loadAd(new AdRequest.Builder().build());
if(filterAdapter != null)
{
......@@ -172,7 +126,7 @@ public class AddEffects extends AppCompatActivity implements OnBitmapChanged, On
{
startActivityForResult();
}
}
}
......@@ -211,28 +165,10 @@ public class AddEffects extends AppCompatActivity implements OnBitmapChanged, On
filterRecyclerView.setAdapter(filterAdapter);
MobileAds.initialize(this, new OnInitializationCompleteListener() {
@Override
public void onInitializationComplete(InitializationStatus initializationStatus) {}
});
mInterstitialAd = new InterstitialAd(this);
mInterstitialAd.setAdUnitId("ca-app-pub-3538783908730049/5147080745");
mInterstitialAd.loadAd(new AdRequest.Builder().build());
Methods.freeUpMemory();
MobileAds.initialize(this, new OnInitializationCompleteListener() {
@Override
public void onInitializationComplete(InitializationStatus initializationStatus) {
}
});
AdView mAdView = findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
expandIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
......
package com.app.smartphotoeditor.adapters;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.constraintlayout.widget.ConstraintSet;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;
import com.sba.sinhalaphotoeditor.R;
import com.sba.sinhalaphotoeditor.callbacks.OnAlbumClick;
import com.sba.sinhalaphotoeditor.model.AlbumModel;
import com.sba.sinhalaphotoeditor.sdk.Methods;
import java.util.ArrayList;
import de.hdodenhof.circleimageview.CircleImageView;
public class AlbumAdapter extends RecyclerView.Adapter<AlbumAdapter.MyViewHolder>
{
private Context context;
private ArrayList<AlbumModel> list;
private OnAlbumClick onAlbumClick;
public AlbumAdapter(Context context,ArrayList<AlbumModel> list,OnAlbumClick onAlbumClick)
{
this.context = context;
this.list = list;
this.onAlbumClick = onAlbumClick;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
{
View view = LayoutInflater.from(context).inflate(R.layout.album_row,null);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, final int position)
{
if(list != null && list.size() > position)
{
final AlbumModel model = list.get(position);
Glide.with(context)
.load(model.getFirstPic())
.apply(new RequestOptions().centerCrop())
.into(holder.album_pic);
holder.text_view.setText(String.valueOf(model.getNumberOfPics()));
holder.album_name.setText(model.getFolderName());
holder.album_pic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view)
{
if(onAlbumClick != null)
{
onAlbumClick.onAlbumChanged(model.getPath(),position);
}
}
});
}
}
@Override
public int getItemCount()
{
if (list != null)
return list.size();
return 0;
}
public class MyViewHolder extends RecyclerView.ViewHolder
{
CircleImageView album_pic,blacked;
TextView text_view;
TextView album_name;
public MyViewHolder(@NonNull View itemView)
{
super(itemView);
album_pic = itemView.findViewById(R.id.album_pic);
text_view = itemView.findViewById(R.id.text_view);
album_name = itemView.findViewById(R.id.album_name);
blacked = itemView.findViewById(R.id.blacked);
int width = (int) Methods.getDeviceWidthInPX(context);
width = width / 5;
int padding = 12;
ConstraintLayout.LayoutParams params = new ConstraintLayout.LayoutParams(width - padding,width - padding);
album_pic.setLayoutParams(params);
blacked.setLayoutParams(params);
ConstraintLayout layout = itemView.findViewById(R.id.layout);
ConstraintSet set = new ConstraintSet();
set.clone(layout);
set.connect(album_pic.getId(), ConstraintSet.RIGHT, layout.getId(), ConstraintSet.RIGHT, padding);
set.connect(album_pic.getId(),ConstraintSet.LEFT,layout.getId(),ConstraintSet.LEFT,padding);
set.connect(album_pic.getId(),ConstraintSet.TOP,layout.getId(),ConstraintSet.TOP,padding);
set.connect(album_pic.getId(),ConstraintSet.BOTTOM,layout.getId(),ConstraintSet.BOTTOM,padding);
set.connect(blacked.getId(), ConstraintSet.RIGHT, layout.getId(), ConstraintSet.RIGHT, padding);
set.connect(blacked.getId(),ConstraintSet.LEFT,layout.getId(),ConstraintSet.LEFT,padding);
set.connect(blacked.getId(),ConstraintSet.TOP,layout.getId(),ConstraintSet.TOP,padding);
set.connect(blacked.getId(),ConstraintSet.BOTTOM,layout.getId(),ConstraintSet.BOTTOM,padding);
set.applyTo(layout);
}
}
}
package com.app.smartphotoeditor.adapters;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.os.AsyncTask;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.app.smartphotoeditor.R;
import com.app.smartphotoeditor.config.ImageList;
import com.app.smartphotoeditor.listeners.OnBitmapChanged;
import com.app.smartphotoeditor.sdk.Methods;
import com.bumptech.glide.Glide;
import com.zomato.photofilters.imageprocessors.Filter;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
import de.hdodenhof.circleimageview.CircleImageView;
public class FilterAdapter extends RecyclerView.Adapter<FilterAdapter.FilterViewHolder>
{
private Context context;
private List<Filter> filters;
private int previousPosition = -99;
private OnBitmapChanged listner;
private Bitmap currentBitmap = null;
private HashMap<Integer,CircleImageView> circleImageList;
private Bitmap croppedBitmap = null;
private ProgressBar progressBar;
public FilterAdapter(Context context, List<Filter> filters, OnBitmapChanged listner,ProgressBar progressBar)
{
this.context = context;
this.filters = filters;
this.listner = listner;
circleImageList = new HashMap<>();
this.progressBar = progressBar;
}
@NonNull
@Override
public FilterViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
{
View view = LayoutInflater.from(context).inflate(R.layout.filter_row,null);
return new FilterViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final FilterViewHolder holder, final int position)
{
if(filters != null)
{
AsyncTask.execute(new Runnable() {
@Override
public void run()
{
if(croppedBitmap == null)
{
croppedBitmap = Methods.resize(ImageList.getInstance().getCurrentBitmap(),100,100);
}
Bitmap bitmap = croppedBitmap.copy(croppedBitmap.getConfig(),true);
final Bitmap filtered = filters.get(position).processFilter(bitmap);
((Activity)context).runOnUiThread(new Runnable() {
@Override
public void run()
{
Glide.with(context).load(filtered).into(holder.previewImage);
}
});
}
});
String name= filters.get(position).getName();
if(name != null)
{
holder.filterName.setText(name);
}
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(previousPosition != position)
{
if(progressBar != null)
{
progressBar.setVisibility(View.VISIBLE);
}
AsyncTask.execute(new Runnable() {
@Override
public void run()
{
currentBitmap = ImageList.getInstance().getCurrentBitmap().copy(ImageList.getInstance().getCurrentBitmap().getConfig(),true);
Bitmap largeBitmap = filters.get(position).processFilter(currentBitmap);
listner.bitmapChanged(largeBitmap,filters.get(position));
}
});
previousPosition = position;
Set<Integer> keys = circleImageList.keySet();
for(Integer key : keys)
{
if(position == key)
{
circleImageList.get(key).setAlpha(1f);
circleImageList.get(key).setBorderWidth(4);
circleImageList.get(key).setBorderColor(Color.WHITE);
circleImageList.get(key).animate().scaleX(1.08f).scaleY(1.08f).start();
}
else
{
circleImageList.get(key).animate().scaleX(1f).scaleY(1f).start();
circleImageList.get(key).setAlpha(0.7f);
circleImageList.get(key).setBorderWidth(2);
circleImageList.get(key).setBorderColor(Color.WHITE);
}
}
}
}
});
}
circleImageList.put(position,holder.previewImage);
}
@Override
public int getItemCount()
{
if(filters != null)
{
return filters.size();
}
return 0;
}
public class FilterViewHolder extends RecyclerView.ViewHolder
{
CircleImageView previewImage;
TextView filterName;
public FilterViewHolder(@NonNull View itemView)
{
super(itemView);
previewImage = itemView.findViewById(R.id.filter_preview);
filterName = itemView.findViewById(R.id.filter_name);
}
}
public int returnPrevoiusPositin()
{
return previousPosition;
}
}
package com.app.smartphotoeditor.adapters;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.sba.sinhalaphotoeditor.R;
import com.sba.sinhalaphotoeditor.activities.MyCustomGallery;
import com.sba.sinhalaphotoeditor.callbacks.OnItemClickListner;
import com.sba.sinhalaphotoeditor.model.GalleryImage;
import com.sba.sinhalaphotoeditor.sdk.Methods;
import java.io.File;
import java.util.ArrayList;
public class GridViewAdapter extends RecyclerView.Adapter<GridViewAdapter.MyViewHolder>
{
private Context context;
private ArrayList<GalleryImage> images;
public static final int numberOfImagesInARow = 3;
private OnItemClickListner listner;
public GridViewAdapter(Context context, ArrayList<GalleryImage> images, OnItemClickListner listner)
{
this.context = context;
this.images = images;
this.listner = listner;
}
public void setContext(Context context)
{
this.context = context;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
{
View view = LayoutInflater.from(context).inflate(R.layout.custom_gallery_row, parent, false);
view.setLayoutParams(new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, (int) (Methods.getDeviceHeightInPX(context) / 5)));
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, final int position)
{
if(images.size() > (position * numberOfImagesInARow) && images.get(position * numberOfImagesInARow).getFile() != null)
{
Glide.with(context)
.load(images.get(position * numberOfImagesInARow).getFile())
.placeholder(R.drawable.loading_image_placeholder)
.error(R.drawable.loading_image_placeholder)
.into(holder.imgView);
holder.imgView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showSelectView(images.get(position * numberOfImagesInARow).getFile());
}
});
}
else
{
holder.imgView.setImageBitmap(null);
holder.imgView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showSelectView(null);
}
});
}
if(images.size() > ((position * numberOfImagesInARow) + 1) && images.get(((position * numberOfImagesInARow) + 1)).getFile() != null)
{
Glide.with(context)
.load(images.get(((position * numberOfImagesInARow) + 1)).getFile())
.placeholder(R.drawable.loading_image_placeholder)
.error(R.drawable.loading_image_placeholder)
.into(holder.imgView2);
holder.imgView2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showSelectView(images.get(((position * numberOfImagesInARow) + 1)).getFile());
}
});
}
else
{
holder.imgView2.setImageBitmap(null);
holder.imgView2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showSelectView(null);
}
});
}
if(images.size() > ((position * numberOfImagesInARow) + 2) && images.get(((position * numberOfImagesInARow) + 2)).getFile() != null)
{
Glide.with(context)
.load(images.get(((position * numberOfImagesInARow) + 2)).getFile())
.placeholder(R.drawable.loading_image_placeholder)
.error(R.drawable.loading_image_placeholder)
.into(holder.imgView3);
holder.imgView3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showSelectView(images.get(((position * numberOfImagesInARow) + 2)).getFile());
}
});
}
else
{
holder.imgView3.setImageBitmap(null);
holder.imgView3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showSelectView(null);
}
});
}
}
@Override
public int getItemCount()
{
if(images.size() % numberOfImagesInARow == 0)
{
return (images.size() / numberOfImagesInARow);
}
else
{
return (images.size() / numberOfImagesInARow) + 1;
}
}
public class MyViewHolder extends RecyclerView.ViewHolder
{
private ImageView imgView;
private ImageView imgView2;
private ImageView imgView3;
public MyViewHolder(@NonNull View itemView)
{
super(itemView);
imgView = itemView.findViewById(R.id.image);
imgView2 = itemView.findViewById(R.id.image2);
imgView3 = itemView.findViewById(R.id.image3);
}
}
private void showSelectView(File file)
{
if(file == null)
{
return;
}
listner.onClicked(file);
MyCustomGallery.selectedBitmap = Methods.getBitmap(file.getAbsolutePath());
}
}
package com.app.smartphotoeditor.adapters;
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.constraintlayout.widget.ConstraintSet;
import androidx.recyclerview.widget.RecyclerView;
import com.app.smartphotoeditor.R;
import com.app.smartphotoeditor.listeners.OnAlbumClick;
import com.app.smartphotoeditor.models.pictureFacer;
import com.app.smartphotoeditor.sdk.Methods;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;
import com.sba.sinhalaphotoeditor.R;
import com.sba.sinhalaphotoeditor.callbacks.OnAlbumClick;
import com.sba.sinhalaphotoeditor.model.pictureFacer;
import com.sba.sinhalaphotoeditor.sdk.Methods;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.Timer;
import java.util.TimerTask;
import java.util.logging.Handler;
public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.MyViewHolder>
{
......@@ -35,14 +27,6 @@ public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.MyViewHolder
private ArrayList<pictureFacer> list;
private OnAlbumClick onAlbumClick;
private int selectedItem = 0;
private static final int MAX_TIME = 2;
private int count = MAX_TIME;
private ArrayList<View> viewItemList = new ArrayList<>();
public ImageAdapter(Context context, ArrayList<pictureFacer> list, OnAlbumClick onAlbumClick)
{
this.context = context;
......@@ -79,25 +63,6 @@ public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.MyViewHolder
}
}
});
if(viewItemList.size() > position)
{
viewItemList.add(position,holder.itemView);
}
else
{
viewItemList.add(holder.itemView);
}
if(selectedItem == position)
{
holder.layout.setBackgroundColor(Color.RED);
}
else
{
holder.layout.setBackgroundColor(Color.TRANSPARENT);
}
}
}
@Override
......@@ -112,13 +77,10 @@ public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.MyViewHolder
public class MyViewHolder extends RecyclerView.ViewHolder
{
ImageView image_pic;
ConstraintLayout layout;
public MyViewHolder(@NonNull View itemView)
{
super(itemView);
image_pic = itemView.findViewById(R.id.image_pic);
layout = itemView.findViewById(R.id.layout);
int width = (int) Methods.getDeviceWidthInPX(context);
width = width / 4;
......@@ -137,77 +99,4 @@ public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.MyViewHolder
}
}
public void scrollLeft()
{
count--;
if(count <= 0) count = MAX_TIME;
else return;
if(selectedItem % 4 != 0)
{
notifyItemChanged(this.selectedItem);
this.selectedItem -= 1;
notifyItemChanged(this.selectedItem);
}
}
public void scrollRight()
{
count--;
if(count <= 0) count = MAX_TIME;
else return;
if((selectedItem + 1) % 4 != 0)
{
notifyItemChanged(this.selectedItem);
this.selectedItem += 1;
notifyItemChanged(this.selectedItem);
}
}
public void scrollTop()
{
count--;
if(count <= 0) count = MAX_TIME;
else return;
if(selectedItem - 4 >= 0)
{
notifyItemChanged(this.selectedItem);
this.selectedItem -= 4;
notifyItemChanged(this.selectedItem);
}
}
public void scrollBottom()
{
count--;
if(count <= 0) count = MAX_TIME;
else return;
notifyItemChanged(this.selectedItem);
this.selectedItem += 4;
notifyItemChanged(this.selectedItem);
}
public void selectedItem(int pos)
{
notifyItemChanged(this.selectedItem);
this.selectedItem = pos;
notifyItemChanged(this.selectedItem);
}
public int getSelectedItem(){return selectedItem;}
public void clickCurrentActiveImage()
{
View view = viewItemList.get(selectedItem);
view.performClick();
}
}
package com.app.smartphotoeditor.adapters;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.sba.sinhalaphotoeditor.R;
import com.sba.sinhalaphotoeditor.callbacks.OnTextAttributesChangedListner;
import com.sba.sinhalaphotoeditor.custom.views.ImageViewPlus;
import java.util.ArrayList;
import java.util.HashMap;
import de.hdodenhof.circleimageview.CircleImageView;
public class ImageViewPlusColorAdapter extends RecyclerView.Adapter<ImageViewPlusColorAdapter.MyViewHolder>
{
private Context context;
private ArrayList<Integer> colorList;
private OnTextAttributesChangedListner listner;
private HashMap<Integer, ImageView> viewList;
private ImageViewPlus selectedImageView;
public ImageViewPlusColorAdapter(Context context, ImageViewPlus selectedImageView, OnTextAttributesChangedListner listner)
{
this.context = context;
this.listner = listner;
this.selectedImageView = selectedImageView;
colorList = new ArrayList<>();
viewList = new HashMap<Integer, ImageView>();
setColorsList();
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
{
View view = LayoutInflater.from(context).inflate(R.layout.text_color_row,null,false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, final int position)
{
if(colorList != null && colorList.size() > position)
{
viewList.put(position,holder.is_selected);
holder.color_lay.setClipToOutline(true);
ColorDrawable colorDrawable = new ColorDrawable(colorList.get(position));
holder.color_lay.setImageDrawable(colorDrawable);
holder.color_lay.setImageDrawable(colorDrawable);
if(selectedImageView != null)
{
if(selectedImageView.getBorderColor() == colorList.get(position))
{
ImageView view = viewList.get(position);
if(view != null)
{
view.setVisibility(View.VISIBLE);
}
}
}
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listner.onTextColorChanged(colorList.get(position));
ArrayList<Integer> keyList = new ArrayList<>(viewList.keySet());
for(int i = 0; i < keyList.size(); i++)
{
if(position == keyList.get(i))
{
if (viewList.get(keyList.get(i)) != null)
{
ImageView view = viewList.get(keyList.get(i));
if (view != null)
{
view.setVisibility(View.VISIBLE);
}
}
}
else
{
ImageView view = viewList.get(keyList.get(i));
if(view != null)
{
view.setVisibility(View.GONE);
}
}
}
}
});
}
}
@Override
public int getItemCount()
{
return colorList.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder
{
CircleImageView color_lay;
ImageView is_selected;
private MyViewHolder(@NonNull View itemView)
{
super(itemView);
color_lay = itemView.findViewById(R.id.color_lay);
is_selected = itemView.findViewById(R.id.is_selected);
}
}
private void setColorsList()
{
colorList.add(Color.BLACK);
colorList.add(Color.WHITE);
colorList.add(Color.GRAY);
colorList.add(Color.LTGRAY);
colorList.add(Color.RED);
colorList.add(Color.GREEN);
colorList.add(Color.BLUE);
colorList.add(Color.DKGRAY);
colorList.add(Color.YELLOW);
colorList.add(Color.CYAN);
colorList.add(Color.MAGENTA);
if(selectedImageView != null)
{
for(int i = 0; i < colorList.size(); i++)
{
if(colorList.get(i) == selectedImageView.getBorderColor())
{
colorList.remove(i);
colorList.add(0,selectedImageView.getBorderColor());
notifyDataSetChanged();
break;
}
}
}
}
}
package com.app.smartphotoeditor.adapters;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Bitmap;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.sba.sinhalaphotoeditor.R;
import com.sba.sinhalaphotoeditor.activities.MainActivity;
import com.sba.sinhalaphotoeditor.aynctask.AddImageToArrayListAsyncTask;
import com.sba.sinhalaphotoeditor.callbacks.OnAsyncTaskState;
import com.sba.sinhalaphotoeditor.database.DatabaseHelper;
import com.sba.sinhalaphotoeditor.singleton.ImageList;
import java.util.ArrayList;
public class RecentImageAdapter extends RecyclerView.Adapter<RecentImageAdapter.MyViewHolder>
{
private ArrayList<Bitmap> images = new ArrayList<>();
private ArrayList<String> dates = new ArrayList<>();
private Context context;
private Bitmap selectedImage = null;
private Dialog dialog;
int percent;
public RecentImageAdapter(Context context, ArrayList<Bitmap> images, ArrayList<Integer> ids, ArrayList<String> dates)
{
this.images = images;
this.dates = dates;
this.context = context;
DatabaseHelper helper = new DatabaseHelper(context);
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
float dpHeight = displayMetrics.heightPixels / displayMetrics.density;
//float dpWidth = displayMetrics.widthPixels / displayMetrics.density;
percent = (int) (dpHeight / 4);
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
{
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recent_image_list_row, parent, false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder,final int position)
{
holder.itemView.setLayoutParams(new ConstraintLayout.LayoutParams(percent, ViewGroup.LayoutParams.MATCH_PARENT));
if(images.size() > position)
{
Glide.with(context).load(images.get(position)).into(holder.image);
if(dates != null && dates.size() > position)
{
holder.date.setText(dates.get(position));
}
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
selectedImage = images.get(position);
showProgressDialog();
ImageList.getInstance().clearImageList();
AddImageToArrayListAsyncTask task = new AddImageToArrayListAsyncTask(selectedImage, new OnAsyncTaskState() {
@Override
public void startActivityForResult()
{
hideProgressDialog();
if(context instanceof MainActivity)
{
((MainActivity)context).startActivityForRecentEdits();
}
}
});
task.execute();
}
});
}
else
{
holder.itemView.setOnClickListener(null);
}
// holder.delete.setOnClickListener(new View.OnClickListener()
// {
// @Override
// public void onClick(View v)
// {
// final AlertDialog.Builder builder = new AlertDialog.Builder(context);
// builder.setTitle("Delete Image");
// builder.setIcon(R.drawable.delete);
// builder.setMessage("Are sure you want to delete?");
// builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
// @Override
// public void onClick(DialogInterface dialog, int which)
// {
// if(helper.deleteImage(ids.get(position)))
// {
// ids.remove(position);
// images.remove(position);
// dates.remove(position);
//
//
// Methods.showCustomToast(context,context.getResources().getString(R.string.removed_text));
// notifyDataSetChanged();
// }
// else
// {
// Methods.showCustomToast(context,context.getString(R.string.something_went_wrong_text));
// }
//
// }
// });
// builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
// @Override
// public void onClick(DialogInterface dialog, int which) {
//
// }
// });
// builder.show();
// }
// });
}
@Override
public int getItemCount()
{
if(images.isEmpty())
{
return 0;
}
return Math.max(images.size(), 5);
}
public class MyViewHolder extends RecyclerView.ViewHolder
{
ImageView image;
TextView date;
ImageView delete;
public MyViewHolder(@NonNull View view)
{
super(view);
image = view.findViewById(R.id.image);
date = view.findViewById(R.id.date);
delete = view.findViewById(R.id.delete);
Animation top = AnimationUtils.loadAnimation(context, R.anim.bottomtotop);
top.setDuration(500);
view.setAnimation(top);
top.start();
}
}
public void showProgressDialog()
{
if(dialog == null)
{
dialog = new Dialog(context,R.style.CustomBottomSheetDialogTheme);
}
View view = LayoutInflater.from(context).inflate(R.layout.progress_dialog,null);
ProgressBar bar = view.findViewById(R.id.progressBar);
bar.setVisibility(View.VISIBLE);
// Glide.with(context).asGif().load(R.drawable.loading_gif).into(bar);
dialog.setContentView(view,new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
dialog.show();
}
public void hideProgressDialog()
{
if(dialog != null)
{
View view = LayoutInflater.from(context).inflate(R.layout.progress_dialog,null);
ProgressBar bar = view.findViewById(R.id.progressBar);
bar.setVisibility(View.GONE);
dialog.setContentView(view,new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
dialog.hide();
}
}
}
package com.app.smartphotoeditor.adapters;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.sba.sinhalaphotoeditor.R;
import com.sba.sinhalaphotoeditor.callbacks.OnTextAttributesChangedListner;
import com.sba.sinhalaphotoeditor.model.TextViewPlus;
import java.util.ArrayList;
import java.util.HashMap;
import de.hdodenhof.circleimageview.CircleImageView;
public class ShadowColorAdapter extends RecyclerView.Adapter<ShadowColorAdapter.MyViewHolder>
{
private Context context;
private ArrayList<Integer> colorList;
private OnTextAttributesChangedListner listner;
private HashMap<Integer, ImageView> viewList;
private TextViewPlus selectedTextView;
public ShadowColorAdapter(Context context,TextViewPlus selectedTextView, OnTextAttributesChangedListner listner)
{
this.context = context;
this.listner = listner;
this.selectedTextView = selectedTextView;
viewList = new HashMap<Integer, ImageView>();
colorList = new ArrayList<>();
setColorsList();
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
{
View view = LayoutInflater.from(context).inflate(R.layout.text_color_row,null,false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, final int position)
{
if(colorList != null && colorList.size() > position)
{
viewList.put(position,holder.is_selected);
ColorDrawable colorDrawable = new ColorDrawable(colorList.get(position));
holder.color_lay.setImageDrawable(colorDrawable);
holder.color_lay.setClipToOutline(true);
if(selectedTextView != null)
{
if(selectedTextView.getShadowColor() == colorList.get(position))
{
ImageView view = viewList.get(position);
if(view != null)
{
view.setVisibility(View.VISIBLE);
}
}
}
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
listner.onTextShadowColorChanged(colorList.get(position));
ArrayList<Integer> keyList = new ArrayList<>(viewList.keySet());
for(int i = 0; i < keyList.size(); i++)
{
if(position == keyList.get(i))
{
if (viewList.get(keyList.get(i)) != null)
{
ImageView view = viewList.get(keyList.get(i));
if (view != null)
{
view.setVisibility(View.VISIBLE);
}
}
}
else
{
ImageView view = viewList.get(keyList.get(i));
if(view != null)
{
view.setVisibility(View.GONE);
}
}
}
}
});
}
}
@Override
public int getItemCount()
{
return colorList.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder
{
CircleImageView color_lay;
ImageView is_selected;
private MyViewHolder(@NonNull View itemView)
{
super(itemView);
color_lay = itemView.findViewById(R.id.color_lay);
is_selected = itemView.findViewById(R.id.is_selected);
}
}
private void setColorsList()
{
colorList.add(Color.BLACK);
colorList.add(Color.WHITE);
colorList.add(Color.GRAY);
colorList.add(Color.LTGRAY);
colorList.add(Color.RED);
colorList.add(Color.GREEN);
colorList.add(Color.DKGRAY);
colorList.add(Color.BLUE);
colorList.add(Color.YELLOW);
colorList.add(Color.CYAN);
colorList.add(Color.MAGENTA);
if(selectedTextView != null)
{
for(int i = 0; i < colorList.size(); i++)
{
if(colorList.get(i) == selectedTextView.getShadowColor())
{
colorList.remove(i);
colorList.add(0,selectedTextView.getShadowColor());
notifyDataSetChanged();
break;
}
}
}
}
}
package com.app.smartphotoeditor.adapters;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.sba.sinhalaphotoeditor.R;
import java.util.ArrayList;
public class StickerAdapter extends RecyclerView.Adapter<StickerAdapter.MyViewHolder>
{
private ArrayList<String> imageList;
private Context context;
public StickerAdapter(Context context,ArrayList<String> imageList)
{
this.context = context;
this.imageList = imageList;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
{
View view = LayoutInflater.from(context).inflate(R.layout.sticker_row,null);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position)
{
if(imageList != null && imageList.size() > position)
{
Glide.with(context).load(imageList.get(position)).into(holder.sticker);
}
}
@Override
public int getItemCount()
{
if(imageList != null)
return imageList.size();
else
return 0;
}
public class MyViewHolder extends RecyclerView.ViewHolder
{
ImageView sticker;
public MyViewHolder(@NonNull View itemView)
{
super(itemView);
sticker = itemView.findViewById(R.id.sticker);
}
}
}
package com.app.smartphotoeditor.adapters;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
import com.sba.sinhalaphotoeditor.fragments.StickerFragment;
import com.sba.sinhalaphotoeditor.model.FirebaseStickerCategory;
import java.util.ArrayList;
public class StickerViewPagerAdapter extends FragmentStatePagerAdapter
{
private ArrayList<FirebaseStickerCategory> categoryList;
public StickerViewPagerAdapter(@NonNull FragmentManager fm,ArrayList<FirebaseStickerCategory> categoryList)
{
super(fm);
this.categoryList = categoryList;
}
@NonNull
@Override
public Fragment getItem(int position)
{
if(categoryList != null && categoryList.size() > position)
{
return new StickerFragment(categoryList.get(position));
}
return null;
}
@Override
public int getCount()
{
if(categoryList != null)
return categoryList.size();
else
return 0;
}
}
package com.app.smartphotoeditor.adapters;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.sba.sinhalaphotoeditor.R;
import com.sba.sinhalaphotoeditor.callbacks.OnTextAttributesChangedListner;
import com.sba.sinhalaphotoeditor.model.TextViewPlus;
import java.util.ArrayList;
import java.util.HashMap;
import de.hdodenhof.circleimageview.CircleImageView;
public class TextColorAdapter extends RecyclerView.Adapter<TextColorAdapter.MyViewHolder>
{
private Context context;
private ArrayList<Integer> colorList;
private OnTextAttributesChangedListner listner;
private HashMap<Integer, ImageView> viewList;
private TextViewPlus selectedTextView;
public TextColorAdapter(Context context, TextViewPlus selectedTextView,OnTextAttributesChangedListner listner)
{
this.context = context;
this.listner = listner;
this.selectedTextView = selectedTextView;
colorList = new ArrayList<>();
viewList = new HashMap<Integer, ImageView>();
setColorsList();
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
{
View view = LayoutInflater.from(context).inflate(R.layout.text_color_row,null,false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, final int position)
{
if(colorList != null && colorList.size() > position)
{
viewList.put(position,holder.is_selected);
holder.color_lay.setClipToOutline(true);
ColorDrawable colorDrawable = new ColorDrawable(colorList.get(position));
holder.color_lay.setImageDrawable(colorDrawable);
holder.color_lay.setImageDrawable(colorDrawable);
if(selectedTextView != null)
{
if(selectedTextView.getTextColor() == colorList.get(position))
{
ImageView view = viewList.get(position);
if(view != null)
{
view.setVisibility(View.VISIBLE);
}
}
}
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listner.onTextColorChanged(colorList.get(position));
ArrayList<Integer> keyList = new ArrayList<>(viewList.keySet());
for(int i = 0; i < keyList.size(); i++)
{
if(position == keyList.get(i))
{
if (viewList.get(keyList.get(i)) != null)
{
ImageView view = viewList.get(keyList.get(i));
if (view != null)
{
view.setVisibility(View.VISIBLE);
}
}
}
else
{
ImageView view = viewList.get(keyList.get(i));
if(view != null)
{
view.setVisibility(View.GONE);
}
}
}
}
});
}
}
@Override
public int getItemCount()
{
return colorList.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder
{
CircleImageView color_lay;
ImageView is_selected;
private MyViewHolder(@NonNull View itemView)
{
super(itemView);
color_lay = itemView.findViewById(R.id.color_lay);
is_selected = itemView.findViewById(R.id.is_selected);
}
}
private void setColorsList()
{
colorList.add(Color.BLACK);
colorList.add(Color.WHITE);
colorList.add(Color.GRAY);
colorList.add(Color.LTGRAY);
colorList.add(Color.RED);
colorList.add(Color.GREEN);
colorList.add(Color.BLUE);
colorList.add(Color.DKGRAY);
colorList.add(Color.YELLOW);
colorList.add(Color.CYAN);
colorList.add(Color.MAGENTA);
if(selectedTextView != null)
{
for(int i = 0; i < colorList.size(); i++)
{
if(colorList.get(i) == selectedTextView.getTextColor())
{
colorList.remove(i);
colorList.add(0,selectedTextView.getTextColor());
notifyDataSetChanged();
break;
}
}
}
}
}
package com.app.smartphotoeditor.adapters;
import android.graphics.drawable.Drawable;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
import com.sba.sinhalaphotoeditor.fragments.WalkthroughPagerFragment;
import java.util.ArrayList;
public class WalkthroughPagerAdapter extends FragmentStatePagerAdapter
{
private ArrayList<Drawable> image1 = new ArrayList<Drawable>();
private ArrayList<Drawable> image2 = new ArrayList<Drawable>();
private ArrayList<Drawable> image3 = new ArrayList<Drawable>();
private ArrayList<String> titles = new ArrayList<>();
private ArrayList<String> description = new ArrayList<>();
public WalkthroughPagerAdapter(@NonNull FragmentManager fm, ArrayList<Drawable> image1, ArrayList<Drawable> image2, ArrayList<Drawable> image3, ArrayList<String> titles, ArrayList<String> description)
{
super(fm);
this.image1 = image1;
this.image2 = image2;
this.image3 = image3;
this.titles = titles;
this.description = description;
}
@NonNull
@Override
public Fragment getItem(int position)
{
Drawable im1;
Drawable im2;
Drawable im3;
if((image1.size() - 1) >= position)
{
im1 = image1.get(position);
}
else
{
im1 = null;
}
if((image2.size() - 1) >= position)
{
im2 = image2.get(position);
}
else
{
im2 = null;
}
if((image3.size() - 1) >= position)
{
im3 = image3.get(position);
}
else
{
im3 = null;
}
WalkthroughPagerFragment fragment = new WalkthroughPagerFragment(im1,im2,im3,titles.get(position),description.get(position));
return fragment;
}
@Override
public int getCount()
{
return titles.size();
}
}
package com.app.smartphotoeditor.asynctask;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import com.app.smartphotoeditor.config.ImageList;
import com.app.smartphotoeditor.listeners.OnAsyncTaskState;
public class AddImageToArrayListAsyncTask extends AsyncTask<Void,Void,Void>
{
private Bitmap imageToBeAdded;
private OnAsyncTaskState listner;
public AddImageToArrayListAsyncTask(Bitmap imageToBeAdded, OnAsyncTaskState listner)
{
this.imageToBeAdded = imageToBeAdded;
this.listner = listner;
}
@Override
protected void onPreExecute()
{
super.onPreExecute();
}
@Override
protected void onPostExecute(Void aVoid)
{
listner.startActivityForResult();
super.onPostExecute(aVoid);
}
@Override
protected Void doInBackground(Void... voids)
{
if(imageToBeAdded != null)
{
ImageList.getInstance().addBitmap(imageToBeAdded,true);
}
return null;
}
}
\ No newline at end of file
package com.app.smartphotoeditor.database;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import androidx.annotation.Nullable;
import com.app.smartphotoeditor.sdk.Methods;
import java.io.ByteArrayOutputStream;
public class DatabaseHelper extends SQLiteOpenHelper
{
private static final String DATABASE_NAME = "Images.db";
private static final String TABLE_NAME = "Images";
private static final String COL_1 = "Id";
private static final String COL_2 = "Image";
private static final String COL_3 = "DateTime";
private static final String USER_TABLE_NAME = "users";
private static final String USER_TABLE_COL_1 = "id";
private static final String USER_TABLE_COL_2 = "image";
private static final int DATABASE_VERSION = 3;
private Context context;
public DatabaseHelper(@Nullable Context context)
{
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.context = context;
}
@Override
public void onCreate(SQLiteDatabase db)
{
db.execSQL("CREATE TABLE " + TABLE_NAME + "(Id INTEGER PRIMARY KEY AUTOINCREMENT,Image BLOB,DateTime TEXT NOT NULL)");
db.execSQL("CREATE TABLE " + USER_TABLE_NAME + "(id INTEGER PRIMARY KEY AUTOINCREMENT,image BLOB NOT NULL)");
}
public void createTableAgain(SQLiteDatabase db)
{
db.execSQL("CREATE TABLE " + TABLE_NAME + "(Id INTEGER PRIMARY KEY AUTOINCREMENT,Image BLOB,DateTime TEXT NOT NULL)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
db.execSQL("DROP TABLE " + TABLE_NAME);
createTableAgain(db);
}
public boolean AddImage(byte[] image,String date)
{
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(COL_2,image);
values.put(COL_3,date);
long res = db.insert(TABLE_NAME,null,values);
if(res < 0)
{
return false;
}
else
{
return true;
}
}
public boolean AddUserProfilePicture(byte[] image)
{
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(USER_TABLE_COL_2,image);
long res = db.insert(USER_TABLE_NAME,null,values);
if(res < 0)
{
return false;
}
else
{
return true;
}
}
public Cursor GetAllImages()
{
//deleteUnnessaryImages();
SQLiteDatabase db = this.getWritableDatabase();
return db.rawQuery("SELECT * FROM " + TABLE_NAME + " ORDER BY " + COL_1 + " DESC",null);
}
public Cursor GetAllImagesASC()
{
SQLiteDatabase db = this.getWritableDatabase();
return db.rawQuery("SELECT * FROM " + TABLE_NAME + " ORDER BY " + COL_1 + " ASC",null);
}
public byte[] getBytes(Bitmap bitmap)
{
if(bitmap != null)
{
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 0, stream);
return stream.toByteArray();
}
return null;
}
public Bitmap getImage(byte[] image)
{
return BitmapFactory.decodeByteArray(image, 0, image.length);
}
public boolean deleteImage(int id)
{
SQLiteDatabase db = this.getWritableDatabase();
int res = db.delete(TABLE_NAME,"Id = ?",new String[]{String.valueOf(id)});
if(res > 0)
{
return true;
}
return false;
}
public void deleteAll()
{
SQLiteDatabase db = this.getWritableDatabase();
db.execSQL("DELETE FROM " + TABLE_NAME);
}
public int getNumberOfRows()
{
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_NAME,null);
int value = cursor.getCount();
cursor.close();
return value;
}
public void deleteUnnessaryImages()
{
int recentImageMaxSize = 5;
if(getNumberOfRows() > recentImageMaxSize)
{
int numberOfItemsNeedToDeleted = getNumberOfRows() - recentImageMaxSize;
Cursor cursor = GetAllImagesASC();
while (cursor.moveToNext())
{
numberOfItemsNeedToDeleted--;
if(numberOfItemsNeedToDeleted == -1)
{
break;
}
deleteImage(cursor.getInt(0));
Methods.deleteFileFromInternalStorage(context,cursor.getString(2));
}
cursor.close();
}
}
}
package com.app.smartphotoeditor.listeners;
import com.sba.sinhalaphotoeditor.model.GalleryImage;
public interface OnAFileAddedListner
{
public void fileAdded(GalleryImage image);
public void notifyAdapter();
}
package com.app.smartphotoeditor.listeners;
public interface OnAsyncTaskState
{
public void startActivityForResult();
}
package com.app.smartphotoeditor.listeners;
public interface OnAuthenticationState
{
public void onAuthenticationSuccess();
public void onAuthenticationFailed();
}
package com.app.smartphotoeditor.listeners;
import android.graphics.Bitmap;
import com.zomato.photofilters.imageprocessors.Filter;
public interface OnBitmapChanged
{
public void bitmapChanged(Bitmap bitmap, Filter filter);
}
package com.app.smartphotoeditor.listeners;
public interface OnFirebaseStickerChangedListener
{
public void onCategoryChanged(FirebaseStickerCategory category);
}
package com.app.smartphotoeditor.listeners;
import java.io.File;
public interface OnItemClickListner
{
public void onClicked(File file);
}
package com.app.smartphotoeditor.listeners;
import android.graphics.Typeface;
public interface OnTextAttributesChangedListner
{
public void onTextColorChanged(int color);
public void onTextShadowColorChanged(int color);
public void onTextFontChanged(Typeface typeFace);
}
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/color_gray"
tools:context=".activities.AddEffects">
<ImageView
android:id="@+id/userSelectedImage"
android:layout_width="match_parent"
android:layout_height="0dp"
android:adjustViewBounds="true"
android:scaleType="centerInside"
app:layout_constraintBottom_toTopOf="@+id/filterRecyclerView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.gms.ads.AdView
android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
app:adSize="BANNER"
app:adUnitId="ca-app-pub-3538783908730049/1216781500"
app:layout_constraintBottom_toTopOf="@+id/constraintLayout2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/filterRecyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/material_dark_blue"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:scrollbars="none"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<ProgressBar
android:id="@+id/progress_bar"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:visibility="gone"
style="?android:attr/progressBarStyle"
android:indeterminateDrawable="@drawable/progress_bar_material"
app:layout_constraintBottom_toBottomOf="@+id/userSelectedImage"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/constraintLayout2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="@+id/userSelectedImage">
<ImageView
android:id="@+id/expandIcon"
android:layout_width="match_parent"
android:layout_height="30dp"
android:background="@drawable/top_rounded_background"
android:src="@drawable/iphone_swipe_up"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/subFiltersLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/expandIcon"
app:layout_constraintVertical_bias="0.0"
tools:visibility="visible">
<TextView
android:id="@+id/textView20"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:layout_marginTop="8dp"
android:fontFamily="@font/gemunulibrebold"
android:text="Brightness"
android:textColor="@android:color/white"
android:textSize="17sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.warkiz.tickseekbar.TickSeekBar
android:id="@+id/listener"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginRight="@dimen/_32sdp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/textView20"
app:layout_constraintTop_toBottomOf="@+id/textView20"
app:tsb_max="100"
app:tsb_show_tick_marks_type="none"
app:tsb_thumb_color="#FFFFFF"
app:tsb_thumb_size="20dp"
app:tsb_ticks_count="1"
app:tsb_track_background_color="#FFFFFF"
app:tsb_track_background_size="20dp"
app:tsb_track_progress_color="#FFFFFF"
app:tsb_track_progress_size="3dp" />
<TextView
android:id="@+id/textView21"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:fontFamily="@font/gemunulibrebold"
android:text="Vignette"
android:textColor="@android:color/white"
android:textSize="17sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="@+id/listener"
app:layout_constraintTop_toBottomOf="@+id/listener" />
<com.warkiz.tickseekbar.TickSeekBar
android:id="@+id/listener2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
app:layout_constraintEnd_toEndOf="@+id/listener"
app:layout_constraintStart_toStartOf="@+id/textView21"
app:layout_constraintTop_toBottomOf="@+id/textView21"
app:tsb_max="255"
app:tsb_show_tick_marks_type="none"
app:tsb_thumb_color="#FFFFFF"
app:tsb_thumb_size="20dp"
app:tsb_ticks_count="1"
app:tsb_track_background_color="#FFFFFF"
app:tsb_track_background_size="9dp"
app:tsb_track_progress_color="#FFFFFF"
app:tsb_track_progress_size="3dp" />
<TextView
android:id="@+id/textView22"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:fontFamily="@font/gemunulibrebold"
android:text="Saturation"
android:textColor="@android:color/white"
android:textSize="17sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="@+id/listener2"
app:layout_constraintTop_toBottomOf="@+id/listener2" />
<com.warkiz.tickseekbar.TickSeekBar
android:id="@+id/listener3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginBottom="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/listener2"
app:layout_constraintHorizontal_bias="0.25"
app:layout_constraintStart_toStartOf="@+id/textView22"
app:layout_constraintTop_toBottomOf="@+id/textView22"
app:tsb_max="10"
app:tsb_show_tick_marks_type="none"
app:tsb_thumb_color="#FFFFFF"
app:tsb_thumb_size="20dp"
app:tsb_ticks_count="1"
app:tsb_track_background_color="#FFFFFF"
app:tsb_track_background_size="9dp"
app:tsb_track_progress_color="#FFFFFF"
app:tsb_track_progress_size="3dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/baseLayout"
android:background="#000000"
tools:context=".activities.AddStickerOnImage">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
style="@android:style/Widget.ActionBar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/material_dark_blue"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tool_bar_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:ellipsize="end"
android:fontFamily="@font/bindumathi"
android:gravity="left"
android:maxLines="1"
android:text="@string/add_text"
android:textColor="@android:color/white"
android:textSize="19sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/img_delete_text_container"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/img_done_container"
android:layout_width="wrap_content"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/img_done"
android:layout_width="35dp"
android:layout_height="0dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:src="@drawable/right_icon"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/img_add_sticker_container"
android:layout_width="wrap_content"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/img_done_container"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/img_sticker"
android:layout_width="35dp"
android:layout_height="0dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:src="@drawable/addsticker"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/img_delete_text_container"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:onClick="removeStickerView"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/img_add_sticker_container"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/img_delete_text"
android:layout_width="35dp"
android:layout_height="0dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:src="@drawable/delete_icon"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.appcompat.widget.Toolbar>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/workingLayout"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolbar">
<ImageView
android:id="@+id/sourceImageView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<com.github.chuross.library.ExpandableLayout
android:id="@+id/explandableLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:exl_collapseHeight="45dp"
app:exl_duration="100"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/expandIcon"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@drawable/top_rounded_background"
android:src="@drawable/iphone_swipe_up"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</com.github.chuross.library.ExpandableLayout>
<ProgressBar
android:id="@+id/progress_bar"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:visibility="gone"
tools:visibility="visible"
style="?android:attr/progressBarStyle"
android:indeterminateDrawable="@drawable/progress_bar_material"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="@+id/explandableLayout"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
tools:context=".activities.AdjustImage">
<ImageView
android:id="@+id/imageView4"
android:layout_width="match_parent"
android:layout_height="0dp"
android:adjustViewBounds="true"
android:background="@drawable/bottom_curve_background"
app:layout_constraintBottom_toTopOf="@+id/guideline6"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/adjustImage"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginStart="32dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="32dp"
android:layout_marginBottom="24dp"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
app:layout_constraintBottom_toTopOf="@+id/guideline6"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/imageView4">
<TextView
android:id="@+id/textView20"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:layout_marginTop="24dp"
android:fontFamily="@font/gemunulibrebold"
android:text="Blur"
android:textColor="@color/darkAsh"
android:textSize="17sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.warkiz.tickseekbar.TickSeekBar
android:id="@+id/listener"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginRight="@dimen/_32sdp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/textView20"
app:layout_constraintTop_toBottomOf="@+id/textView20"
app:tsb_max="25"
app:tsb_show_tick_marks_type="none"
app:tsb_thumb_color="@color/darkAsh"
app:tsb_thumb_size="20dp"
app:tsb_ticks_count="1"
app:tsb_track_background_color="@color/darkAsh"
app:tsb_track_background_size="20dp"
app:tsb_track_progress_color="#FFFFFF"
app:tsb_track_progress_size="3dp" />
<TextView
android:id="@+id/textView21"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:fontFamily="@font/gemunulibrebold"
android:text="Saturation"
android:textColor="@color/darkAsh"
android:textSize="17sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="@+id/listener"
app:layout_constraintTop_toBottomOf="@+id/listener" />
<com.warkiz.tickseekbar.TickSeekBar
android:id="@+id/listener2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
app:layout_constraintEnd_toEndOf="@+id/listener"
app:layout_constraintStart_toStartOf="@+id/textView21"
app:layout_constraintTop_toBottomOf="@+id/textView21"
app:tsb_max="5"
app:tsb_show_tick_marks_type="none"
app:tsb_thumb_color="@color/darkAsh"
app:tsb_thumb_size="20dp"
app:tsb_ticks_count="1"
app:tsb_track_background_color="@color/darkAsh"
app:tsb_track_background_size="9dp"
app:tsb_track_progress_color="#FFFFFF"
app:tsb_track_progress_size="3dp" />
<TextView
android:id="@+id/textView22"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:fontFamily="@font/gemunulibrebold"
android:text="Brightness"
android:textColor="@color/darkAsh"
android:textSize="17sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="@+id/listener2"
app:layout_constraintTop_toBottomOf="@+id/listener2" />
<com.warkiz.tickseekbar.TickSeekBar
android:id="@+id/listener3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
app:layout_constraintEnd_toEndOf="@+id/listener2"
app:layout_constraintHorizontal_bias="0.25"
app:layout_constraintStart_toStartOf="@+id/textView22"
app:layout_constraintTop_toBottomOf="@+id/textView22"
app:tsb_max="250"
app:tsb_show_tick_marks_type="none"
app:tsb_thumb_color="@color/darkAsh"
app:tsb_thumb_size="20dp"
app:tsb_ticks_count="1"
app:tsb_track_background_color="@color/darkAsh"
app:tsb_track_background_size="9dp"
app:tsb_track_progress_color="#FFFFFF"
app:tsb_track_progress_size="3dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.44" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".activities.DrawOnBitmapActivity">
<com.sba.sinhalaphotoeditor.custom.views.PaintView
android:id="@+id/paintView"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@+id/explandableLayout"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolbar" />
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
style="@android:style/Widget.ActionBar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/material_dark_blue"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tool_bar_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:ellipsize="end"
android:gravity="left"
android:maxLines="1"
android:text="Draw"
android:textColor="@android:color/white"
android:textSize="19sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/img_undo_container"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/img_done_container"
android:layout_width="wrap_content"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/img_done"
android:layout_width="32dp"
android:layout_height="0dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:src="@drawable/saveimage"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/img_redo_container"
android:layout_width="wrap_content"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/img_done_container"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/img_redo"
android:layout_width="32dp"
android:layout_height="0dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:src="@drawable/redo"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/img_undo_container"
android:layout_width="wrap_content"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/img_redo_container"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/img_undo"
android:layout_width="32dp"
android:layout_height="0dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:src="@drawable/undo"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.appcompat.widget.Toolbar>
<com.github.chuross.library.ExpandableLayout
android:id="@+id/explandableLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:exl_collapseHeight="45dp"
app:exl_duration="100"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/expandIcon"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@drawable/top_rounded_background"
android:src="@drawable/iphone_swipe_up"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</com.github.chuross.library.ExpandableLayout>
<ProgressBar
android:id="@+id/loading"
android:layout_width="50dp"
android:layout_height="50dp"
app:layout_constraintBottom_toBottomOf="@+id/paintView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:visibility="gone"
tools:visibility="visible"
style="?android:attr/progressBarStyle"
android:indeterminateDrawable="@drawable/progress_bar_material"
app:layout_constraintTop_toBottomOf="@+id/toolbar" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white">
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/userSavingImage"
android:layout_width="0dp"
android:layout_height="0dp"
android:adjustViewBounds="true"
android:background="@android:color/transparent"
android:scaleType="centerCrop"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@+id/guideline8"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/shareImageView"
android:layout_width="match_parent"
android:layout_height="70dp"
android:layout_marginStart="24dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="24dp"
android:background="@drawable/round_bg_ash"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/guideline8" />
<ImageView
android:id="@+id/shareFinalImage"
android:layout_width="@dimen/_40sdp"
android:layout_height="@dimen/_40sdp"
android:layout_marginStart="@dimen/_32sdp"
android:src="@drawable/share"
app:layout_constraintBottom_toBottomOf="@+id/shareImageView"
app:layout_constraintStart_toStartOf="@+id/shareImageView"
app:layout_constraintTop_toTopOf="@+id/shareImageView" />
<TextView
android:id="@+id/fromGalery"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/bindumathi"
android:gravity="center"
android:text="@string/share_image_text"
android:textColor="@color/colorPrimary"
android:textSize="19sp"
android:textStyle="bold"
android:typeface="sans"
app:layout_constraintBottom_toBottomOf="@+id/shareFinalImage"
app:layout_constraintStart_toStartOf="@+id/downloadImageText"
app:layout_constraintTop_toTopOf="@+id/shareFinalImage" />
<ImageView
android:id="@+id/downloadImageView"
android:layout_width="match_parent"
android:layout_height="70dp"
android:layout_marginStart="24dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="24dp"
android:background="@drawable/round_bg_ash"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/shareImageView" />
<ImageView
android:id="@+id/saveFinalImage"
android:layout_width="@dimen/_40sdp"
android:layout_height="@dimen/_40sdp"
android:layout_marginStart="@dimen/_32sdp"
android:src="@drawable/download"
app:layout_constraintBottom_toBottomOf="@+id/downloadImageView"
app:layout_constraintStart_toStartOf="@+id/downloadImageView"
app:layout_constraintTop_toBottomOf="@+id/shareImageView"
app:layout_constraintVertical_bias="0.566" />
<TextView
android:id="@+id/downloadImageText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_32sdp"
android:fontFamily="@font/bindumathi"
android:gravity="center"
android:text="@string/download_image_text"
android:textColor="@color/colorPrimary"
android:textSize="19sp"
android:textStyle="bold"
android:typeface="sans"
app:layout_constraintBottom_toBottomOf="@+id/saveFinalImage"
app:layout_constraintStart_toEndOf="@+id/saveFinalImage"
app:layout_constraintTop_toTopOf="@+id/saveFinalImage" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.5" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
xmlns:tools="http://schemas.android.com/tools"
android:background="@android:color/transparent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto">
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/filter_preview"
android:layout_width="@dimen/_40sdp"
android:layout_height="@dimen/_40sdp"
android:layout_marginTop="4dp"
android:src="@drawable/loading_image_placeholder"
app:civ_border_color="#FFFFFF"
app:civ_border_width="2dp"
app:layout_constraintEnd_toEndOf="@+id/filter_name"
app:layout_constraintStart_toStartOf="@+id/filter_name"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/filter_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="2dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="2dp"
android:gravity="center"
android:maxLines="1"
android:minWidth="55dp"
android:textColor="@android:color/white"
android:textSize="12sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/filter_preview"
app:layout_constraintVertical_bias="1.0"
tools:text="Filter Name" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment