diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a4138434b..be3e1238b 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -4,39 +4,30 @@ package="org.fossasia.phimpme"> - - - - - - - - - - - + + + + + + + + + + + + + @@ -55,7 +46,6 @@ android:largeHeap="true" android:supportsRtl="true" android:theme="@style/AppTheme"> - + + android:taskAffinity="" /> + - + + - + + - + + - + + + android:theme="@style/Theme.AppCompat.NoActionBar"> @@ -264,9 +260,9 @@ + android:theme="@style/Theme.AppCompat.NoActionBar"> @@ -278,11 +274,14 @@ + + android:theme="@style/Theme.AppCompat.NoActionBar"> + + + + android:windowSoftInputMode="adjustPan" + /> + + - + + - \ No newline at end of file + diff --git a/app/src/main/java/org/fossasia/phimpme/MyApplication.java b/app/src/main/java/org/fossasia/phimpme/MyApplication.java index f5cd000fc..c5a0387b1 100644 --- a/app/src/main/java/org/fossasia/phimpme/MyApplication.java +++ b/app/src/main/java/org/fossasia/phimpme/MyApplication.java @@ -5,7 +5,6 @@ import android.os.StrictMode; import android.util.Log; import androidx.multidex.MultiDex; - import com.squareup.leakcanary.LeakCanary; import com.squareup.leakcanary.RefWatcher; import com.twitter.sdk.android.core.DefaultLogger; @@ -55,6 +54,7 @@ public void onCreate() { .debug(true) .build(); Twitter.initialize(config); + /** Realm initialization */ Realm.init(this); RealmConfiguration realmConfiguration = diff --git a/app/src/main/java/org/fossasia/phimpme/gallery/activities/LFMainActivity.java b/app/src/main/java/org/fossasia/phimpme/gallery/activities/LFMainActivity.java index 4fbd63ce5..31789fda3 100644 --- a/app/src/main/java/org/fossasia/phimpme/gallery/activities/LFMainActivity.java +++ b/app/src/main/java/org/fossasia/phimpme/gallery/activities/LFMainActivity.java @@ -6,6 +6,7 @@ import static org.fossasia.phimpme.gallery.data.base.SortingMode.SIZE; import static org.fossasia.phimpme.utilities.ActivitySwitchHelper.context; +import android.Manifest; import android.animation.Animator; import android.annotation.TargetApi; import android.app.Dialog; @@ -64,6 +65,7 @@ import androidx.appcompat.widget.SwitchCompat; import androidx.appcompat.widget.Toolbar; import androidx.cardview.widget.CardView; +import androidx.core.app.ActivityCompat; import androidx.core.app.ActivityOptionsCompat; import androidx.core.content.ContextCompat; import androidx.core.view.GravityCompat; @@ -128,6 +130,7 @@ import org.fossasia.phimpme.gallery.util.ContentHelper; import org.fossasia.phimpme.gallery.util.CustomNestedView; import org.fossasia.phimpme.gallery.util.Measure; +import org.fossasia.phimpme.gallery.util.PermissionUtils; import org.fossasia.phimpme.gallery.util.PreferenceUtil; import org.fossasia.phimpme.gallery.util.StringUtils; import org.fossasia.phimpme.gallery.util.ThemeHelper; @@ -1219,33 +1222,15 @@ public final void onActivityResult( // endregion private void requestSdCardPermissions() { - final AlertDialog.Builder dialogBuilder = - new AlertDialog.Builder(LFMainActivity.this, getDialogStyle()); - - AlertDialogsHelper.getTextDialog( - LFMainActivity.this, - dialogBuilder, - R.string.sd_card_write_permission_title, - R.string.sd_card_permissions_message, - null); - - dialogBuilder.setPositiveButton( - getString(R.string.ok_action).toUpperCase(), - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) - startActivityForResult( - new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE), REQUEST_CODE_SD_CARD_PERMISSIONS); - } - }); - dialogBuilder.setNegativeButton(getString(R.string.cancel).toUpperCase(), null); - AlertDialog alertDialog = dialogBuilder.create(); - alertDialog.show(); - AlertDialogsHelper.setButtonTextColor( - new int[] {DialogInterface.BUTTON_POSITIVE, DialogInterface.BUTTON_NEGATIVE}, - getAccentColor(), - alertDialog); + if (ActivityCompat.shouldShowRequestPermissionRationale( + this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + showPermissionAlertDialog(); + } else { + ActivityCompat.requestPermissions( + this, + new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE}, + REQUEST_CODE_SD_CARD_PERMISSIONS); + } } // region UI/GRAPHIC @@ -2040,6 +2025,12 @@ public void onClick(DialogInterface dialog, int which) { case R.id.delete_action: getNavigationBar(); + if (!PermissionUtils.checkPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + requestSdCardPermissions(); + swipeRefreshLayout.setRefreshing(false); + invalidateOptionsMenu(); + return true; + } class DeletePhotos extends AsyncTask { private boolean succ = false; @@ -2249,7 +2240,11 @@ mDrawerLayout, getResources().getString(R.string.single_image_removed)) new FavouritePhotos(activityContext).execute(); } } - } else requestSdCardPermissions(); + } else { + SnackBarHandler.create( + mDrawerLayout, getResources().getString(R.string.photo_deletion_failed)) + .show(); + } invalidateOptionsMenu(); checkNothing(); @@ -2737,6 +2732,12 @@ public void onClick(DialogInterface dialog, int id) { // endregion case R.id.action_move: + if (!PermissionUtils.checkPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + requestSdCardPermissions(); + swipeRefreshLayout.setRefreshing(false); + invalidateOptionsMenu(); + return true; + } final Snackbar[] snackbar = {null}; final ArrayList dr = getselecteditems(); final String[] pathofalbum = {null}; @@ -2854,7 +2855,12 @@ public void onClick(DialogInterface dialog, int id) { getAccentColor(), alert); - } else requestSdCardPermissions(); + } else { + SnackBarHandler.showWithBottomMargin( + mDrawerLayout, + getString(R.string.photo_move_failed), + navigationView.getHeight()); + } swipeRefreshLayout.setRefreshing(false); bottomSheetDialogFragment.dismiss(); @@ -2905,9 +2911,10 @@ public void folderSelected(String path) { mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); new PrepareAlbumTask(activityContext).execute(); } else { - requestSdCardPermissions(); - swipeRefreshLayout.setRefreshing(false); - invalidateOptionsMenu(); + SnackBarHandler.showWithBottomMargin( + mDrawerLayout, + getString(R.string.photo_move_failed), + navigationView.getHeight()); } bottomSheetDialogFragment.dismiss(); } @@ -2930,6 +2937,12 @@ public void folderSelected(String path) { return true; case R.id.action_copy: + if (!PermissionUtils.checkPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + requestSdCardPermissions(); + swipeRefreshLayout.setRefreshing(false); + invalidateOptionsMenu(); + return true; + } bottomSheetDialogFragment = new SelectAlbumBottomSheet(); bottomSheetDialogFragment.setTitle(getString(R.string.copy_to)); bottomSheetDialogFragment.setSelectAlbumInterface( @@ -2945,6 +2958,12 @@ public void folderSelected(String path) { return true; case R.id.renameAlbum: + if (!PermissionUtils.checkPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + requestSdCardPermissions(); + swipeRefreshLayout.setRefreshing(false); + invalidateOptionsMenu(); + return true; + } AlertDialog.Builder renameDialogBuilder = new AlertDialog.Builder(LFMainActivity.this, getDialogStyle()); final EditText editTextNewName = new EditText(getApplicationContext()); @@ -3087,7 +3106,6 @@ public void onClick(View dialog) { mDrawerLayout, getString(R.string.rename_error), navigationView.getHeight()); - requestSdCardPermissions(); } swipeRefreshLayout.setRefreshing(false); } else { @@ -3157,7 +3175,6 @@ public boolean onKey( mDrawerLayout, getString(R.string.rename_error), navigationView.getHeight()); - requestSdCardPermissions(); } swipeRefreshLayout.setRefreshing(false); } else { @@ -4609,7 +4626,44 @@ public void onClick(View view) { snackbar.show(); } - } else asyncActivityRef.requestSdCardPermissions(); + } else { + SnackBarHandler.showWithBottomMargin2( + asyncActivityRef.mDrawerLayout, + asyncActivityRef.getString(R.string.error_copying_files), + asyncActivityRef.navigationView.getHeight(), + Snackbar.LENGTH_SHORT); + } } } + + private void showPermissionAlertDialog() { + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setIcon(R.drawable.ic_caution); + builder.setTitle(R.string.permission_rationale_title); + builder.setMessage(R.string.permission_rationale_storage); + builder.setCancelable(false); + builder.setPositiveButton( + R.string.exit, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + finish(); + } + }); + + builder.setNegativeButton( + R.string.grant_permission, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + ActivityCompat.requestPermissions( + LFMainActivity.this, + new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE}, + REQUEST_CODE_SD_CARD_PERMISSIONS); + } + }); + + AlertDialog alertDialog = builder.create(); + alertDialog.show(); + } } diff --git a/app/src/main/java/org/fossasia/phimpme/gallery/activities/SingleMediaActivity.java b/app/src/main/java/org/fossasia/phimpme/gallery/activities/SingleMediaActivity.java index 12e4345c1..1b086098a 100644 --- a/app/src/main/java/org/fossasia/phimpme/gallery/activities/SingleMediaActivity.java +++ b/app/src/main/java/org/fossasia/phimpme/gallery/activities/SingleMediaActivity.java @@ -820,7 +820,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { SnackBarHandler.showWithBottomMargin( parentView, getString(R.string.new_file_created), - (bottomBar.getHeight() * 2) - 22); + parentView.getHeight() - bottomBar.getTop()); } // adapter.notifyDataSetChanged(); } catch (Exception e) { @@ -828,7 +828,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { } } else SnackBarHandler.showWithBottomMargin( - parentView, "errori random", (bottomBar.getHeight() * 2) - 22); + parentView, "errori random", parentView.getHeight() - bottomBar.getTop()); break; default: break; @@ -871,7 +871,7 @@ private void deleteCurrentMedia() { SnackBarHandler.showWithBottomMargin( parentView, getString(R.string.trashbin_move_onefile), - bottomBar.getHeight() + navigationView.getHeight(), + parentView.getHeight() - bottomBar.getTop(), Snackbar.LENGTH_SHORT); snackbar.setAction( R.string.open, @@ -888,7 +888,7 @@ public void onClick(View view) { SnackBarHandler.showWithBottomMargin( parentView, getApplicationContext().getString(R.string.photo_deleted_msg), - bottomBar.getHeight() + navigationView.getHeight()); + parentView.getHeight() - bottomBar.getTop()); snackbar.show(); } if (!success) { @@ -1210,7 +1210,7 @@ public void onClick(DialogInterface dialog, int id) { SnackBarHandler.showWithBottomMargin( parentView, getString(R.string.photo_deleted_from_fav_msg), - (bottomBar.getHeight() * 2) - 22); + parentView.getHeight() - bottomBar.getTop()); } }); AlertDialog alertDialog = deleteDialog.create(); @@ -1258,7 +1258,7 @@ public void folderSelected(String path) { SnackBarHandler.showWithBottomMargin( relativeLayout, getString(R.string.copied_successfully) + " to " + path, - (bottomBar.getHeight() * 2) - 22); + parentView.getHeight() - bottomBar.getTop()); } } }); @@ -1497,7 +1497,7 @@ public void onClick(DialogInterface dialogInterface, int i) { SnackBarHandler.showWithBottomMargin( parentView, getString(R.string.rename_no_change), - (bottomBar.getHeight() * 2) - 22); + parentView.getHeight() - bottomBar.getTop()); renameDialog.dismiss(); } else { int index = file.getPath().lastIndexOf("/"); @@ -1669,7 +1669,7 @@ public void onClick(DialogInterface dialogInterface, int i) { SnackBarHandler.showWithBottomMargin( parentView, getResources().getString(R.string.add_favourite), - bottomBar.getHeight()); + parentView.getHeight() - bottomBar.getTop()); snackbar.setAction( R.string.openfav, new View.OnClickListener() { @@ -1755,7 +1755,7 @@ public void folderSelected(String path) { SnackBarHandler.showWithBottomMargin( relativeLayout, getString(R.string.photo_moved_successfully) + " to " + path, - (bottomBar.getHeight() * 2) - 22); + parentView.getHeight() - bottomBar.getTop()); } }); bottomSheetDialogFragment.show( @@ -1769,14 +1769,18 @@ public void folderSelected(String path) { AlbumSettings.getSettings(getApplicationContext(), getAlbum()); albumSettings.changeCoverPath(getApplicationContext(), getAlbum().getMedia(0).getPath()); SnackBarHandler.showWithBottomMargin( - parentView, getString(R.string.cover_removed), (bottomBar.getHeight() * 2) - 22); + parentView, + getString(R.string.cover_removed), + parentView.getHeight() - bottomBar.getTop()); } else { AlbumSettings albumSettings = AlbumSettings.getSettings(getApplicationContext(), getAlbum()); albumSettings.changeCoverPath( getApplicationContext(), getAlbum().getCurrentMedia().getPath()); SnackBarHandler.showWithBottomMargin( - parentView, getString(R.string.change_cover), bottomBar.getHeight()); + parentView, + getString(R.string.change_cover), + parentView.getHeight() - bottomBar.getTop()); MenuItem cover = menu.findItem(R.id.action_cover); cover.setTitle("Remove cover image"); } @@ -1936,7 +1940,7 @@ public void onClick(View v) { SnackBarHandler.showWithBottomMargin( parentView, getString(R.string.description_saved), - (bottomBar.getHeight() * 2) - 22); + (parentView.getHeight() - bottomBar.getTop())); } else { databaseHelper.update( new ImageDescModel( @@ -1944,7 +1948,7 @@ public void onClick(View v) { SnackBarHandler.showWithBottomMargin( parentView, getString(R.string.description_updated), - (bottomBar.getHeight() * 2) - 22); + parentView.getHeight() - bottomBar.getTop()); } } }); @@ -1963,7 +1967,7 @@ public void onClick(View v) { SnackBarHandler.showWithBottomMargin( parentView, getString(R.string.description_deleted), - (bottomBar.getHeight() * 2) - 22); + (parentView.getHeight() - bottomBar.getTop())); } } }); diff --git a/app/src/main/java/org/fossasia/phimpme/gallery/activities/SplashScreen.java b/app/src/main/java/org/fossasia/phimpme/gallery/activities/SplashScreen.java index 7217bd612..40ea12ea2 100755 --- a/app/src/main/java/org/fossasia/phimpme/gallery/activities/SplashScreen.java +++ b/app/src/main/java/org/fossasia/phimpme/gallery/activities/SplashScreen.java @@ -15,6 +15,7 @@ import android.widget.RelativeLayout; import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; +import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import butterknife.BindView; import butterknife.ButterKnife; @@ -120,8 +121,8 @@ public void onAnimationCompleted(int loopNumber) { } private void askForPermission() { - String[] permissions = new String[] {Manifest.permission.READ_EXTERNAL_STORAGE}; - PermissionUtils.requestPermissions(this, READ_EXTERNAL_STORAGE_ID, permissions); + ActivityCompat.requestPermissions( + this, new String[] {Manifest.permission.READ_EXTERNAL_STORAGE}, READ_EXTERNAL_STORAGE_ID); } @Override diff --git a/app/src/main/java/org/fossasia/phimpme/gallery/util/PermissionUtils.java b/app/src/main/java/org/fossasia/phimpme/gallery/util/PermissionUtils.java index eceb6e547..f8dd0cd35 100644 --- a/app/src/main/java/org/fossasia/phimpme/gallery/util/PermissionUtils.java +++ b/app/src/main/java/org/fossasia/phimpme/gallery/util/PermissionUtils.java @@ -1,17 +1,14 @@ package org.fossasia.phimpme.gallery.util; import android.Manifest; -import android.app.Activity; import android.content.Context; import android.content.pm.PackageManager; -import androidx.appcompat.app.AppCompatActivity; -import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; /** Created by dnld on 01/04/16. */ public final class PermissionUtils { - private static boolean checkPermission(Context context, String permission) { + public static boolean checkPermission(Context context, String permission) { return ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED; } @@ -19,10 +16,4 @@ private static boolean checkPermission(Context context, String permission) { public static boolean isDeviceInfoGranted(Context context) { return checkPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE); } - - public static void requestPermissions(Object o, int permissionId, String... permissions) { - if (o instanceof Activity) { - ActivityCompat.requestPermissions((AppCompatActivity) o, permissions, permissionId); - } - } } diff --git a/app/src/main/java/org/fossasia/phimpme/utilities/Utils.java b/app/src/main/java/org/fossasia/phimpme/utilities/Utils.java index 752b06304..67bceacb7 100644 --- a/app/src/main/java/org/fossasia/phimpme/utilities/Utils.java +++ b/app/src/main/java/org/fossasia/phimpme/utilities/Utils.java @@ -21,7 +21,6 @@ import android.util.Base64; import android.view.View; import android.widget.Toast; - import androidx.annotation.NonNull; import com.google.android.material.snackbar.Snackbar; import io.realm.Realm; diff --git a/app/src/main/res/layout/activity_pager.xml b/app/src/main/res/layout/activity_pager.xml index ff62dfbed..e7357c7e0 100644 --- a/app/src/main/res/layout/activity_pager.xml +++ b/app/src/main/res/layout/activity_pager.xml @@ -16,6 +16,7 @@ layout="@layout/toolbar" /> @@ -26,7 +27,7 @@ android:layout_height="match_parent" android:layout_above="@+id/toolbar_bottom" android:layout_alignParentBottom="true" - android:layout_alignParentLeft="true" + android:layout_alignParentEnd="true" android:layout_alignParentStart="true" android:layout_alignParentTop="true" /> diff --git a/app/src/main/res/layout/activity_pinterest_share.xml b/app/src/main/res/layout/activity_pinterest_share.xml index 3d7806135..cbd846396 100644 --- a/app/src/main/res/layout/activity_pinterest_share.xml +++ b/app/src/main/res/layout/activity_pinterest_share.xml @@ -22,14 +22,13 @@ android:fillViewport="true" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintBottom_toTopOf="@id/tv_create_board" + app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toBottomOf="@id/toolbar"> - Press back again to exit Photos moved successfully Photo moved successfully + Failed to move photos Copied successfully + Error copying files All photos are already there in the folder No Changes Made! transition_photo diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 3ba4388b7..60be41f5e 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -60,7 +60,7 @@ true 5dp - @style/MyToolbarTheme + @style/MyToolbarTheme