Update reply screen

Also add spoilers
captchafix
Floens 11 years ago
parent 67d666f778
commit 16418a8b5c
  1. 4
      Clover/app/src/main/java/org/floens/chan/core/manager/ReplyManager.java
  2. 1
      Clover/app/src/main/java/org/floens/chan/core/model/Reply.java
  3. 11
      Clover/app/src/main/java/org/floens/chan/ui/activity/ReplyActivity.java
  4. 116
      Clover/app/src/main/java/org/floens/chan/ui/fragment/ReplyFragment.java
  5. 81
      Clover/app/src/main/java/org/floens/chan/ui/view/ThumbnailImageView.java
  6. BIN
      Clover/app/src/main/res/drawable-hdpi/ic_action_attachment.png
  7. BIN
      Clover/app/src/main/res/drawable-hdpi/ic_action_attachment_dark.png
  8. BIN
      Clover/app/src/main/res/drawable-mdpi/ic_action_attachment.png
  9. BIN
      Clover/app/src/main/res/drawable-mdpi/ic_action_attachment_dark.png
  10. BIN
      Clover/app/src/main/res/drawable-xhdpi/ic_action_attachment.png
  11. BIN
      Clover/app/src/main/res/drawable-xhdpi/ic_action_attachment_dark.png
  12. BIN
      Clover/app/src/main/res/drawable-xxhdpi/ic_action_attachment.png
  13. BIN
      Clover/app/src/main/res/drawable-xxhdpi/ic_action_attachment_dark.png
  14. 8
      Clover/app/src/main/res/layout/reply_captcha.xml
  15. 53
      Clover/app/src/main/res/layout/reply_input.xml
  16. 9
      Clover/app/src/main/res/layout/reply_view.xml
  17. 4
      Clover/app/src/main/res/values/strings.xml

@ -346,6 +346,10 @@ public class ReplyManager {
entity.addTextBody("resto", Integer.toString(reply.resto)); entity.addTextBody("resto", Integer.toString(reply.resto));
} }
if (reply.spoilerImage) {
entity.addTextBody("spoiler", "on");
}
entity.addTextBody("recaptcha_challenge_field", reply.captchaChallenge); entity.addTextBody("recaptcha_challenge_field", reply.captchaChallenge);
entity.addTextBody("recaptcha_response_field", reply.captchaResponse, TEXT_UTF_8); entity.addTextBody("recaptcha_response_field", reply.captchaResponse, TEXT_UTF_8);

@ -36,4 +36,5 @@ public class Reply {
public String password = ""; public String password = "";
public boolean usePass = false; public boolean usePass = false;
public String passId = ""; public String passId = "";
public boolean spoilerImage = false;
} }

