diff --git a/.idea/render.experimental.xml b/.idea/render.experimental.xml new file mode 100644 index 0000000..8ec256a --- /dev/null +++ b/.idea/render.experimental.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/example/imageveiwer3/FullscreenActivity.java b/app/src/main/java/com/example/imageveiwer3/FullscreenActivity.java new file mode 100644 index 0000000..c9ec78f --- /dev/null +++ b/app/src/main/java/com/example/imageveiwer3/FullscreenActivity.java @@ -0,0 +1,211 @@ +package com.example.imageveiwer3; + +import android.annotation.SuppressLint; +import android.content.Intent; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.os.Handler; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.widget.ImageView; + +/** + * An example full-screen activity that shows and hides the system UI (i.e. + * status bar and navigation/system bar) with user interaction. + */ +public class FullscreenActivity extends AppCompatActivity { + /** + * Whether or not the system UI should be auto-hidden after + * {@link #AUTO_HIDE_DELAY_MILLIS} milliseconds. + */ + private static final boolean AUTO_HIDE = true; + + /** + * If {@link #AUTO_HIDE} is set, the number of milliseconds to wait after + * user interaction before hiding the system UI. + */ + private static final int AUTO_HIDE_DELAY_MILLIS = 3000; + + /** + * Some older devices needs a small delay between UI widget updates + * and a change of the status and navigation bar. + */ + private static final int UI_ANIMATION_DELAY = 300; + private final Handler mHideHandler = new Handler(); + private ImageView fullScreenImage; + private final Runnable mHidePart2Runnable = new Runnable() { + @SuppressLint("InlinedApi") + @Override + public void run() { + // Delayed removal of status and navigation bar + + // Note that some of these constants are new as of API 16 (Jelly Bean) + // and API 19 (KitKat). It is safe to use them, as they are inlined + // at compile-time and do nothing on earlier devices. + fullScreenImage.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE + | View.SYSTEM_UI_FLAG_FULLSCREEN + | View.SYSTEM_UI_FLAG_LAYOUT_STABLE + | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); + } + }; + private View mControlsView; + private final Runnable mShowPart2Runnable = new Runnable() { + @Override + public void run() { + // Delayed display of UI elements + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.show(); + } + mControlsView.setVisibility(View.VISIBLE); + } + }; + private boolean mVisible; + private final Runnable mHideRunnable = new Runnable() { + @Override + public void run() { + hide(); + } + }; + /** + * Touch listener to use for in-layout UI controls to delay hiding the + * system UI. This is to prevent the jarring behavior of controls going away + * while interacting with activity UI. + */ + private final View.OnTouchListener mDelayHideTouchListener = new View.OnTouchListener() { + @Override + public boolean onTouch(View view, MotionEvent motionEvent) { + if (AUTO_HIDE) { + delayedHide(AUTO_HIDE_DELAY_MILLIS); + } + return false; + } + }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.activity_fullscreen); + + mVisible = true; + mControlsView = findViewById(R.id.fullscreen_content_controls); + fullScreenImage = findViewById(R.id.fullscreen_content); + + Intent intent = getIntent(); + ImageViewerModel imageViewerModel = (ImageViewerModel) intent.getSerializableExtra(MainActivity.KEY_IMAGE); + fullScreenImage.setImageURI(imageViewerModel.getPictureUri()); + + + // Set up the user interaction to manually show or hide the system UI. + fullScreenImage.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + toggle(); + } + }); + + + + + + + + + + } + + @Override + protected void onPostCreate(Bundle savedInstanceState) { + super.onPostCreate(savedInstanceState); + + // Trigger the initial hide() shortly after the activity has been + // created, to briefly hint to the user that UI controls + // are available. + delayedHide(100); + } + + private void toggle() { + if (mVisible) { + hide(); + } else { + show(); + } + } + + private void hide() { + // Hide UI first + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.hide(); + } + mControlsView.setVisibility(View.GONE); + mVisible = false; + + // Schedule a runnable to remove the status and navigation bar after a delay + mHideHandler.removeCallbacks(mShowPart2Runnable); + mHideHandler.postDelayed(mHidePart2Runnable, UI_ANIMATION_DELAY); + } + + @SuppressLint("InlinedApi") + private void show() { + // Show the system bar + fullScreenImage.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); + mVisible = true; + + // Schedule a runnable to display UI elements after a delay + mHideHandler.removeCallbacks(mHidePart2Runnable); + mHideHandler.postDelayed(mShowPart2Runnable, UI_ANIMATION_DELAY); + } + + /** + * Schedules a call to hide() in delay milliseconds, canceling any + * previously scheduled calls. + */ + private void delayedHide(int delayMillis) { + mHideHandler.removeCallbacks(mHideRunnable); + mHideHandler.postDelayed(mHideRunnable, delayMillis); + } + + @Override + protected void onStart() { + super.onStart(); + Log.i("ActivityLifecycle",getLocalClassName() + " - onStart"); + + } + + @Override + protected void onResume() { + super.onResume(); + Log.i("ActivityLifecycle",getLocalClassName() + " - onResume"); + } + + @Override + protected void onPause() { + super.onPause(); + Log.i("ActivityLifecycle",getLocalClassName() + " - onPause"); + } + + @Override + protected void onStop() { + super.onStop(); + Log.i("ActivityLifecycle",getLocalClassName() + " - onStop"); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + Log.i("ActivityLifecycle",getLocalClassName() + " - onDestroy"); + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + Log.i("ActivityLifecycle",getLocalClassName() + " - onBackPressed"); + } +} diff --git a/app/src/main/java/com/example/imageveiwer3/ImageViewerDetails.java b/app/src/main/java/com/example/imageveiwer3/ImageViewerDetails.java new file mode 100644 index 0000000..4948699 --- /dev/null +++ b/app/src/main/java/com/example/imageveiwer3/ImageViewerDetails.java @@ -0,0 +1,90 @@ +package com.example.imageveiwer3; + + import android.content.Context; + import android.content.Intent; + import android.support.v7.app.AppCompatActivity; + import android.os.Bundle; + import android.util.Log; + import android.view.View; + import android.widget.ImageView; + import android.widget.TextView; + +public class ImageViewerDetails extends AppCompatActivity { + + Context context = this; + + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_image_viewer_details); + + TextView imageDetails = findViewById(R.id.details_of_image); + ImageView receivedImage = findViewById(R.id.received_image); + + + + + Intent getImage = getIntent(); + final ImageViewerModel imageViewerModel = (ImageViewerModel) getImage.getSerializableExtra(MainActivity.KEY_IMAGE); + receivedImage.setImageURI(imageViewerModel.getPictureUri()); + + imageDetails.setText(imageViewerModel.getName()); + + receivedImage.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + Intent sentImage = new Intent(context,FullscreenActivity.class); + sentImage.putExtra(MainActivity.KEY_IMAGE,imageViewerModel); + startActivity(sentImage); + + + } + }); + + + + + + } + + + @Override + protected void onStart() { + super.onStart(); + Log.i("ActivityLifecycle",getLocalClassName() + " - onStart"); + + } + + @Override + protected void onResume() { + super.onResume(); + Log.i("ActivityLifecycle",getLocalClassName() + " - onResume"); + } + + @Override + protected void onPause() { + super.onPause(); + Log.i("ActivityLifecycle",getLocalClassName() + " - onPause"); + } + + @Override + protected void onStop() { + super.onStop(); + Log.i("ActivityLifecycle",getLocalClassName() + " - onStop"); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + Log.i("ActivityLifecycle",getLocalClassName() + " - onDestroy"); + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + Log.i("ActivityLifecycle",getLocalClassName() + " - onBackPressed"); + } +} diff --git a/app/src/main/java/com/example/imageveiwer3/ImageViewerModel.java b/app/src/main/java/com/example/imageveiwer3/ImageViewerModel.java new file mode 100644 index 0000000..c7cfea7 --- /dev/null +++ b/app/src/main/java/com/example/imageveiwer3/ImageViewerModel.java @@ -0,0 +1,36 @@ +package com.example.imageveiwer3; + +import android.net.Uri; + +import java.io.Serializable; + +public class ImageViewerModel implements Serializable { + private String pictureUri; + private String name; + + public ImageViewerModel(String pictureUri, String name) { + this.pictureUri = pictureUri; + this.name = name; + } + + public ImageViewerModel(String pictureUri) { + this.pictureUri = pictureUri; + } + + + public Uri getPictureUri() { + return Uri.parse(pictureUri); + } + + public void setPictureUri(Uri pictureUri) { + this.pictureUri = pictureUri.toString(); + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/app/src/main/res/layout/activity_fullscreen.xml b/app/src/main/res/layout/activity_fullscreen.xml new file mode 100644 index 0000000..e0a438f --- /dev/null +++ b/app/src/main/res/layout/activity_fullscreen.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_image_viewer_details.xml b/app/src/main/res/layout/activity_image_viewer_details.xml new file mode 100644 index 0000000..aeae167 --- /dev/null +++ b/app/src/main/res/layout/activity_image_viewer_details.xml @@ -0,0 +1,25 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml new file mode 100644 index 0000000..7ce840e --- /dev/null +++ b/app/src/main/res/values/attrs.xml @@ -0,0 +1,12 @@ + + + + + + + + +