diff options
Diffstat (limited to 'app/src/main/java/app/fedilab/android/activities/SlideMediaActivity.java')
-rw-r--r-- | app/src/main/java/app/fedilab/android/activities/SlideMediaActivity.java | 102 |
1 files changed, 76 insertions, 26 deletions
diff --git a/app/src/main/java/app/fedilab/android/activities/SlideMediaActivity.java b/app/src/main/java/app/fedilab/android/activities/SlideMediaActivity.java index e566b65c0..86381e200 100644 --- a/app/src/main/java/app/fedilab/android/activities/SlideMediaActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/SlideMediaActivity.java @@ -24,6 +24,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; import android.content.pm.PackageManager; +import android.graphics.Color; import android.graphics.Point; import android.graphics.drawable.ColorDrawable; import android.net.Uri; @@ -35,10 +36,12 @@ import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; +import android.view.Window; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; +import androidx.annotation.NonNull; import androidx.appcompat.app.ActionBar; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; @@ -92,13 +95,13 @@ public class SlideMediaActivity extends BaseFragmentActivity implements OnDownlo Intent shareIntent = new Intent(Intent.ACTION_SEND); shareIntent.putExtra(Intent.EXTRA_STREAM, uri); ContentResolver cR = context.getContentResolver(); - if( cR != null && uri != null) { + if (cR != null && uri != null) { shareIntent.setType(cR.getType(uri)); try { startActivity(shareIntent); } catch (Exception ignored) { } - }else { + } else { Toasty.error(context, context.getString(R.string.toast_error), Toasty.LENGTH_LONG).show(); } } else { @@ -123,8 +126,14 @@ public class SlideMediaActivity extends BaseFragmentActivity implements OnDownlo default: setTheme(R.style.TransparentDark); } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + ActivityCompat.postponeEnterTransition(SlideMediaActivity.this); + + } + getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY); setContentView(R.layout.activity_media_pager); + fullscreen = false; media_description = findViewById(R.id.media_description); final int med_desc_timeout = sharedpreferences.getInt(Helper.SET_MED_DESC_TIMEOUT, 3) * 1000; @@ -136,39 +145,37 @@ public class SlideMediaActivity extends BaseFragmentActivity implements OnDownlo ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { - actionBar.setBackgroundDrawable(new ColorDrawable(bgColor)); + + actionBar.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + actionBar.setElevation(0); + LayoutInflater inflater = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE); assert inflater != null; View view = inflater.inflate(R.layout.media_action_bar, new LinearLayout(SlideMediaActivity.this), false); - view.setBackgroundColor(bgColor); actionBar.setCustomView(view, new ActionBar.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); ImageView toolbar_close = actionBar.getCustomView().findViewById(R.id.toolbar_close); TextView toolbar_title = actionBar.getCustomView().findViewById(R.id.toolbar_title); ImageView media_save = actionBar.getCustomView().findViewById(R.id.media_save); ImageView media_share = actionBar.getCustomView().findViewById(R.id.media_share); - toolbar_close.setOnClickListener(v -> finish()); + toolbar_close.setOnClickListener(v -> ActivityCompat.finishAfterTransition(this)); media_save.setOnClickListener(view12 -> { int position = mPager.getCurrentItem(); Attachment attachment = attachments.get(position); - if (attachment.getType().compareTo("image") == 0) { - if (Build.VERSION.SDK_INT >= 23) { - if (ContextCompat.checkSelfPermission(SlideMediaActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(SlideMediaActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { - ActivityCompat.requestPermissions(SlideMediaActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, Helper.EXTERNAL_STORAGE_REQUEST_CODE); - } else { - Helper.manageMove(SlideMediaActivity.this, attachment.getUrl(), false); - } + if (Build.VERSION.SDK_INT >= 23) { + if (ContextCompat.checkSelfPermission(SlideMediaActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(SlideMediaActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(SlideMediaActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, Helper.EXTERNAL_STORAGE_REQUEST_CODE_MEDIA_SAVE); } else { - Helper.manageMove(SlideMediaActivity.this, attachment.getUrl(), false); - } - } else { - if (Build.VERSION.SDK_INT >= 23) { - if (ContextCompat.checkSelfPermission(SlideMediaActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(SlideMediaActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { - ActivityCompat.requestPermissions(SlideMediaActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, Helper.EXTERNAL_STORAGE_REQUEST_CODE); + if (attachment.getType().compareTo("image") == 0) { + Helper.manageMove(SlideMediaActivity.this, attachment.getUrl(), false); } else { Helper.manageDownloadsNoPopup(SlideMediaActivity.this, attachment.getUrl()); downloadID = -1; } + } + } else { + if (attachment.getType().compareTo("image") == 0) { + Helper.manageMove(SlideMediaActivity.this, attachment.getUrl(), false); } else { Helper.manageDownloadsNoPopup(SlideMediaActivity.this, attachment.getUrl()); downloadID = -1; @@ -186,7 +193,7 @@ public class SlideMediaActivity extends BaseFragmentActivity implements OnDownlo } else { if (Build.VERSION.SDK_INT >= 23) { if (ContextCompat.checkSelfPermission(SlideMediaActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(SlideMediaActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { - ActivityCompat.requestPermissions(SlideMediaActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, Helper.EXTERNAL_STORAGE_REQUEST_CODE); + ActivityCompat.requestPermissions(SlideMediaActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, Helper.EXTERNAL_STORAGE_REQUEST_CODE_MEDIA_SHARE); } else { downloadID = Helper.manageDownloadsNoPopup(SlideMediaActivity.this, attachment.getUrl()); } @@ -208,6 +215,7 @@ public class SlideMediaActivity extends BaseFragmentActivity implements OnDownlo mPager.setAdapter(mPagerAdapter); mPager.setCurrentItem(mediaPosition - 1); + mPager.setOffscreenPageLimit(0); registerReceiver(onDownloadComplete, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)); String description = attachments.get(mediaPosition - 1).getDescription(); @@ -216,10 +224,16 @@ public class SlideMediaActivity extends BaseFragmentActivity implements OnDownlo media_description.setText(description); media_description.setVisibility(View.VISIBLE); - handler.postDelayed(() -> media_description.setVisibility(View.GONE), med_desc_timeout); + handler.postDelayed(() -> { + if (!media_description.hasSelection()) { + media_description.setVisibility(View.GONE); + } + }, med_desc_timeout); } else { - media_description.setVisibility(View.GONE); + if (!media_description.hasSelection()) { + media_description.setVisibility(View.GONE); + } } mPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { public void onPageScrollStateChanged(int state) { @@ -238,10 +252,16 @@ public class SlideMediaActivity extends BaseFragmentActivity implements OnDownlo media_description.setText(description); media_description.setVisibility(View.VISIBLE); - handler.postDelayed(() -> media_description.setVisibility(View.GONE), med_desc_timeout); + handler.postDelayed(() -> { + if (!media_description.hasSelection()) { + media_description.setVisibility(View.GONE); + } + }, med_desc_timeout); } else { - media_description.setVisibility(View.GONE); + if (!media_description.hasSelection()) { + media_description.setVisibility(View.GONE); + } } } }); @@ -258,11 +278,35 @@ public class SlideMediaActivity extends BaseFragmentActivity implements OnDownlo } @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + switch (requestCode) { + case Helper.EXTERNAL_STORAGE_REQUEST_CODE_MEDIA_SAVE: + if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + int position = mPager.getCurrentItem(); + Attachment attachment = attachments.get(position); + if (attachment.getType().compareTo("image") == 0) { + Helper.manageMove(SlideMediaActivity.this, attachment.getUrl(), false); + } else { + Helper.manageDownloadsNoPopup(SlideMediaActivity.this, attachment.getUrl()); + downloadID = -1; + } + } else { /*Todo: Toast "Storage Permission Required" */ } + return; + case Helper.EXTERNAL_STORAGE_REQUEST_CODE_MEDIA_SHARE: + if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + int position = mPager.getCurrentItem(); + Attachment attachment = attachments.get(position); + downloadID = Helper.manageDownloadsNoPopup(SlideMediaActivity.this, attachment.getUrl()); + } else { /*Todo: Toast "Storage Permission Required" */ } + break; + } + } + + @Override public boolean dispatchTouchEvent(MotionEvent event) { SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE); final int med_desc_timeout = sharedpreferences.getInt(Helper.SET_MED_DESC_TIMEOUT, 3) * 1000; - switch (event.getAction()) { case MotionEvent.ACTION_DOWN: startX = event.getX(); @@ -283,10 +327,16 @@ public class SlideMediaActivity extends BaseFragmentActivity implements OnDownlo media_description.setText(description); media_description.setVisibility(View.VISIBLE); - handler.postDelayed(() -> media_description.setVisibility(View.GONE), med_desc_timeout); + handler.postDelayed(() -> { + if (!media_description.hasSelection()) { + media_description.setVisibility(View.GONE); + } + }, med_desc_timeout); } else { - media_description.setVisibility(View.GONE); + if (!media_description.hasSelection()) { + media_description.setVisibility(View.GONE); + } } } } |