@ -18,6 +18,7 @@
package org.floens.chan.ui.activity; package org.floens.chan.ui.activity;
import android.app.Activity; import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction; import android.app.FragmentTransaction;
import android.os.Bundle; import android.os.Bundle;
import android.view.MenuItem; import android.view.MenuItem;
@ -46,7 +47,7 @@ public class ReplyActivity extends Activity {
getActionBar().setDisplayHomeAsUpEnabled(true); getActionBar().setDisplayHomeAsUpEnabled(true);
FragmentTransaction ft = getFragmentManager().beginTransaction(); FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(android.R.id.content, ReplyFragment.newInstance(loadable, false)); ft.replace(android.R.id.content, ReplyFragment.newInstance(loadable, false), "reply");
ft.commitAllowingStateLoss(); ft.commitAllowingStateLoss();
loadable = null; loadable = null;
@ -56,6 +57,14 @@ public class ReplyActivity extends Activity {
} }
} }
@Override
public void onBackPressed() {
Fragment f = getFragmentManager().findFragmentByTag("reply");
if (f != null && ((ReplyFragment)f).onBackPressed()) {
super.onBackPressed();
}
}
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) { switch (item.getItemId()) {

@ -32,14 +32,13 @@ import android.view.View;
import android.view.View.OnClickListener; import android.view.View.OnClickListener;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.WindowManager; import android.view.WindowManager;
import android.webkit.MimeTypeMap;
import android.webkit.WebSettings; import android.webkit.WebSettings;
import android.webkit.WebView; import android.webkit.WebView;
import android.widget.Button; import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText; import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import android.widget.ViewFlipper; import android.widget.ViewFlipper;
@ -56,12 +55,14 @@ import org.floens.chan.chan.ChanUrls;
import org.floens.chan.core.ChanPreferences; import org.floens.chan.core.ChanPreferences;
import org.floens.chan.core.manager.ReplyManager; import org.floens.chan.core.manager.ReplyManager;
import org.floens.chan.core.manager.ReplyManager.ReplyResponse; import org.floens.chan.core.manager.ReplyManager.ReplyResponse;
import org.floens.chan.core.model.Board;
import org.floens.chan.core.model.Loadable; import org.floens.chan.core.model.Loadable;
import org.floens.chan.core.model.Reply; import org.floens.chan.core.model.Reply;
import org.floens.chan.ui.ViewFlipperAnimations; import org.floens.chan.ui.ViewFlipperAnimations;
import org.floens.chan.ui.view.LoadView; import org.floens.chan.ui.view.LoadView;
import org.floens.chan.utils.ImageDecoder; import org.floens.chan.utils.ImageDecoder;
import org.floens.chan.utils.Logger; import org.floens.chan.utils.Logger;
import org.floens.chan.utils.ThemeHelper;
import org.floens.chan.utils.Utils; import org.floens.chan.utils.Utils;
import java.io.File; import java.io.File;
@ -84,14 +85,14 @@ public class ReplyFragment extends DialogFragment {
private View container; private View container;
private ViewFlipper flipper; private ViewFlipper flipper;
private Button cancelButton; private Button cancelButton;
private Button fileButton; private ImageButton fileButton;
private Button fileDeleteButton;
private Button submitButton; private Button submitButton;
private EditText nameView; private EditText nameView;
private EditText emailView; private EditText emailView;
private EditText subjectView; private EditText subjectView;
private EditText commentView; private EditText commentView;
private EditText fileNameView; private EditText fileNameView;
private CheckBox spoilerImageView;
private LoadView imageViewContainer; private LoadView imageViewContainer;
private LoadView captchaContainer; private LoadView captchaContainer;
private TextView captchaInput; private TextView captchaInput;
@ -142,10 +143,7 @@ public class ReplyFragment extends DialogFragment {
@Override @Override
public boolean onKey(DialogInterface dialogInterface, int keyCode, KeyEvent event) { public boolean onKey(DialogInterface dialogInterface, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) { if (keyCode == KeyEvent.KEYCODE_BACK) {
if (page == 1) onBackPressed();
flipPage(0);
else if (page == 2)
closeReply();
return true; return true;
} else } else
return false; return false;
@ -170,6 +168,7 @@ public class ReplyFragment extends DialogFragment {
// To the end of the comment // To the end of the comment
Selection.setSelection(commentView.getText(), commentView.getText().length()); Selection.setSelection(commentView.getText(), commentView.getText().length());
setFile(draft.fileName, draft.file); setFile(draft.fileName, draft.file);
spoilerImageView.setChecked(draft.spoilerImage);
if (loadable.isThreadMode()) { if (loadable.isThreadMode()) {
subjectView.setVisibility(View.GONE); subjectView.setVisibility(View.GONE);
@ -199,10 +198,8 @@ public class ReplyFragment extends DialogFragment {
draft.email = emailView.getText().toString(); draft.email = emailView.getText().toString();
draft.subject = subjectView.getText().toString(); draft.subject = subjectView.getText().toString();
draft.comment = commentView.getText().toString(); draft.comment = commentView.getText().toString();
if (fileNameView != null) {
draft.fileName = fileNameView.getText().toString(); draft.fileName = fileNameView.getText().toString();
} draft.spoilerImage = spoilerImageView.isChecked();
replyManager.setReplyDraft(draft); replyManager.setReplyDraft(draft);
} else { } else {
@ -232,6 +229,8 @@ public class ReplyFragment extends DialogFragment {
subjectView = (EditText) container.findViewById(R.id.reply_subject); subjectView = (EditText) container.findViewById(R.id.reply_subject);
commentView = (EditText) container.findViewById(R.id.reply_comment); commentView = (EditText) container.findViewById(R.id.reply_comment);
commentView.requestFocus(); commentView.requestFocus();
fileNameView = (EditText) container.findViewById(R.id.reply_file_name);
spoilerImageView = (CheckBox) container.findViewById(R.id.reply_spoiler_image);
imageViewContainer = (LoadView) container.findViewById(R.id.reply_image); imageViewContainer = (LoadView) container.findViewById(R.id.reply_image);
responseContainer = (LoadView) container.findViewById(R.id.reply_response); responseContainer = (LoadView) container.findViewById(R.id.reply_response);
@ -262,10 +261,11 @@ public class ReplyFragment extends DialogFragment {
} }
}); });
fileButton = (Button) container.findViewById(R.id.reply_file); fileButton = (ImageButton) container.findViewById(R.id.reply_file);
fileButton.setOnClickListener(new OnClickListener() { fileButton.setOnClickListener(new OnClickListener() {
@Override @Override
public void onClick(View view) { public void onClick(View view) {
if (draft.file == null) {
ChanApplication.getReplyManager().pickFile(new ReplyManager.FileListener() { ChanApplication.getReplyManager().pickFile(new ReplyManager.FileListener() {
@Override @Override
public void onFile(String name, File file) { public void onFile(String name, File file) {
@ -274,18 +274,14 @@ public class ReplyFragment extends DialogFragment {
@Override @Override
public void onFileLoading() { public void onFileLoading() {
imageViewContainer.setVisibility(View.VISIBLE);
imageViewContainer.setView(null); imageViewContainer.setView(null);
} }
}); });
} } else {
});
fileDeleteButton = (Button) container.findViewById(R.id.reply_file_delete);
fileDeleteButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
setFile(null, null); setFile(null, null);
} }
}
}); });
submitButton = (Button) container.findViewById(R.id.reply_submit); submitButton = (Button) container.findViewById(R.id.reply_submit);
@ -304,6 +300,17 @@ public class ReplyFragment extends DialogFragment {
return container; return container;
} }
public boolean onBackPressed() {
if (page == 1) {
flipPage(0);
return false;
} else if (page == 2) {
return false;
} else {
return true;
}
}
private void closeReply() { private void closeReply() {
if (getDialog() != null) { if (getDialog() != null) {
dismiss(); dismiss();
@ -365,56 +372,72 @@ public class ReplyFragment extends DialogFragment {
draft.fileName = name; draft.fileName = name;
if (file == null) { if (file == null) {
fileDeleteButton.setEnabled(false); fileButton.setImageResource(ThemeHelper.getInstance().getTheme().isLightTheme ? R.drawable.ic_action_attachment : R.drawable.ic_action_attachment_dark);
imageViewContainer.removeAllViews(); imageViewContainer.removeAllViews();
fileNameView = null; imageViewContainer.setVisibility(View.GONE);
fileNameView.setText("");
fileNameView.setVisibility(View.GONE);
spoilerImageView.setVisibility(View.GONE);
spoilerImageView.setChecked(false);
} else { } else {
fileDeleteButton.setEnabled(true); fileButton.setImageResource(ThemeHelper.getInstance().getTheme().isLightTheme ? R.drawable.ic_action_cancel : R.drawable.ic_action_cancel_dark);
fileNameView.setVisibility(View.VISIBLE);
LinearLayout wrapper = new LinearLayout(context);
wrapper.setLayoutParams(Utils.MATCH_WRAP_PARAMS);
wrapper.setOrientation(LinearLayout.VERTICAL);
fileNameView = new EditText(context);
fileNameView.setSingleLine();
fileNameView.setHint(R.string.reply_file_name);
fileNameView.setTextSize(16f);
fileNameView.setText(name); fileNameView.setText(name);
wrapper.addView(fileNameView);
final ImageView imageView = new ImageView(context);
imageView.setScaleType(ScaleType.CENTER_INSIDE);
wrapper.addView(imageView);
imageViewContainer.setView(wrapper); Board b = ChanApplication.getBoardManager().getBoardByValue(loadable.board);
spoilerImageView.setVisibility(b != null && b.spoilers ? View.VISIBLE : View.GONE);
String extension = MimeTypeMap.getFileExtensionFromUrl(name); imageViewContainer.setVisibility(View.VISIBLE);
if (extension != null) { imageViewContainer.setView(null);
String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension); imageViewContainer.post(new Runnable() {
if (mimeType != null && mimeType.contains("image")) { public void run() {
if (file.length() < 10 * 1024 * 1024) {
new Thread(new Runnable() { new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
if (context == null) if (context == null)
return; return;
final Bitmap bitmap = ImageDecoder.decodeFile(file, imageViewContainer.getWidth(), 3000); final Bitmap bitmap = ImageDecoder.decodeFile(file, imageViewContainer.getWidth(), imageViewContainer.getWidth());
context.runOnUiThread(new Runnable() { context.runOnUiThread(new Runnable() {
@Override @Override
public void run() { public void run() {
if (context != null && bitmap != null) { if (context != null) {
if (bitmap != null) {
ImageView imageView = new ImageView(context);
imageViewContainer.setView(imageView);
imageView.setAdjustViewBounds(true);
imageView.setMaxWidth(imageViewContainer.getWidth());
imageView.setMaxHeight(imageViewContainer.getWidth());
imageView.setImageBitmap(bitmap); imageView.setImageBitmap(bitmap);
} else {
noPreview(imageViewContainer);
}
} }
} }
}); });
} }
}).start(); }).start();
} else {
noPreview(imageViewContainer);
} }
} }
});
} }
} }
private void noPreview(LoadView loadView) {
TextView text = new TextView(context);
text.setLayoutParams(Utils.MATCH_WRAP_PARAMS);
text.setGravity(Gravity.CENTER);
text.setText(R.string.reply_no_preview);
text.setTextSize(16f);
int padding = Utils.dp(16);
text.setPadding(padding, padding, padding, padding);
loadView.setView(text);
}
private void getCaptcha() { private void getCaptcha() {
if (gettingCaptcha) if (gettingCaptcha)
return; return;
@ -476,12 +499,10 @@ public class ReplyFragment extends DialogFragment {
draft.captchaResponse = captchaInput.getText().toString(); draft.captchaResponse = captchaInput.getText().toString();
draft.fileName = "image"; draft.fileName = "image";
if (fileNameView != null) {
String n = fileNameView.getText().toString(); String n = fileNameView.getText().toString();
if (!TextUtils.isEmpty(n)) { if (!TextUtils.isEmpty(n)) {
draft.fileName = n; draft.fileName = n;
} }
}
draft.resto = loadable.isThreadMode() ? loadable.no : -1; draft.resto = loadable.isThreadMode() ? loadable.no : -1;
draft.board = loadable.board; draft.board = loadable.board;
@ -491,6 +512,9 @@ public class ReplyFragment extends DialogFragment {
draft.passId = ChanPreferences.getPassId(); draft.passId = ChanPreferences.getPassId();
} }
Board b = ChanApplication.getBoardManager().getBoardByValue(loadable.board);
draft.spoilerImage = b != null && b.spoilers && spoilerImageView.isChecked();
ChanApplication.getReplyManager().sendReply(draft, new ReplyManager.ReplyListener() { ChanApplication.getReplyManager().sendReply(draft, new ReplyManager.ReplyListener() {
@Override @Override
public void onResponse(ReplyResponse response) { public void onResponse(ReplyResponse response) {

@ -32,7 +32,6 @@ import android.widget.VideoView;
import com.android.volley.Request; import com.android.volley.Request;
import com.android.volley.VolleyError; import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageLoader.ImageContainer; import com.android.volley.toolbox.ImageLoader.ImageContainer;
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView;
import com.koushikdutta.async.future.Future; import com.koushikdutta.async.future.Future;
import org.floens.chan.ChanApplication; import org.floens.chan.ChanApplication;
@ -134,6 +133,21 @@ public class ThumbnailImageView extends LoadView implements View.OnClickListener
@Override @Override
public void onSuccess(File file) { public void onSuccess(File file) {
setBigImageFile(file);
}
@Override
public void onFail(boolean notFound) {
if (notFound) {
onNotFoundError();
} else {
onError();
}
}
});
}
public void setBigImageFile(File file) {
final CustomScaleImageView image = new CustomScaleImageView(getContext()); final CustomScaleImageView image = new CustomScaleImageView(getContext());
image.setImageFile(file.getAbsolutePath()); image.setImageFile(file.getAbsolutePath());
image.setOnClickListener(ThumbnailImageView.this); image.setOnClickListener(ThumbnailImageView.this);
@ -155,17 +169,6 @@ public class ThumbnailImageView extends LoadView implements View.OnClickListener
}); });
} }
@Override
public void onFail(boolean notFound) {
if (notFound) {
onNotFoundError();
} else {
onError();
}
}
});
}
public void setGif(String gifUrl) { public void setGif(String gifUrl) {
if (getWidth() == 0 || getHeight() == 0) { if (getWidth() == 0 || getHeight() == 0) {
Logger.e(TAG, "getWidth() or getHeight() returned 0, not loading"); Logger.e(TAG, "getWidth() or getHeight() returned 0, not loading");
@ -187,6 +190,21 @@ public class ThumbnailImageView extends LoadView implements View.OnClickListener
@Override @Override
public void onSuccess(File file) { public void onSuccess(File file) {
setGifFile(file);
}
@Override
public void onFail(boolean notFound) {
if (notFound) {
onNotFoundError();
} else {
onError();
}
}
});
}
public void setGifFile(File file) {
GifDrawable drawable; GifDrawable drawable;
try { try {
drawable = new GifDrawable(file.getAbsolutePath()); drawable = new GifDrawable(file.getAbsolutePath());
@ -202,17 +220,6 @@ public class ThumbnailImageView extends LoadView implements View.OnClickListener
setView(view, false); setView(view, false);
} }
@Override
public void onFail(boolean notFound) {
if (notFound) {
onNotFoundError();
} else {
onError();
}
}
});
}
public void setVideo(String videoUrl) { public void setVideo(String videoUrl) {
callback.setProgress(true); callback.setProgress(true);
ionRequest = ChanApplication.getFileCache().downloadFile(getContext(), videoUrl, new FileCache.DownloadedCallback() { ionRequest = ChanApplication.getFileCache().downloadFile(getContext(), videoUrl, new FileCache.DownloadedCallback() {
@ -228,7 +235,22 @@ public class ThumbnailImageView extends LoadView implements View.OnClickListener
} }
@Override @Override
public void onSuccess(final File file) { public void onSuccess(File file) {
setVideoFile(file);
}
@Override
public void onFail(boolean notFound) {
if (notFound) {
onNotFoundError();
} else {
onError();
}
}
});
}
public void setVideoFile(final File file) {
if (ChanPreferences.getVideoExternal()) { if (ChanPreferences.getVideoExternal()) {
Intent intent = new Intent(Intent.ACTION_VIEW); Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), "video/*"); intent.setDataAndType(Uri.fromFile(file), "video/*");
@ -272,17 +294,6 @@ public class ThumbnailImageView extends LoadView implements View.OnClickListener
} }
} }
@Override
public void onFail(boolean notFound) {
if (notFound) {
onNotFoundError();
} else {
onError();
}
}
});
}
public VideoView getVideoView() { public VideoView getVideoView() {
return videoView; return videoView;
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 509 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 472 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 379 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 379 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 590 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 926 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?><!--
<!--
Clover - 4chan browser https://github.com/Floens/Clover/ Clover - 4chan browser https://github.com/Floens/Clover/
Copyright (C) 2014 Floens Copyright (C) 2014 Floens
@ -16,12 +15,11 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
--> -->
<LinearLayout <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical"
android:padding="8dp"> android:padding="16dp">
<TextView <TextView
android:id="@+id/reply_captcha_text" android:id="@+id/reply_captcha_text"

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?><!--
<!--
Clover - 4chan browser https://github.com/Floens/Clover/ Clover - 4chan browser https://github.com/Floens/Clover/
Copyright (C) 2014 Floens Copyright (C) 2014 Floens
@ -16,20 +15,21 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
--> -->
<LinearLayout <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:floatlabel="http://schemas.android.com/apk/res-auto"
android:id="@+id/reply_data" android:id="@+id/reply_data"
style="?android:attr/buttonBarStyle"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"> android:orientation="vertical"
android:paddingBottom="16dp"
android:paddingLeft="16dp"
android:paddingRight="16dp">
<EditText <EditText
android:id="@+id/reply_name" android:id="@+id/reply_name"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:hint="@string/reply_name" android:hint="@string/reply_name"
android:minHeight="48dp"
android:textSize="16sp" /> android:textSize="16sp" />
<EditText <EditText
@ -37,6 +37,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:hint="@string/reply_subject" android:hint="@string/reply_subject"
android:minHeight="48dp"
android:textSize="16sp" /> android:textSize="16sp" />
<EditText <EditText
@ -44,6 +45,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:hint="@string/reply_email" android:hint="@string/reply_email"
android:minHeight="48dp"
android:textSize="16sp" /> android:textSize="16sp" />
<EditText <EditText
@ -56,38 +58,35 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
android:minLines="4" android:minLines="4"
android:textSize="16sp" /> android:textSize="16sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal"> android:orientation="horizontal">
<Button <EditText
android:id="@+id/reply_file" android:id="@+id/reply_file_name"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:text="@string/reply_file"/> android:hint="@string/reply_file_name"
android:minHeight="48dp"
android:textSize="16sp" />
<ImageButton
android:id="@+id/reply_file"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/reply_file_delete"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/reply_file_delete"/>
</LinearLayout> </LinearLayout>
<org.floens.chan.ui.view.LoadView <CheckBox
android:id="@+id/reply_image" android:id="@+id/reply_spoiler_image"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:adjustViewBounds="true" android:text="@string/reply_spoiler_image" />
android:minHeight="48dp"
android:scaleType="centerCrop"/>
</LinearLayout>
<org.floens.chan.ui.view.LoadView
android:id="@+id/reply_image"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout> </LinearLayout>

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?><!--
<!--
Clover - 4chan browser https://github.com/Floens/Clover/ Clover - 4chan browser https://github.com/Floens/Clover/
Copyright (C) 2014 Floens Copyright (C) 2014 Floens
@ -16,8 +15,7 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
--> -->
<LinearLayout <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:divider="?android:attr/dividerHorizontal" android:divider="?android:attr/dividerHorizontal"
@ -59,8 +57,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
android:id="@+id/reply_response" android:id="@+id/reply_response"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical"> android:orientation="vertical" />
</org.floens.chan.ui.view.LoadView>
</ViewFlipper> </ViewFlipper>
<LinearLayout <LinearLayout

@ -114,9 +114,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<string name="reply_email">Options</string> <string name="reply_email">Options</string>
<string name="reply_subject">Subject</string> <string name="reply_subject">Subject</string>
<string name="reply_comment">Comment</string> <string name="reply_comment">Comment</string>
<string name="reply_file">Pick file</string>
<string name="reply_file_delete">Remove file</string>
<string name="reply_file_name">File name</string> <string name="reply_file_name">File name</string>
<string name="reply_spoiler_image">Spoiler image</string>
<string name="reply_no_preview">No preview available</string>
<string name="reply_submit">Submit</string> <string name="reply_submit">Submit</string>
<string name="reply_captcha">Enter the text</string> <string name="reply_captcha">Enter the text</string>
<string name="reply_error">Error sending reply</string> <string name="reply_error">Error sending reply</string>

Loading…
Cancel
Save