Commit 68d59747 authored by linfeng's avatar linfeng

短视频

parent 24d7be50
...@@ -2,6 +2,8 @@ package com.xxfc.rv; ...@@ -2,6 +2,8 @@ package com.xxfc.rv;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.app.Notification; import android.app.Notification;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
...@@ -205,6 +207,29 @@ public class MainActivity extends BaseActivity<CommonPresenter> implements DownL ...@@ -205,6 +207,29 @@ public class MainActivity extends BaseActivity<CommonPresenter> implements DownL
dialogInterface.dismiss(); dialogInterface.dismiss();
}).setCancelable(false).show(); }).setCancelable(false).show();
} }
}
private void initCopy() {
String content = null;
ClipboardManager cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
try {
ClipData data = cm.getPrimaryClip();
ClipData.Item item = data.getItemAt(0);
content = item.getText().toString();
if (!TextUtils.isEmpty(content)) {
showToast(content);
}
} catch (Exception e) {
e.printStackTrace();
}
if (content != null) {
// 执行我们的操作
// 清除剪贴板
ClipData clip = ClipData.newPlainText("", "");
cm.setPrimaryClip(clip);
}
} }
...@@ -243,7 +268,6 @@ public class MainActivity extends BaseActivity<CommonPresenter> implements DownL ...@@ -243,7 +268,6 @@ public class MainActivity extends BaseActivity<CommonPresenter> implements DownL
getPreRentDays(); getPreRentDays();
} }
@Override @Override
public void onShowResult(int requestType, BaseBean result) { public void onShowResult(int requestType, BaseBean result) {
switch (requestType) { switch (requestType) {
...@@ -505,7 +529,6 @@ public class MainActivity extends BaseActivity<CommonPresenter> implements DownL ...@@ -505,7 +529,6 @@ public class MainActivity extends BaseActivity<CommonPresenter> implements DownL
String versionName = updateAppUtils.getAppVersionName(this); String versionName = updateAppUtils.getAppVersionName(this);
if (!TextUtils.isEmpty(versionName)) { if (!TextUtils.isEmpty(versionName)) {
mPresenter.getData(0, String.format(ApiConfig.HTTP_URL_VERSION_CHECK, versionName), VersionCheckBean.class, headMap, false); mPresenter.getData(0, String.format(ApiConfig.HTTP_URL_VERSION_CHECK, versionName), VersionCheckBean.class, headMap, false);
} }
} }
...@@ -594,6 +617,7 @@ public class MainActivity extends BaseActivity<CommonPresenter> implements DownL ...@@ -594,6 +617,7 @@ public class MainActivity extends BaseActivity<CommonPresenter> implements DownL
public void onResume() { public void onResume() {
super.onResume(); super.onResume();
imLogin(); imLogin();
initCopy();
if (!DownListenerManager.getInstance().isDown() && hasGetVersionInfo && versionCheckBean != null && versionCheckBean.getData() != null && versionCheckBean.getData().getIsCompel() == 1 && !TextUtils.isEmpty(versionCheckBean.getData().getDownloadUrl())) if (!DownListenerManager.getInstance().isDown() && hasGetVersionInfo && versionCheckBean != null && versionCheckBean.getData() != null && versionCheckBean.getData().getIsCompel() == 1 && !TextUtils.isEmpty(versionCheckBean.getData().getDownloadUrl()))
checkUpdateInfo(); checkUpdateInfo();
} }
......
...@@ -53,11 +53,11 @@ public class WakeUpActivity extends AppCompatActivity { ...@@ -53,11 +53,11 @@ public class WakeUpActivity extends AppCompatActivity {
LogUtil.d("唤醒传过来的type=" + type); LogUtil.d("唤醒传过来的type=" + type);
// if (!TextUtils.isEmpty(url) && !TextUtils.isEmpty(title)) { // if (!TextUtils.isEmpty(url) && !TextUtils.isEmpty(title)) {
intent.putExtra("to", "webView"); intent.putExtra("to", "webView");
intent.putExtra("url", url); intent.putExtra("url", url);
intent.putExtra("title", title); intent.putExtra("title", title);
intent.putExtra("id", id); intent.putExtra("id", id);
intent.putExtra("type", type); intent.putExtra("type", type);
// } // }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
......
<resources> <resources>
<string name="app_name">滴房车(测试)</string> <string name="app_name">滴房车(测试)</string>
<string name="share_install_key">A7BKEFH2KFFAHE</string> <string name="share_install_key">K7BKEK7E7KE722</string>
<string name="share_install_scheme">fbac5442</string> <string name="share_install_scheme">ebfg3573</string>
</resources> </resources>
...@@ -169,12 +169,12 @@ public class AccountSafeActivity extends BaseStatusActivity<CommonPresenter> imp ...@@ -169,12 +169,12 @@ public class AccountSafeActivity extends BaseStatusActivity<CommonPresenter> imp
} }
private void getUser() { private void getUser() {
bean = (UserInfoBean) RvCache.getInstance().get(CacheEnum.USER); // bean = (UserInfoBean) RvCache.getInstance().get(CacheEnum.USER);
if (bean != null) { // if (bean != null) {
setUserInfo(); // setUserInfo();
} else { // } else {
getUserData(); getUserData();
} // }
} }
private void dealBindResult(BindCallBackBean bindCallBackBean) { private void dealBindResult(BindCallBackBean bindCallBackBean) {
......
...@@ -3,7 +3,8 @@ ...@@ -3,7 +3,8 @@
package="com.xxrv.invoice"> package="com.xxrv.invoice">
<application> <application>
<activity android:name=".activity.OrderInvoicingCarActivity"></activity> <activity android:name=".activity.OrderInvoicingCarDetailsActivity"></activity>
<activity android:name=".activity.OrderInvoicingCarActivity" />
<activity android:name=".activity.BillingHistoryActivity" /> <activity android:name=".activity.BillingHistoryActivity" />
<activity <activity
android:name=".activity.InvoicingActivity" android:name=".activity.InvoicingActivity"
......
...@@ -3,6 +3,7 @@ package com.xxrv.invoice.activity; ...@@ -3,6 +3,7 @@ package com.xxrv.invoice.activity;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.view.View; import android.view.View;
import android.widget.CheckBox; import android.widget.CheckBox;
...@@ -10,15 +11,21 @@ import android.widget.ImageView; ...@@ -10,15 +11,21 @@ import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import com.alibaba.android.arouter.launcher.ARouter; import com.alibaba.android.arouter.launcher.ARouter;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.frame.base.url.Constance; import com.frame.base.url.Constance;
import com.ruiwenliu.wrapper.base.BaseBean; import com.ruiwenliu.wrapper.base.BaseBean;
import com.ruiwenliu.wrapper.base.BaseStatusActivity; import com.ruiwenliu.wrapper.base.BaseStatusActivity;
import com.ruiwenliu.wrapper.weight.TitleView; import com.ruiwenliu.wrapper.weight.TitleView;
import com.xxrv.invoice.R; import com.xxrv.invoice.R;
import com.xxrv.invoice.R2; import com.xxrv.invoice.R2;
import com.xxrv.invoice.adapter.OrderInvoicingCarAdapter;
import com.xxrv.invoice.api.InvoiceApi; import com.xxrv.invoice.api.InvoiceApi;
import com.xxrv.invoice.bean.OrderInvoicingCarBean;
import com.xxrv.invoice.presenter.InvoicePresenter; import com.xxrv.invoice.presenter.InvoicePresenter;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import butterknife.OnClick; import butterknife.OnClick;
...@@ -38,6 +45,12 @@ public class OrderInvoicingCarActivity extends BaseStatusActivity<InvoicePresent ...@@ -38,6 +45,12 @@ public class OrderInvoicingCarActivity extends BaseStatusActivity<InvoicePresent
CheckBox cbAll; CheckBox cbAll;
@BindView(R2.id.iv_noorder_hint) @BindView(R2.id.iv_noorder_hint)
ImageView ivNoorderHint; ImageView ivNoorderHint;
@BindView(R2.id.tv_item_next)
TextView tvItemNext;
private OrderInvoicingCarAdapter mAdapter;
private boolean isCheckAll = true;
public static Intent getIntent(Context context) { public static Intent getIntent(Context context) {
return new Intent(context, OrderInvoicingCarActivity.class); return new Intent(context, OrderInvoicingCarActivity.class);
...@@ -51,6 +64,62 @@ public class OrderInvoicingCarActivity extends BaseStatusActivity<InvoicePresent ...@@ -51,6 +64,62 @@ public class OrderInvoicingCarActivity extends BaseStatusActivity<InvoicePresent
@Override @Override
protected void initView(Bundle savedInstanceState, TitleView titleView, Intent intent) { protected void initView(Bundle savedInstanceState, TitleView titleView, Intent intent) {
titleView.setTitle("按订单开票"); titleView.setTitle("按订单开票");
mAdapter = new OrderInvoicingCarAdapter();
rvContent.setLayoutManager(new LinearLayoutManager(mActivity, LinearLayoutManager.VERTICAL, false));
rvContent.setAdapter(mAdapter);
mAdapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {
@Override
public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
if (view.getId() == R.id.ll_item_bg || view.getId() == R.id.cb_select) {
mAdapter.setItemState(position);
getCountSelectData();
if (mAdapter.getData().size() != mAdapter.getSelectItem().size()) {
cbAll.setChecked(false);
isCheckAll = true;
} else {
cbAll.setChecked(true);
isCheckAll = false;
}
}
}
});
setData();
}
private void getCountSelectData() {
List<OrderInvoicingCarBean.DataBeanX.DataBean> selectItem = mAdapter.getSelectItem();
tvNumber.setText(String.valueOf(selectItem.size()));
if (selectItem.size() > 0) {
tvItemNext.setBackgroundResource(R.drawable.shape_rv_bg_shallow_dark_yellow_circle);
tvItemNext.setEnabled(true);
} else {
tvItemNext.setBackgroundResource(R.drawable.shape_rv_bg_shallow_dark_yellow_circle2);
tvItemNext.setEnabled(false);
}
}
private void setAllSelect(int type) {
List<OrderInvoicingCarBean.DataBeanX.DataBean> data = mAdapter.getData();
if (data != null && data.size() > 0) {
for (int i = 0; i < data.size(); i++) {
data.get(i).setSelectType(type);
mAdapter.notifyItemChanged(i);
}
}
}
private void setData() {
ArrayList<OrderInvoicingCarBean.DataBeanX.DataBean> objects = new ArrayList<>();
for (int i = 0; i < 5; i++) {
objects.add(new OrderInvoicingCarBean.DataBeanX.DataBean());
}
mAdapter.addData(objects);
} }
@Override @Override
...@@ -65,19 +134,29 @@ public class OrderInvoicingCarActivity extends BaseStatusActivity<InvoicePresent ...@@ -65,19 +134,29 @@ public class OrderInvoicingCarActivity extends BaseStatusActivity<InvoicePresent
ButterKnife.bind(this); ButterKnife.bind(this);
} }
@OnClick({R2.id.tv_item_hint, R2.id.tv_item_next}) @OnClick({R2.id.tv_item_hint, R2.id.cb_all, R2.id.tv_item_next})
public void onViewClicked(View view) { public void onViewClicked(View view) {
int id = view.getId(); int id = view.getId();
if (id == R.id.tv_item_hint) { if (id == R.id.tv_item_hint) {
ARouter.getInstance().build(Constance.ACTIVITY_URL_WEBVIEW) ARouter.getInstance().build(Constance.ACTIVITY_URL_WEBVIEW)
.withString("title", "按订单开票") .withString("title", "按订单开票")
.withString("url", InvoiceApi.HTTP_URL_CAR_TYPE_NOTICE) .withString("url", InvoiceApi.HTTP_URL_CAR_TYPE_NOTICE)
.withInt("type", 27) .withInt("type", 27)
.navigation(); .navigation();
} else if (id == R.id.tv_item_next) { } else if (id == R.id.cb_all) {
if (isCheckAll) {
setAllSelect(1);
cbAll.setChecked(true);
} else {
setAllSelect(0);
cbAll.setChecked(false);
}
isCheckAll = !isCheckAll;
getCountSelectData();
} else if (id == R.id.tv_item_next) {
startActivity(OrderInvoicingCarDetailsActivity.getIntent(mActivity));
} }
} }
} }
package com.xxrv.invoice.activity;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
import com.ruiwenliu.wrapper.base.BaseBean;
import com.ruiwenliu.wrapper.base.BaseStatusActivity;
import com.ruiwenliu.wrapper.weight.TitleView;
import com.xxrv.invoice.R;
import com.xxrv.invoice.R2;
import com.xxrv.invoice.presenter.InvoicePresenter;
import com.yuyife.okgo.OkGoUtil;
import butterknife.BindView;
import butterknife.OnClick;
import static com.ruiwenliu.wrapper.weight.webview.SafeWebView.hasKitkat;
/**
* 开具电子发票
*/
public class OrderInvoicingCarDetailsActivity extends BaseStatusActivity<InvoicePresenter> {
@BindView(R2.id.pb_progress)
ProgressBar pbProgress;
@BindView(R2.id.webView)
WebView mWebView;
private String webUrl;
private String name;
private String amount;
public static Intent getIntent(Context context) {
return new Intent(context, OrderInvoicingCarDetailsActivity.class);
}
@Override
protected int setLayout() {
return R.layout.activity_order_invoicing_car_details;
}
@Override
protected void initView(Bundle savedInstanceState, TitleView titleView, Intent intent) {
titleView.setTitle("开具电子发票");
// webUrl = WalletApi.HTTP_URL_WALLET_WITHDRAWDETAIL + "?id=" + id;
Log.i("CampDetailActivity", "initView: " + webUrl);
initWeb();
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
private void initWeb() {
WebSettings webSettings = mWebView.getSettings();
if (webSettings == null) return;
// 支持 Js 使用
webSettings.setJavaScriptEnabled(true);
// 开启DOM缓存,默认状态下是不支持LocalStorage的
webSettings.setDomStorageEnabled(true);
// 开启数据库缓存
webSettings.setDatabaseEnabled(true);
// 支持自动加载图片
webSettings.setLoadsImagesAutomatically(hasKitkat());
// 设置 WebView 的缓存模式
webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
// 支持启用缓存模式
webSettings.setAppCacheEnabled(true);
// 设置 AppCache 最大缓存值(现在官方已经不提倡使用,已废弃)
// webSettings.setAppCacheMaxSize(8 * 1024 * 1024);
// Android 私有缓存存储,如果你不调用setAppCachePath方法,WebView将不会产生这个目录
webSettings.setAppCachePath(getCacheDir().getAbsolutePath());
// 数据库路径
// if (!hasKitkat()) {
// webSettings.setDatabasePath(getDatabasePath("html").getPath());
// }
// 关闭密码保存提醒功能
// webSettings.setSavePassword(false);
// 支持缩放
webSettings.setSupportZoom(true);
// 设置 UserAgent 属性
webSettings.setUserAgentString("");
// 允许加载本地 html 文件/false
webSettings.setAllowFileAccess(true);
// 允许通过 file url 加载的 Javascript 读取其他的本地文件,Android 4.1 之前默认是true,在 Android 4.1 及以后默认是false,也就是禁止
webSettings.setAllowFileAccessFromFileURLs(true);
// 允许通过 file url 加载的 Javascript 可以访问其他的源,包括其他的文件和 http,https 等其他的源,
// Android 4.1 之前默认是true,在 Android 4.1 及以后默认是false,也就是禁止
// 如果此设置是允许,则 setAllowFileAccessFromFileURLs 不起做用
webSettings.setAllowUniversalAccessFromFileURLs(true);
mWebView.addJavascriptInterface(new AndroidJs(), "AndroidJs");
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
return super.shouldOverrideUrlLoading(view, request);
}
});
mWebView.loadUrl(webUrl);
mWebView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (newProgress == 100) {
pbProgress.setVisibility(View.GONE);//加载完网页进度条消失
} else {
pbProgress.setVisibility(View.VISIBLE);//开始加载网页时显示进度条
pbProgress.setProgress(newProgress);//设置进度值
}
}
});
}
public class AndroidJs {
@JavascriptInterface
public String getToken() {
return OkGoUtil.getToken();
}
}
@Override
protected void onStart() {
super.onStart();
}
@Override
public void onResume() {
super.onResume();
mWebView.onResume();// 生命周期onResume
}
@Override
protected void onPause() {
super.onPause();
mWebView.onPause();//生命周期onPause
}
@Override
public void onDestroy() {
super.onDestroy();
mWebView.stopLoading();// 停止当前加载
mWebView.clearMatches();// 清除网页查找的高亮匹配字符。
mWebView.clearHistory();// 清除当前 WebView 访问的历史记录
mWebView.clearSslPreferences();//清除ssl信息
mWebView.clearCache(true);//清空网页访问留下的缓存数据。需要注意的时,由于缓存是全局的,所以只要是WebView用到的缓存都会被清空,即便其他地方也会使用到。该方法接受一个参数,从命名即可看出作用。若设为false,则只清空内存里的资源缓存,而不清空磁盘里的。
mWebView.loadUrl("about:blank");// 清空当前加载
mWebView.removeAllViews();// 清空子 View
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2) {
mWebView.removeJavascriptInterface("AndroidNative");// 向 Web端注入 java 对象
}
// mWebView.addJavascriptInterface(new AndroidJs(),"AndroidJs");
mWebView.destroy();// 生命周期销毁
}
@Override
public void onShowResult(int requestType, BaseBean result) {
}
}
package com.xxrv.invoice.adapter; package com.xxrv.invoice.adapter;
import android.view.View;
import android.widget.CompoundButton;
import com.chad.library.adapter.base.BaseQuickAdapter; import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder; import com.chad.library.adapter.base.BaseViewHolder;
import com.xxrv.invoice.R; import com.xxrv.invoice.R;
import com.xxrv.invoice.bean.OrderInvoicingCarBean;
import java.util.ArrayList;
import java.util.List;
/** /**
* 按订单开票 租车 item * 按订单开票 租车 item
*/ */
public class OrderInvoicingCarAdapter extends BaseQuickAdapter<String, BaseViewHolder> { public class OrderInvoicingCarAdapter extends BaseQuickAdapter<OrderInvoicingCarBean.DataBeanX.DataBean, BaseViewHolder> {
public OrderInvoicingCarAdapter() { public OrderInvoicingCarAdapter() {
super(R.layout.rv_item_order_invoicing_car); super(R.layout.rv_item_order_invoicing_car);
} }
@Override @Override
protected void convert(BaseViewHolder helper, String item) { protected void convert(BaseViewHolder helper, final OrderInvoicingCarBean.DataBeanX.DataBean item) {
if (item.getSelectType() == 1) {
helper.setChecked(R.id.cb_select, true);
} else {
helper.setChecked(R.id.cb_select, false);
}
helper.addOnClickListener(R.id.ll_item_bg);
helper.addOnClickListener(R.id.cb_select);
}
public int getPosition(OrderInvoicingCarBean.DataBeanX.DataBean item) {
return mData.indexOf(item);
}
public void setItemState(int position) {
mData.get(position).setSelectType(mData.get(position).getSelectType() == 0 ? 1 : 0);
notifyItemChanged(position);
}
public List<OrderInvoicingCarBean.DataBeanX.DataBean> getSelectItem() {
List<OrderInvoicingCarBean.DataBeanX.DataBean> list = new ArrayList<>();
for (OrderInvoicingCarBean.DataBeanX.DataBean dataBean : mData) {
if (dataBean.getSelectType() == 1) {
list.add(dataBean);
}
}
return list;
} }
} }
package com.xxrv.invoice.bean;
import com.ruiwenliu.wrapper.base.BaseBean;
import java.io.Serializable;
import java.util.List;
/**
* 订单租车
*/
public class OrderInvoicingCarBean extends BaseBean{
private DataBeanX data;
private int code;
public DataBeanX getData() {
return data;
}
public void setData(DataBeanX data) {
this.data = data;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public static class DataBeanX {
private int totalCount;
private int totalPage;
private int pageNum;
private List<DataBean> data;
public int getTotalCount() {
return totalCount;
}
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getPageNum() {
return pageNum;
}
public void setPageNum(int pageNum) {
this.pageNum = pageNum;
}
public List<DataBean> getData() {
return data;
}
public void setData(List<DataBean> data) {
this.data = data;
}
public static class DataBean implements Serializable{
public int selectType;//是否选中
public int getSelectType() {
return selectType;
}
public void setSelectType(int selectType) {
this.selectType = selectType;
}
}
}
}
...@@ -41,6 +41,8 @@ ...@@ -41,6 +41,8 @@
android:background="@color/colorWrite" android:background="@color/colorWrite"
android:orientation="vertical"> android:orientation="vertical">
<include layout="@layout/common_line" />
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/size_40" android:layout_height="@dimen/size_40"
...@@ -107,6 +109,7 @@ ...@@ -107,6 +109,7 @@
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:background="@drawable/shape_rv_bg_shallow_dark_yellow_circle2" android:background="@drawable/shape_rv_bg_shallow_dark_yellow_circle2"
android:gravity="center" android:gravity="center"
android:enabled="false"
android:text="下一步" android:text="下一步"
android:textColor="@color/colorWrite" android:textColor="@color/colorWrite"
android:textSize="@dimen/text_16" /> android:textSize="@dimen/text_16" />
......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorLine"
android:orientation="vertical">
<ProgressBar
android:id="@+id/pb_progress"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="@dimen/size_3"
android:indeterminateOnly="false"
android:max="100"
android:progressDrawable="@drawable/shape_rv_bg_yellow_progress"
android:visibility="gone"></ProgressBar>
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" />
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ll_item_bg"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/size_10" android:layout_marginTop="@dimen/size_10"
...@@ -9,6 +10,7 @@ ...@@ -9,6 +10,7 @@
android:paddingBottom="@dimen/size_10"> android:paddingBottom="@dimen/size_10">
<CheckBox <CheckBox
android:id="@+id/cb_select"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
...@@ -28,6 +30,7 @@ ...@@ -28,6 +30,7 @@
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<TextView <TextView
android:id="@+id/tv_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"
...@@ -37,6 +40,7 @@ ...@@ -37,6 +40,7 @@
<TextView <TextView
android:id="@+id/tv_type"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/size_10" android:layout_marginLeft="@dimen/size_10"
...@@ -59,16 +63,22 @@ ...@@ -59,16 +63,22 @@
android:orientation="vertical"> android:orientation="vertical">
<TextView <TextView
android:id="@+id/tv_get_date"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="2"
android:text="取:2019-05-15 10:00 欣新房车控股集团(东莞市)" android:text="取:2019-05-15 10:00 欣新房车控股集团(东莞市)"
android:textColor="@color/textGray" android:textColor="@color/textGray"
android:textSize="@dimen/text_12" /> android:textSize="@dimen/text_12" />
<TextView <TextView
android:id="@+id/tv_out_date"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/size_5" android:layout_marginTop="@dimen/size_5"
android:ellipsize="end"
android:maxLines="2"
android:text="还:2019-05-17 10:00 欣新房车控股集团(东莞市)" android:text="还:2019-05-17 10:00 欣新房车控股集团(东莞市)"
android:textColor="@color/textGray" android:textColor="@color/textGray"
android:textSize="@dimen/text_12" /> android:textSize="@dimen/text_12" />
...@@ -76,6 +86,7 @@ ...@@ -76,6 +86,7 @@
</LinearLayout> </LinearLayout>
<TextView <TextView
android:id="@+id/tv_price"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
...@@ -92,9 +103,5 @@ ...@@ -92,9 +103,5 @@
android:textColor="@color/text_Gray" android:textColor="@color/text_Gray"
android:textSize="@dimen/text_12" /> android:textSize="@dimen/text_12" />
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
package com.rv.share.view; package com.rv.share.view;
import android.content.ActivityNotFoundException;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
...@@ -15,6 +16,7 @@ import android.webkit.WebSettings; ...@@ -15,6 +16,7 @@ import android.webkit.WebSettings;
import android.webkit.WebView; import android.webkit.WebView;
import android.webkit.WebViewClient; import android.webkit.WebViewClient;
import android.widget.ProgressBar; import android.widget.ProgressBar;
import android.widget.Toast;
import com.ruiwenliu.wrapper.SPConstance; import com.ruiwenliu.wrapper.SPConstance;
import com.rv.component.utils.Cookie; import com.rv.component.utils.Cookie;
...@@ -218,6 +220,22 @@ public class RvWebView extends WebView { ...@@ -218,6 +220,22 @@ public class RvWebView extends WebView {
return OkGoUtil.getYkId(); return OkGoUtil.getYkId();
} }
/**
* 打开微信
*/
@JavascriptInterface
public void goWeChat() {
try {
Intent intent = new Intent(Intent.ACTION_MAIN);
ComponentName cmp = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.LauncherUI");
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setComponent(cmp);
getContext().startActivity(intent);
} catch (ActivityNotFoundException e) {
Toast.makeText(getContext(), "检查到您手机没有安装微信,请安装后使用该功能", Toast.LENGTH_SHORT).show();
}
}
} }
public interface WebViewListener { public interface WebViewListener {
......
...@@ -62,8 +62,6 @@ public class PreviewxActivity extends BaseStatusActivity<VideoPresenter> { ...@@ -62,8 +62,6 @@ public class PreviewxActivity extends BaseStatusActivity<VideoPresenter> {
ImageView ivBack; ImageView ivBack;
@BindView(R2.id.ll_back) @BindView(R2.id.ll_back)
LinearLayout llBack; LinearLayout llBack;
@BindView(R2.id.bar_change) @BindView(R2.id.bar_change)
Xspeedbar mSpeedBar; Xspeedbar mSpeedBar;
@BindView(R2.id.bar_volume) @BindView(R2.id.bar_volume)
......
package com.xxrv.video.activity; package com.xxrv.video.activity;
import android.Manifest;
import android.app.Activity;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.graphics.Rect; import android.graphics.Rect;
import android.hardware.Camera; import android.hardware.Camera;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.Message; import android.os.Message;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.v4.app.ActivityCompat;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import android.view.View; import android.view.View;
...@@ -27,28 +22,21 @@ import android.widget.Toast; ...@@ -27,28 +22,21 @@ import android.widget.Toast;
import com.alibaba.android.arouter.facade.annotation.Route; import com.alibaba.android.arouter.facade.annotation.Route;
import com.frame.base.bus.Observer; import com.frame.base.bus.Observer;
import com.frame.base.bus.PaymentSuccessfulEvent;
import com.frame.base.bus.RxBus; import com.frame.base.bus.RxBus;
import com.frame.base.bus.SendVideoEvent; import com.frame.base.bus.SendVideoEvent;
import com.frame.base.url.Constance; import com.frame.base.url.Constance;
import com.frame.rv.config.RvFrameConfig;
import com.joe.camera2recorddemo.View.CameraRecordView; import com.joe.camera2recorddemo.View.CameraRecordView;
import com.ruiwenliu.wrapper.base.BaseBean; import com.ruiwenliu.wrapper.base.BaseBean;
import com.ruiwenliu.wrapper.base.BaseStatusActivity; import com.ruiwenliu.wrapper.base.BaseStatusActivity;
import com.ruiwenliu.wrapper.statusbar.StatusBarUtil; import com.ruiwenliu.wrapper.statusbar.StatusBarUtil;
import com.ruiwenliu.wrapper.util.permission.RxPermission;
import com.ruiwenliu.wrapper.weight.TitleView; import com.ruiwenliu.wrapper.weight.TitleView;
import com.xxfc.imcamera.cameralibrary.CameraInterface; import com.xxfc.imcamera.cameralibrary.CameraInterface;
import com.xxrv.video.R; import com.xxrv.video.R;
import com.xxrv.video.R2; import com.xxrv.video.R2;
import com.xxrv.video.api.VideoApi;
import com.xxrv.video.audio_x.VoiceManager; import com.xxrv.video.audio_x.VoiceManager;
import com.xxrv.video.bean.circle.DiscoveryVideoBean;
import com.xxrv.video.bean.circle.MusicInfo; import com.xxrv.video.bean.circle.MusicInfo;
import com.xxrv.video.bean.circle.VideoFile; import com.xxrv.video.bean.circle.VideoFile;
import com.xxrv.video.bean.circle.VideoIMTokenBean;
import com.xxrv.video.dialog.FilterPreviewDialog; import com.xxrv.video.dialog.FilterPreviewDialog;
import com.xxrv.video.dialog.SelectMusicDialog;
import com.xxrv.video.presenter.VideoPresenter; import com.xxrv.video.presenter.VideoPresenter;
import com.xxrv.video.util.RecorderUtils; import com.xxrv.video.util.RecorderUtils;
import com.xxrv.video.util.ScreenUtil; import com.xxrv.video.util.ScreenUtil;
...@@ -56,23 +44,15 @@ import com.xxrv.video.util.UiUtils; ...@@ -56,23 +44,15 @@ import com.xxrv.video.util.UiUtils;
import com.xxrv.video.weight.MarqueTextView; import com.xxrv.video.weight.MarqueTextView;
import com.xxrv.video.weight.RecordButton; import com.xxrv.video.weight.RecordButton;
import com.xxrv.video.weight.Xrecprogressbar; import com.xxrv.video.weight.Xrecprogressbar;
import com.yuyife.okgo.OkGoUtil;
import java.io.IOException; import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import VideoHandle.EpEditor; import VideoHandle.EpEditor;
import VideoHandle.EpVideo; import VideoHandle.EpVideo;
import VideoHandle.OnEditorListener; import VideoHandle.OnEditorListener;
import butterknife.BindView; import butterknife.BindView;
import butterknife.OnClick; import butterknife.OnClick;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
import pub.devrel.easypermissions.AppSettingsDialog;
/** /**
* 发短视频 * 发短视频
......
...@@ -27,4 +27,7 @@ public interface VideoApi extends RvFrameConfig { ...@@ -27,4 +27,7 @@ public interface VideoApi extends RvFrameConfig {
//添加播放量 //添加播放量
String DISCOVERY_PLAYAMOUNT_ADD = IMA_BASEUSRL + "/b/circle/msg/playAmount/add"; String DISCOVERY_PLAYAMOUNT_ADD = IMA_BASEUSRL + "/b/circle/msg/playAmount/add";
//分享短视频h5
String DISCOVERY_SHORT_VIDEO = HOST_H5_DETAIL + "/h5/appHtml/view/shortVideo.html";
} }
...@@ -23,6 +23,8 @@ import android.widget.ImageView; ...@@ -23,6 +23,8 @@ import android.widget.ImageView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import com.alibaba.android.arouter.launcher.ARouter;
import com.frame.base.url.Constance;
import com.frame.rv.config.RvFrameConfig; import com.frame.rv.config.RvFrameConfig;
import com.ruiwenliu.wrapper.SPConstance; import com.ruiwenliu.wrapper.SPConstance;
import com.ruiwenliu.wrapper.base.BaseBean; import com.ruiwenliu.wrapper.base.BaseBean;
...@@ -214,7 +216,11 @@ public class TrillCommDialog extends BottomSheetDialogFragment implements BaseVi ...@@ -214,7 +216,11 @@ public class TrillCommDialog extends BottomSheetDialogFragment implements BaseVi
public void onClick(View v) { public void onClick(View v) {
mReplyId = ""; mReplyId = "";
mReplyName = ""; mReplyName = "";
showInputDialog(null); if (OkGoUtil.getToken() != null) {
showInputDialog(null);
} else {
ARouter.getInstance().build(Constance.ACTIVITY_URL_LOGINRV).navigation();
}
} }
}); });
...@@ -444,7 +450,11 @@ public class TrillCommDialog extends BottomSheetDialogFragment implements BaseVi ...@@ -444,7 +450,11 @@ public class TrillCommDialog extends BottomSheetDialogFragment implements BaseVi
mReplyName = comm.getNickname(); mReplyName = comm.getNickname();
String text = getString(R.string.replay) + " @" + comm.getNickname() + ": "; String text = getString(R.string.replay) + " @" + comm.getNickname() + ": ";
showInputDialog(text); if (OkGoUtil.getToken() != null) {
showInputDialog(text);
} else {
ARouter.getInstance().build(Constance.ACTIVITY_URL_LOGINRV).navigation();
}
} }
} }
} }
...@@ -17,10 +17,11 @@ import android.widget.ImageView; ...@@ -17,10 +17,11 @@ import android.widget.ImageView;
import android.widget.ProgressBar; import android.widget.ProgressBar;
import android.widget.RelativeLayout; import android.widget.RelativeLayout;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast;
import com.alibaba.android.arouter.launcher.ARouter;
import com.base.utils.ui.datetime.selector.util.TextUtil; import com.base.utils.ui.datetime.selector.util.TextUtil;
import com.danikula.videocache.HttpProxyCacheServer; import com.danikula.videocache.HttpProxyCacheServer;
import com.frame.base.url.Constance;
import com.frame.rv.config.RvFrameConfig; import com.frame.rv.config.RvFrameConfig;
import com.ruiwenliu.wrapper.base.BaseBean; import com.ruiwenliu.wrapper.base.BaseBean;
import com.ruiwenliu.wrapper.base.BaseStatusActivity; import com.ruiwenliu.wrapper.base.BaseStatusActivity;
...@@ -203,10 +204,10 @@ public class JcvTrillVideo extends FrameLayout implements BaseView, View.OnClick ...@@ -203,10 +204,10 @@ public class JcvTrillVideo extends FrameLayout implements BaseView, View.OnClick
tvAddress = findViewById(R.id.tv_address); tvAddress = findViewById(R.id.tv_address);
ivAvatar.setOnClickListener(this); ivAvatar.setOnClickListener(this);
btnLikes.setOnClickListener(this);// 点赞按钮
findViewById(R.id.iv_follow).setOnClickListener(this);// 关注 findViewById(R.id.iv_follow).setOnClickListener(this);// 关注
findViewById(R.id.iv_comm).setOnClickListener(this); // 评论按钮 findViewById(R.id.ll_item_video_islike).setOnClickListener(this);
findViewById(R.id.iv_share).setOnClickListener(this); // 分享按钮 findViewById(R.id.ll_item_video_comment).setOnClickListener(this);
findViewById(R.id.ll_item_video_share).setOnClickListener(this);
mVideoView.addOnJcvdListener(mVideoListener); mVideoView.addOnJcvdListener(mVideoListener);
initGestureAndAnimation(context); initGestureAndAnimation(context);
...@@ -357,15 +358,15 @@ public class JcvTrillVideo extends FrameLayout implements BaseView, View.OnClick ...@@ -357,15 +358,15 @@ public class JcvTrillVideo extends FrameLayout implements BaseView, View.OnClick
// 点击头像 // 点击头像
} else if (id == R.id.iv_follow) { } else if (id == R.id.iv_follow) {
} else if (id == R.id.iv_likes) { } else if (id == R.id.ll_item_video_islike) {
// 点赞按钮 // 点赞按钮
loadImToken(); loadImToken();
} else if (id == R.id.iv_comm) { } else if (id == R.id.ll_item_video_comment) {
// 评论按钮 // 评论按钮
if (mContext instanceof BaseStatusActivity) { if (mContext instanceof BaseStatusActivity) {
mCommDialog.show(((BaseStatusActivity) mContext).getSupportFragmentManager(), "TilTok"); mCommDialog.show(((BaseStatusActivity) mContext).getSupportFragmentManager(), "TilTok");
} }
} else if (id == R.id.iv_share) { } else if (id == R.id.ll_item_video_share) {
// 分享按钮 // 分享按钮
shareMessage(); shareMessage();
} else if (id == R.id.xuan_video) { } else if (id == R.id.xuan_video) {
...@@ -380,6 +381,8 @@ public class JcvTrillVideo extends FrameLayout implements BaseView, View.OnClick ...@@ -380,6 +381,8 @@ public class JcvTrillVideo extends FrameLayout implements BaseView, View.OnClick
Map<String, Object> headMap = new LinkedHashMap<>(); Map<String, Object> headMap = new LinkedHashMap<>();
headMap.put("Authorization", OkGoUtil.getToken()); headMap.put("Authorization", OkGoUtil.getToken());
mPresenter.postData(RvFrameConfig.HOST, 1, VideoApi.DISCOVERY_IM_LOGIN, VideoIMTokenBean.class, headMap, headMap, false); mPresenter.postData(RvFrameConfig.HOST, 1, VideoApi.DISCOVERY_IM_LOGIN, VideoIMTokenBean.class, headMap, headMap, false);
} else {
ARouter.getInstance().build(Constance.ACTIVITY_URL_LOGINRV).navigation();
} }
} }
...@@ -400,7 +403,8 @@ public class JcvTrillVideo extends FrameLayout implements BaseView, View.OnClick ...@@ -400,7 +403,8 @@ public class JcvTrillVideo extends FrameLayout implements BaseView, View.OnClick
private void shareMessage() { private void shareMessage() {
if (mShareListener != null) { if (mShareListener != null) {
mShareListener.onShare(imageUrl, sVideoUrl, title, position); String url = VideoApi.DISCOVERY_SHORT_VIDEO + "?id=" + mMessageid + "&shareType=app";
mShareListener.onShare(imageUrl, url, title, position);
} }
} }
......
...@@ -7,9 +7,7 @@ ...@@ -7,9 +7,7 @@
<fm.jiecao.jcvideoplayer_lib.JCVideoViewbyXuan <fm.jiecao.jcvideoplayer_lib.JCVideoViewbyXuan
android:id="@+id/x_video" android:id="@+id/x_video"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent"></fm.jiecao.jcvideoplayer_lib.JCVideoViewbyXuan>
</fm.jiecao.jcvideoplayer_lib.JCVideoViewbyXuan>
<ImageView <ImageView
android:id="@+id/iv_thumb" android:id="@+id/iv_thumb"
...@@ -18,58 +16,57 @@ ...@@ -18,58 +16,57 @@
android:scaleType="fitXY" /> android:scaleType="fitXY" />
<com.ruiwenliu.wrapper.statusbar.StatusBarHeightView <com.ruiwenliu.wrapper.statusbar.StatusBarHeightView
android:id="@+id/shv"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:layout_marginTop="@dimen/size_5" android:background="@color/gray_313131"
android:orientation="vertical"
app:use_type="use_padding_top"> app:use_type="use_padding_top">
<com.xxrv.video.weight.Xpreprogressbar <com.xxrv.video.weight.Xpreprogressbar
android:id="@+id/xpb_pro" android:id="@+id/xpb_pro"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="5dp" android:layout_height="5dp"
android:layout_marginLeft="@dimen/size_20" android:layout_marginLeft="@dimen/size_20"
android:layout_marginRight="@dimen/size_20" /> android:layout_marginRight="@dimen/size_20" />
</com.ruiwenliu.wrapper.statusbar.StatusBarHeightView>
<RelativeLayout <RelativeLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@+id/xpb_pro" android:layout_below="@+id/shv"
android:layout_marginLeft="5dp" android:layout_marginLeft="5dp"
android:layout_marginTop="@dimen/size_10" android:layout_marginTop="@dimen/size_10"
android:layout_marginRight="15dp"> android:layout_marginRight="15dp">
<LinearLayout <LinearLayout
android:id="@+id/ll_back" android:id="@+id/ll_back"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical"
android:padding="10dp"> android:padding="10dp">
<ImageView <ImageView
android:id="@+id/iv_back" android:id="@+id/iv_back"
android:layout_width="28dp" android:layout_width="28dp"
android:layout_height="25dp" android:layout_height="25dp"
android:src="@drawable/ic_back" /> android:src="@drawable/ic_back" />
</LinearLayout> </LinearLayout>
<TextView <TextView
android:id="@+id/tv_item_next" android:id="@+id/tv_item_next"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentRight="true" android:layout_alignParentRight="true"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:background="@drawable/shape_rv_bg_shallow_dark_yellow_circle" android:background="@drawable/shape_rv_bg_shallow_dark_yellow_circle"
android:paddingLeft="@dimen/size_12" android:paddingLeft="@dimen/size_12"
android:paddingTop="@dimen/size_8" android:paddingTop="@dimen/size_8"
android:paddingRight="@dimen/size_12" android:paddingRight="@dimen/size_12"
android:paddingBottom="@dimen/size_8" android:paddingBottom="@dimen/size_8"
android:text="下一步" android:text="下一步"
android:textColor="@color/colorWrite" /> android:textColor="@color/colorWrite" />
</RelativeLayout> </RelativeLayout>
</com.ruiwenliu.wrapper.statusbar.StatusBarHeightView>
<LinearLayout <LinearLayout
......
...@@ -291,7 +291,6 @@ public class WalletActivity extends BaseStatusActivity<WalletPresenter> { ...@@ -291,7 +291,6 @@ public class WalletActivity extends BaseStatusActivity<WalletPresenter> {
if (OkGoUtil.getToken() != null) if (OkGoUtil.getToken() != null)
headMap.put("Authorization", OkGoUtil.getToken()); headMap.put("Authorization", OkGoUtil.getToken());
mPresenter.getDataHead(RvFrameConfig.HOST, 1, WalletApi.HTTP_URL_CHECK_SETPWD, WalletCheckPwdBean.class, headMap, false); mPresenter.getDataHead(RvFrameConfig.HOST, 1, WalletApi.HTTP_URL_CHECK_SETPWD, WalletCheckPwdBean.class, headMap, false);
} }
...@@ -357,6 +356,7 @@ public class WalletActivity extends BaseStatusActivity<WalletPresenter> { ...@@ -357,6 +356,7 @@ public class WalletActivity extends BaseStatusActivity<WalletPresenter> {
AuthResult authResult = new AuthResult((Map<String, String>) msg.obj, true); AuthResult authResult = new AuthResult((Map<String, String>) msg.obj, true);
String resultStatus = authResult.getResultStatus(); String resultStatus = authResult.getResultStatus();
// 判断resultStatus 为“9000”且result_code // 判断resultStatus 为“9000”且result_code
showToast(resultStatus.toString());
// 为“200”则代表授权成功,具体状态码代表含义可参考授权接口文档 // 为“200”则代表授权成功,具体状态码代表含义可参考授权接口文档
if (TextUtils.equals(resultStatus, "9000") && TextUtils.equals(authResult.getResultCode(), "200")) { if (TextUtils.equals(resultStatus, "9000") && TextUtils.equals(authResult.getResultCode(), "200")) {
// 传入,则支付账户为该授权账户 // 传入,则支付账户为该授权账户
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment