Skip to content
This repository was archived by the owner on Jul 25, 2024. It is now read-only.

Commit 50b3404

Browse files
saketkumartimabbott
authored andcommitted
Fixes: #243 Clicking on an uploaded image opens in new activity
1 parent 6f9ce7f commit 50b3404

File tree

6 files changed

+171
-2
lines changed

6 files changed

+171
-2
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,10 @@
6868
android:label="@string/app_name"
6969
android:configChanges="keyboard|keyboardHidden|orientation|screenSize">
7070
</activity>
71+
<activity
72+
android:name=".activities.PhotoViewActivity"
73+
android:parentActivityName=".activities.ZulipActivity" >
74+
</activity>
7175
<activity
7276
android:name=".activities.LegalActivity"
7377
android:label="@string/title_activity_legal" />
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
package com.zulip.android.activities;
2+
3+
import android.content.ClipData;
4+
import android.content.ClipboardManager;
5+
import android.content.Context;
6+
import android.content.Intent;
7+
import android.net.ConnectivityManager;
8+
import android.net.NetworkInfo;
9+
import android.net.Uri;
10+
import android.os.Bundle;
11+
import android.support.v7.app.AppCompatActivity;
12+
import android.support.v7.widget.Toolbar;
13+
import android.view.Menu;
14+
import android.view.MenuItem;
15+
import android.view.View;
16+
import android.widget.ImageView;
17+
import android.widget.ProgressBar;
18+
import android.widget.Toast;
19+
20+
import com.bumptech.glide.Glide;
21+
import com.bumptech.glide.load.resource.drawable.GlideDrawable;
22+
import com.bumptech.glide.request.RequestListener;
23+
import com.bumptech.glide.request.target.GlideDrawableImageViewTarget;
24+
import com.bumptech.glide.request.target.Target;
25+
import com.zulip.android.R;
26+
27+
public class PhotoViewActivity extends AppCompatActivity {
28+
29+
30+
private ImageView linkImage;
31+
private ProgressBar progressBar;
32+
33+
34+
@Override
35+
protected void onCreate(Bundle savedInstanceState) {
36+
super.onCreate(savedInstanceState);
37+
setContentView(R.layout.activity_photo_view);
38+
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
39+
setSupportActionBar(toolbar);
40+
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
41+
getSupportActionBar().setHomeButtonEnabled(true);
42+
final Intent intent = getIntent();
43+
String url = intent.getStringExtra(Intent.EXTRA_TEXT);
44+
getSupportActionBar().setTitle(url);
45+
linkImage = (ImageView) findViewById(R.id.linkImageView);
46+
progressBar = (ProgressBar) findViewById(R.id.progress);
47+
GlideDrawableImageViewTarget imageViewPreview = new GlideDrawableImageViewTarget(linkImage);
48+
Glide
49+
.with(this)
50+
.load(url)
51+
.listener(new RequestListener<String, GlideDrawable>() {
52+
@Override
53+
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
54+
progressBar.setVisibility(View.GONE);
55+
if (!isNetworkAvailable()) {
56+
Toast.makeText(getApplicationContext(), R.string.toast_no_internet_connection, Toast.LENGTH_SHORT).show();
57+
} else {
58+
Toast.makeText(getApplicationContext(), R.string.toast_unable_to_load_image, Toast.LENGTH_SHORT).show();
59+
}
60+
return false;
61+
}
62+
63+
@Override
64+
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
65+
progressBar.setVisibility(View.GONE);
66+
return false;
67+
}
68+
})
69+
.into(imageViewPreview);
70+
}
71+
72+
private boolean isNetworkAvailable() {
73+
ConnectivityManager connectivityManager
74+
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
75+
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
76+
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
77+
}
78+
79+
@Override
80+
public boolean onCreateOptionsMenu(Menu menu) {
81+
getMenuInflater().inflate(R.menu.photoview_options, menu);
82+
return true;
83+
}
84+
85+
@Override
86+
public boolean onOptionsItemSelected(MenuItem item) {
87+
final Intent intent = getIntent();
88+
final String url = intent.getStringExtra(Intent.EXTRA_TEXT);
89+
switch (item.getItemId()) {
90+
case R.id.open:
91+
Intent i = new Intent(Intent.ACTION_VIEW);
92+
i.setData(Uri.parse(url));
93+
startActivity(i);
94+
break;
95+
case R.id.copy_link:
96+
copyLink(url);
97+
break;
98+
99+
default:
100+
return super.onOptionsItemSelected(item);
101+
}
102+
103+
return true;
104+
}
105+
106+
private void copyLink(String url) {
107+
ClipboardManager clipboard
108+
= (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
109+
ClipData clip = ClipData.newPlainText("link", url);
110+
clipboard.setPrimaryClip(clip);
111+
Toast.makeText(PhotoViewActivity.this , R.string.link_copied , Toast.LENGTH_SHORT).show();
112+
}
113+
114+
}

app/src/main/java/com/zulip/android/activities/RecyclerMessageAdapter.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.zulip.android.activities;
22

3+
import android.app.Activity;
34
import android.content.Context;
45
import android.content.Intent;
56
import android.content.res.ColorStateList;
@@ -389,10 +390,11 @@ public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int pos
389390
.setOnClickListener(new View.OnClickListener() {
390391
@Override
391392
public void onClick(View view) {
392-
Intent i = new Intent(Intent.ACTION_VIEW);
393+
Intent i = new Intent(zulipApp.getApplicationContext(), PhotoViewActivity.class);
393394
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
394-
i.setData(Uri.parse(url));
395+
i.putExtra(Intent.EXTRA_TEXT , url);
395396
zulipApp.startActivity(i);
397+
((Activity) context).overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
396398
}
397399
});
398400
} else {
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<RelativeLayout
3+
xmlns:android="http://schemas.android.com/apk/res/android"
4+
android:layout_width="match_parent"
5+
android:layout_height="match_parent">
6+
7+
<include
8+
android:id="@+id/toolbar"
9+
layout="@layout/toolbar" />
10+
11+
12+
<ProgressBar
13+
android:id="@+id/progress"
14+
android:visibility="visible"
15+
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
16+
android:layout_width="250dp"
17+
android:layout_height="wrap_content"
18+
android:indeterminate="true"
19+
android:layout_centerHorizontal="true"
20+
android:layout_alignParentTop="true"
21+
android:layout_marginTop="250dp" />
22+
23+
24+
<ImageView
25+
android:layout_width="match_parent"
26+
android:layout_height="match_parent"
27+
android:id="@+id/linkImageView"
28+
android:layout_alignParentLeft="true"
29+
android:layout_alignParentStart="true"
30+
android:layout_below="@+id/toolbar" />
31+
32+
33+
</RelativeLayout>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<menu
3+
xmlns:android="http://schemas.android.com/apk/res/android"
4+
xmlns:app="http://schemas.android.com/apk/res-auto">
5+
6+
<item
7+
android:id="@+id/open"
8+
android:title="Open" />
9+
10+
<item
11+
android:id="@+id/copy_link"
12+
android:title="Copy link" />
13+
14+
</menu>

app/src/main/res/values/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
<string name="topic">Topic</string>
1616
<string name="close">Close</string>
1717
<string name="refresh">Refresh</string>
18+
<string name="toast_unable_to_load_image">Unable to load image</string>
19+
<string name="link_copied">Link copied to clipboard</string>
1820
<string name="title_activity_legal">Legal</string>
1921
<string name="streams_open">Open stream sidebar</string>
2022
<string name="streams_close">Close stream sidebar</string>

0 commit comments

Comments
 (0)