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 @@
+
+
+
+
+
+
+
+
+