修改我的页面充值跳转,钱包跳转

This commit is contained in:
18401019693
2023-11-03 15:47:57 +08:00
parent 6e04287132
commit 83758f39b1
15 changed files with 36 additions and 30 deletions

View File

@@ -53,7 +53,9 @@
<activity
android:name="com.yunbao.common.activity.PreviewImageActivity"
android:screenOrientation="portrait" />
<activity
android:name="com.yunbao.common.activity.MyWalletActivity"
android:screenOrientation="portrait" />
<activity
android:name="com.yunbao.common.activity.PreviewVideoActivity"
android:screenOrientation="portrait" />

View File

@@ -0,0 +1,212 @@
package com.yunbao.common.activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.DecelerateInterpolator;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.viewpager.widget.ViewPager;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.android.billingclient.api.BillingResult;
import com.android.billingclient.api.Purchase;
import com.android.billingclient.api.PurchasesResponseListener;
import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.R;
import com.yunbao.common.fragment.GoogleFragment;
import com.yunbao.common.fragment.LoadingDialog;
import com.yunbao.common.fragment.WalletFragment;
import com.yunbao.common.http.CommonHttpUtil;
import com.yunbao.common.http.HttpCallback;
import com.yunbao.common.manager.IMLoginManager;
import com.yunbao.common.utils.GoogleBillingUtilNew;
import com.yunbao.common.utils.HXLinePagerIndicator;
import com.yunbao.common.utils.RouteUtil;
import com.yunbao.common.utils.ToastUtil;
import net.lucode.hackware.magicindicator.MagicIndicator;
import net.lucode.hackware.magicindicator.ViewPagerHelper;
import net.lucode.hackware.magicindicator.buildins.UIUtil;
import net.lucode.hackware.magicindicator.buildins.commonnavigator.CommonNavigator;
import net.lucode.hackware.magicindicator.buildins.commonnavigator.abs.CommonNavigatorAdapter;
import net.lucode.hackware.magicindicator.buildins.commonnavigator.abs.IPagerIndicator;
import net.lucode.hackware.magicindicator.buildins.commonnavigator.abs.IPagerTitleView;
import net.lucode.hackware.magicindicator.buildins.commonnavigator.indicators.LinePagerIndicator;
import net.lucode.hackware.magicindicator.buildins.commonnavigator.titles.ColorTransitionPagerTitleView;
import java.util.List;
import java.util.Locale;
@Route(path = RouteUtil.PATH_COIN)
public class MyWalletActivity extends AbsActivity {
ViewPager vp_content;
static MyWalletActivity mw;
Fragment[] fragments = null;
private Handler payHandler = new Handler();
@Override
protected int getLayoutId() {
return R.layout.activity_my_wallet;
}
@Override
protected void main() {
super.main();
mw = MyWalletActivity.this;
setTitle(mContext.getString(R.string.wallet));
GoogleBillingUtilNew.getInstance().initGooglePay(mContext);
vp_content = (ViewPager) findViewById(R.id.vp_content);
TextView rView = (TextView) findViewById(R.id.rView);
findViewById(R.id.redPacketMain).setVisibility(View.VISIBLE);
findViewById(R.id.redPacketMain).setOnClickListener(v -> {
RouteUtil.forwardRedPacketList();
});
rView.setOnClickListener(v -> {
LoadingDialog loadingDialog = new LoadingDialog();
loadingDialog.show(getSupportFragmentManager(), "LoadingDialog");
loadingDialog.setShowText(getString(R.string.order_query));
GoogleBillingUtilNew.getInstance().queryPurchasesAsync(new PurchasesResponseListener() {
@Override
public void onQueryPurchasesResponse(@NonNull BillingResult billingResult, @NonNull List<Purchase> list) {
if (list.size() == 0) {
loadingDialog.setShowText(getString(R.string.order_query_success));
payHandler.postDelayed(() -> loadingDialog.dismiss(), 2000);
} else {
loadingDialog.setShowText(getString(R.string.order_query));
//消费订单
GoogleBillingUtilNew.getInstance().consume(list);
for (int i = 0; i < list.size(); i++) {
int finalI = i;
payHandler.post(new Runnable() {
@Override
public void run() {
//谷歌掉单处理
CommonHttpUtil
.Google_sec_pay(list.get(finalI).getPurchaseToken(),
list.get(finalI).getOrderId(),
list.get(finalI).getProducts().get(0),
new HttpCallback() {
@Override
public void onSuccess(int code, String msg, String[] info) {
if (finalI == list.size() - 1) {
loadingDialog.setShowText(getString(R.string.order_query_success));
loadingDialog.dismiss();
}
ToastUtil.show("充值已到账");
finish();
}
});
}
});
}
}
}
});
});
final String[] titles = {mContext.getString(R.string.diamond), mContext.getString(R.string.coins), mContext.getString(R.string.golden_beans)};
if (getIntent().getStringExtra("tag") != null) {
Log.i("tss", "首充");
if (CommonAppConfig.IS_GOOGLE_PLAY == false) {
//链接版本
fragments = new Fragment[]{new GoogleFragment(CommonAppConfig.HOST + "/index.php?g=Appapi&first_page=1&m=Mall&a=walletcoin&uid=" + CommonAppConfig.getInstance().getUid() + "&token=" + CommonAppConfig.getInstance().getToken() + "&package_name=pd" + "&isZh=" + ((IMLoginManager.get(mContext).getLocaleLanguage() == Locale.SIMPLIFIED_CHINESE) ? "1" : "0")),
new GoogleFragment(CommonAppConfig.HOST + "/index.php?g=Appapi&m=Mall&first_page=1&a=walletgold&uid=" + CommonAppConfig.getInstance().getUid() + "&token=" + CommonAppConfig.getInstance().getToken() + "&package_name=pd" + "&isZh=" + ((IMLoginManager.get(mContext).getLocaleLanguage() == Locale.SIMPLIFIED_CHINESE) ? "1" : "0")),
new WalletFragment(this, CommonAppConfig.HOST + "/index.php?g=Appapi&m=Mall&first_page=1&a=walletbean&uid=" + CommonAppConfig.getInstance().getUid() + "&token=" + CommonAppConfig.getInstance().getToken() + "&package_name=pd" + "&isZh=" + ((IMLoginManager.get(mContext).getLocaleLanguage() == Locale.SIMPLIFIED_CHINESE) ? "1" : "0"))};
} else {
rView.setVisibility(View.VISIBLE);
fragments = new Fragment[]{new GoogleFragment(CommonAppConfig.HOST + "/index.php?g=Appapi&m=Mall&a=googlepaycoin&uid=" + CommonAppConfig.getInstance().getUid() + "&token=" + CommonAppConfig.getInstance().getToken() + "&package_name=pd" + "&isZh=" + ((IMLoginManager.get(mContext).getLocaleLanguage() == Locale.SIMPLIFIED_CHINESE) ? "1" : "0")),
new GoogleFragment(CommonAppConfig.HOST + "/index.php?g=Appapi&m=Mall&a=googlepaygole&uid=" + CommonAppConfig.getInstance().getUid() + "&token=" + CommonAppConfig.getInstance().getToken() + "&package_name=pd" + "&isZh=" + ((IMLoginManager.get(mContext).getLocaleLanguage() == Locale.SIMPLIFIED_CHINESE) ? "1" : "0")),
new WalletFragment(this, CommonAppConfig.HOST + "/index.php?g=Appapi&m=Mall&first_page=1&a=walletbean&uid=" + CommonAppConfig.getInstance().getUid() + "&token=" + CommonAppConfig.getInstance().getToken() + "&isZh=" + ((IMLoginManager.get(mContext).getLocaleLanguage() == Locale.SIMPLIFIED_CHINESE) ? "1" : "0"))};
}
} else {
if (CommonAppConfig.IS_GOOGLE_PLAY == false) {
Log.i("tss", "不是首充");
//链接版本
fragments = new Fragment[]{new GoogleFragment(CommonAppConfig.HOST + "/index.php?g=Appapi&m=Mall&a=walletcoin&uid=" + CommonAppConfig.getInstance().getUid() + "&token=" + CommonAppConfig.getInstance().getToken() + "&package_name=pd" + "&isZh=" + ((IMLoginManager.get(mContext).getLocaleLanguage() == Locale.SIMPLIFIED_CHINESE) ? "1" : "0")),
new GoogleFragment(CommonAppConfig.HOST + "/index.php?g=Appapi&m=Mall&a=walletgold&uid=" + CommonAppConfig.getInstance().getUid() + "&token=" + CommonAppConfig.getInstance().getToken() + "&package_name=pd" + "&isZh=" + ((IMLoginManager.get(mContext).getLocaleLanguage() == Locale.SIMPLIFIED_CHINESE) ? "1" : "0")),
new WalletFragment(this, CommonAppConfig.HOST + "/index.php?g=Appapi&m=Mall&a=walletbean&uid=" + CommonAppConfig.getInstance().getUid() + "&token=" + CommonAppConfig.getInstance().getToken() + "&package_name=pd" + "&isZh=" + ((IMLoginManager.get(mContext).getLocaleLanguage() == Locale.SIMPLIFIED_CHINESE) ? "1" : "0"))};
} else {
rView.setVisibility(View.VISIBLE);
fragments = new Fragment[]{new GoogleFragment(CommonAppConfig.HOST + "/index.php?g=Appapi&m=Mall&a=googlepaycoin&uid=" + CommonAppConfig.getInstance().getUid() + "&token=" + CommonAppConfig.getInstance().getToken() + "&package_name=pd" + "&isZh=" + ((IMLoginManager.get(mContext).getLocaleLanguage() == Locale.SIMPLIFIED_CHINESE) ? "1" : "0")),
new GoogleFragment(CommonAppConfig.HOST + "/index.php?g=Appapi&m=Mall&a=googlepaygole&uid=" + CommonAppConfig.getInstance().getUid() + "&token=" + CommonAppConfig.getInstance().getToken() + "&package_name=pd" + "&isZh=" + ((IMLoginManager.get(mContext).getLocaleLanguage() == Locale.SIMPLIFIED_CHINESE) ? "1" : "0")),
new WalletFragment(this, CommonAppConfig.HOST + "/index.php?g=Appapi&m=Mall&first_page=1&a=walletbean&uid=" + CommonAppConfig.getInstance().getUid() + "&token=" + CommonAppConfig.getInstance().getToken() + "&isZh=" + ((IMLoginManager.get(mContext).getLocaleLanguage() == Locale.SIMPLIFIED_CHINESE) ? "1" : "0"))};
}
}
MagicIndicator magicIndicator = (MagicIndicator) findViewById(R.id.magic_indicator);
CommonNavigator commonNavigator = new CommonNavigator(this);
commonNavigator.setAdjustMode(true);
commonNavigator.setAdapter(new CommonNavigatorAdapter() {
@Override
public int getCount() {
return titles == null ? 0 : titles.length;
}
@Override
public IPagerTitleView getTitleView(Context context, final int index) {
ColorTransitionPagerTitleView colorTransitionPagerTitleView = new ColorTransitionPagerTitleView(context);
colorTransitionPagerTitleView.setNormalColor(Color.GRAY);
colorTransitionPagerTitleView.setSelectedColor(Color.BLACK);
colorTransitionPagerTitleView.setTextAppearance(MyWalletActivity.this, R.style.TabLayoutTextStyle);
colorTransitionPagerTitleView.setText(titles[index]);
colorTransitionPagerTitleView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
vp_content.setCurrentItem(index);
}
});
return colorTransitionPagerTitleView;
}
@Override
public IPagerIndicator getIndicator(Context context) {
HXLinePagerIndicator indicator = new HXLinePagerIndicator(context);
indicator.setMode(LinePagerIndicator.MODE_EXACTLY);
indicator.setLineHeight(UIUtil.dip2px(context, 4));
indicator.setLineWidth(UIUtil.dip2px(context, 20));
indicator.setRoundRadius(UIUtil.dip2px(context, 3));
indicator.setStartInterpolator(new AccelerateInterpolator());
indicator.setEndInterpolator(new DecelerateInterpolator(2.0f));
return indicator;
}
});
magicIndicator.setNavigator(commonNavigator);
//每项只进入一次
vp_content.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public Fragment getItem(int position) {
return fragments[position];
}
@Override
public int getCount() {
return fragments.length;
}
@Override
public CharSequence getPageTitle(int position) {
return titles[position];
}
});
ViewPagerHelper.bind(magicIndicator, vp_content);
magicIndicator.onPageSelected(getIntent().getIntExtra("p", 0));
vp_content.setCurrentItem(getIntent().getIntExtra("p", 0));
}
public static void dis() {
mw.finish();
}
}

View File

@@ -0,0 +1,192 @@
package com.yunbao.common.fragment;
import static com.yunbao.common.activity.MyWalletActivity.dis;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.JavascriptInterface;
import android.webkit.WebSettings;
import android.webkit.WebView;
import androidx.fragment.app.Fragment;
import com.android.billingclient.api.Purchase;
import com.facebook.appevents.AppEventsConstants;
import com.google.android.gms.ads.identifier.AdvertisingIdClient;
import com.google.android.gms.common.GooglePlayServicesNotAvailableException;
import com.google.android.gms.common.GooglePlayServicesRepairableException;
import com.yunbao.common.R;
import com.yunbao.common.http.CommonHttpUtil;
import com.yunbao.common.http.HttpCallback;
import com.yunbao.common.utils.GoogleBillingUtilNew;
import com.yunbao.common.utils.StringUtil;
import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.views.weight.TestWebViewClient;
import java.io.IOException;
import java.util.List;
@SuppressLint("ValidFragment")
public class GoogleFragment extends Fragment {
private View view;
public static String mOrderid, mProductId, MoneyUsds;
private WebView rlWebview;
private String url;
String adid = null;
public GoogleFragment() {
}
@SuppressLint("ValidFragment")
public GoogleFragment(String urls) {
url = urls;
Log.e("google", "111aa");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//通过参数中的布局填充获取对应布局
view = inflater.inflate(R.layout.activity_recharge, container, false);
if(StringUtil.isEmpty(url)){
Log.e(TAG, "URL为空" );
return view;
}
rlWebview = (WebView) view.findViewById(R.id.rlWebview);
Log.e("ttt", url);
rlWebview.loadUrl(url);
initGooglePay();
new Thread(new Runnable() {
public void run() {
try {
try {
adid = AdvertisingIdClient.getAdvertisingIdInfo(getActivity()).getId();
Log.e("vssss", adid);
} catch (IOException e) {
e.printStackTrace();
} catch (GooglePlayServicesNotAvailableException e) {
e.printStackTrace();
} catch (GooglePlayServicesRepairableException e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
WebSettings webSettings = rlWebview.getSettings();
webSettings.setDomStorageEnabled(true);
webSettings.setTextZoom(100);
webSettings.setUseWideViewPort(true);
webSettings.setJavaScriptEnabled(true); // 是否开启JS支持
webSettings.setJavaScriptCanOpenWindowsAutomatically(true); // 是否允许JS打开新窗口
webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕大小
webSettings.setSupportZoom(true); // 是否支持缩放
webSettings.setBuiltInZoomControls(true); // 是否支持缩放变焦,前提是支持缩放
rlWebview.addJavascriptInterface(new JsInteration(), "androidObject");
TestWebViewClient testWebViewClient = new TestWebViewClient(getActivity(), rlWebview);
rlWebview.setWebViewClient(testWebViewClient);
return view;
}
String TAG = "GooglePay";
private void initGooglePay() {
GoogleBillingUtilNew.getInstance().initGooglePay(getActivity());
}
private Handler payHandler = new Handler();
//js调用原生
public class JsInteration {
@JavascriptInterface
public void androidNewGoToGooglePay(String ProductId, String OrderNumber, String MoneyUsd) {
Log.e(TAG, "ProductId" + ProductId + "OrderNumber" + OrderNumber + "MoneyUsd" + MoneyUsd);
mProductId = ProductId;
mOrderid = OrderNumber;
MoneyUsds = MoneyUsd;
// googleBillingUtil.purchaseInApp(getActivity(), mProductId);
GoogleBillingUtilNew.getInstance().setBillingListener(new GoogleBillingUtilNew.GoogleBillingListener() {
@Override
public void onPaySuccess(List<Purchase> list) {
for (Purchase purchase : list) {
for (int i = 0; i < list.size(); i++) {
int finalI = i;
payHandler.post(new Runnable() {
@Override
public void run() {
CommonHttpUtil.notifyGoogle(list.get(finalI).getPurchaseToken(), list.get(finalI).getOrderId(), mProductId, mOrderid, adid, new HttpCallback() {
@Override
public void onSuccess(int code, String msg, String[] info) {
if (code == 0) {
Bundle params = new Bundle();
params.putString("currency", "HKD");
params.putString("money", MoneyUsds);
Bundle fb_params = new Bundle();
fb_params.putString(AppEventsConstants.EVENT_PARAM_CURRENCY, "HKD");
fb_params.putString(AppEventsConstants.EVENT_PARAM_CONTENT_ID, mProductId);
//Google官方充值通知
Bundle google_params = new Bundle();
google_params.putString("currency", "HKD");
google_params.putString("product_id", mProductId);
google_params.putString("transaction_id", mOrderid);
google_params.putString("value", MoneyUsds);
google_params.putString("price", MoneyUsds);
google_params.putString("quantity", "1");
dis();
ToastUtil.show("支付成功");
}
}
});
}
});
}
Log.e("谷歌支付", purchase.toString());
}
}
@Override
public void onPayFailed(int code, String msg) {
}
}).checkSku(ProductId);
}
@JavascriptInterface
public void androidMethodBack() {
getActivity().onBackPressed();
}
@JavascriptInterface
public void androidGoBack() {
getActivity().onBackPressed();
}
}
public void release() {
}
}

View File

@@ -0,0 +1,67 @@
package com.yunbao.common.fragment;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebSettings;
import android.webkit.WebView;
import androidx.fragment.app.Fragment;
import com.yunbao.common.R;
import com.yunbao.common.utils.JavascriptInterfaceUtils;
import com.yunbao.common.views.weight.TestWebViewClient;
@SuppressLint("ValidFragment")
public class WalletFragment extends Fragment {
private View view;
private WebView rlWebview;
private String url;
private Activity mContext;
@SuppressLint("ValidFragment")
public WalletFragment(Activity context, String urls) {
Log.e("google", "222aa");
url = urls;
mContext = context;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//通过参数中的布局填充获取对应布局
view = inflater.inflate(R.layout.activity_recharge, container, false);
rlWebview = (WebView) view.findViewById(R.id.rlWebview);
Log.e("ttt", url);
rlWebview.loadUrl(url);
WebSettings webSettings = rlWebview.getSettings();
webSettings.setDomStorageEnabled(true);
webSettings.setTextZoom(100);
webSettings.setUseWideViewPort(true);
webSettings.setJavaScriptEnabled(true); // 是否开启JS支持
webSettings.setJavaScriptCanOpenWindowsAutomatically(true); // 是否允许JS打开新窗口
rlWebview.addJavascriptInterface(JavascriptInterfaceUtils.getInstance().setmContext(mContext, rlWebview).setPageClose(true), "androidObject");
TestWebViewClient testWebViewClient = new TestWebViewClient(getActivity(), rlWebview);
rlWebview.setWebViewClient(testWebViewClient);
return view;
}
}

View File

@@ -0,0 +1,18 @@
package com.yunbao.common.utils;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.LinearGradient;
public class HXLinePagerIndicator extends LinePagerIndicatorEx {
public HXLinePagerIndicator(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
LinearGradient lg = new LinearGradient(getLineRect().left, getLineRect().top, getLineRect().right, getLineRect().bottom, new int[]{0xFFFFB941, 0xFFFF9141}, null, LinearGradient.TileMode.CLAMP);
getPaint().setShader(lg);
canvas.drawRoundRect(getLineRect(), getRoundRadius(), getRoundRadius(), getPaint());
}
}

View File

@@ -0,0 +1,217 @@
package com.yunbao.common.utils;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.view.View;
import android.view.animation.Interpolator;
import android.view.animation.LinearInterpolator;
import net.lucode.hackware.magicindicator.FragmentContainerHelper;
import net.lucode.hackware.magicindicator.buildins.ArgbEvaluatorHolder;
import net.lucode.hackware.magicindicator.buildins.UIUtil;
import net.lucode.hackware.magicindicator.buildins.commonnavigator.abs.IPagerIndicator;
import net.lucode.hackware.magicindicator.buildins.commonnavigator.model.PositionData;
import java.util.Arrays;
import java.util.List;
public class LinePagerIndicatorEx extends View implements IPagerIndicator {
public static final int MODE_MATCH_EDGE = 0; // 直线宽度 == title宽度 - 2 * mXOffset
public static final int MODE_WRAP_CONTENT = 1; // 直线宽度 == title内容宽度 - 2 * mXOffset
public static final int MODE_EXACTLY = 2; // 直线宽度 == mLineWidth
private int mMode; // 默认为MODE_MATCH_EDGE模式
// 控制动画
private Interpolator mStartInterpolator = new LinearInterpolator();
private Interpolator mEndInterpolator = new LinearInterpolator();
private float mYOffset; // 相对于底部的偏移量如果你想让直线位于title上方设置它即可
private float mLineHeight;
private float mXOffset;
private float mLineWidth;
private float mRoundRadius;
private Paint mPaint;
private List<PositionData> mPositionDataList;
private List<Integer> mColors;
private RectF mLineRect = new RectF();
public LinePagerIndicatorEx(Context context) {
super(context);
init(context);
}
private void init(Context context) {
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setStyle(Paint.Style.FILL);
mLineHeight = UIUtil.dip2px(context, 3);
mLineWidth = UIUtil.dip2px(context, 10);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawRoundRect(mLineRect, mRoundRadius, mRoundRadius, mPaint);
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if (mPositionDataList == null || mPositionDataList.isEmpty()) {
return;
}
// 计算颜色
if (mColors != null && mColors.size() > 0) {
int currentColor = mColors.get(Math.abs(position) % mColors.size());
int nextColor = mColors.get(Math.abs(position + 1) % mColors.size());
int color = ArgbEvaluatorHolder.eval(positionOffset, currentColor, nextColor);
mPaint.setColor(color);
}
// 计算锚点位置
PositionData current = FragmentContainerHelper.getImitativePositionData(mPositionDataList, position);
PositionData next = FragmentContainerHelper.getImitativePositionData(mPositionDataList, position + 1);
float leftX;
float nextLeftX;
float rightX;
float nextRightX;
if (mMode == MODE_MATCH_EDGE) {
leftX = current.mLeft + mXOffset;
nextLeftX = next.mLeft + mXOffset;
rightX = current.mRight - mXOffset;
nextRightX = next.mRight - mXOffset;
} else if (mMode == MODE_WRAP_CONTENT) {
leftX = current.mContentLeft + mXOffset;
nextLeftX = next.mContentLeft + mXOffset;
rightX = current.mContentRight - mXOffset;
nextRightX = next.mContentRight - mXOffset;
} else { // MODE_EXACTLY
leftX = current.mLeft + (current.width() - mLineWidth) / 2;
nextLeftX = next.mLeft + (next.width() - mLineWidth) / 2;
rightX = current.mLeft + (current.width() + mLineWidth) / 2;
nextRightX = next.mLeft + (next.width() + mLineWidth) / 2;
}
mLineRect.left = leftX + (nextLeftX - leftX) * mStartInterpolator.getInterpolation(positionOffset);
mLineRect.right = rightX + (nextRightX - rightX) * mEndInterpolator.getInterpolation(positionOffset);
mLineRect.top = getHeight() - mLineHeight - mYOffset;
mLineRect.bottom = getHeight() - mYOffset;
invalidate();
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
@Override
public void onPositionDataProvide(List<PositionData> dataList) {
mPositionDataList = dataList;
}
public float getYOffset() {
return mYOffset;
}
public void setYOffset(float yOffset) {
mYOffset = yOffset;
}
public float getXOffset() {
return mXOffset;
}
public void setXOffset(float xOffset) {
mXOffset = xOffset;
}
public float getLineHeight() {
return mLineHeight;
}
public void setLineHeight(float lineHeight) {
mLineHeight = lineHeight;
}
public float getLineWidth() {
return mLineWidth;
}
public void setLineWidth(float lineWidth) {
mLineWidth = lineWidth;
}
public float getRoundRadius() {
return mRoundRadius;
}
public void setRoundRadius(float roundRadius) {
mRoundRadius = roundRadius;
}
public int getMode() {
return mMode;
}
public void setMode(int mode) {
if (mode == MODE_EXACTLY || mode == MODE_MATCH_EDGE || mode == MODE_WRAP_CONTENT) {
mMode = mode;
} else {
throw new IllegalArgumentException("mode " + mode + " not supported.");
}
}
public Paint getPaint() {
return mPaint;
}
/**
* 返回底部画线的RectF mLineRect。
*
* @return
*/
public RectF getLineRect() {
return mLineRect;
}
public List<Integer> getColors() {
return mColors;
}
public void setColors(Integer... colors) {
mColors = Arrays.asList(colors);
}
public Interpolator getStartInterpolator() {
return mStartInterpolator;
}
public void setStartInterpolator(Interpolator startInterpolator) {
mStartInterpolator = startInterpolator;
if (mStartInterpolator == null) {
mStartInterpolator = new LinearInterpolator();
}
}
public Interpolator getEndInterpolator() {
return mEndInterpolator;
}
public void setEndInterpolator(Interpolator endInterpolator) {
mEndInterpolator = endInterpolator;
if (mEndInterpolator == null) {
mEndInterpolator = new LinearInterpolator();
}
}
}

View File

@@ -0,0 +1,149 @@
package com.yunbao.common.views.weight;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.os.Build;
import android.text.TextUtils;
import android.util.Log;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import java.util.Arrays;
import java.util.List;
public class TestWebViewClient extends WebViewClient {
private static final String TAG = "TestWebViewClient";
private Activity mContext;
private List<String> HTTP_SCHEMES = Arrays.asList("http", "https");
public TestWebViewClient(Activity context, WebView webView) {
this.mContext = context;
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.d(TAG, "shouldOverrideUrlLoading url1=" + url);
if(url.contains("umobile-redirect")) {
openByBrowser(mContext, url);
return true;
}
if(shouldOverrideUrlLoadingInner(view, url)) {
return true;
}
return super.shouldOverrideUrlLoading(view, url);
}
public static void openByBrowser(Context context, String url) {
if (context != null && !TextUtils.isEmpty(url)) {
try {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setData(Uri.parse(url));
context.startActivity(intent);
} catch (Exception e) {
}
}
}
@Override
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
String url = request != null && request.getUrl() != null ? request.getUrl().toString() : "";
Log.d(TAG, "shouldOverrideUrlLoading url=" + (request != null ? request.getUrl().toString() : ""));
if(url.contains("umobile-redirect")) {
openByBrowser(mContext, url);
return true;
}
if(shouldOverrideUrlLoadingInner(view, url)) {
return true;
}
return super.shouldOverrideUrlLoading(view, request);
}
/**
* Parse the url and open it by system function.
* case 1: deal "intent://xxxx" url.
* case 2: deal custom scheme. url
* @param view: WebView
* @param url
* @return
*/
private boolean shouldOverrideUrlLoadingInner(WebView view, String url) {
if(!TextUtils.isEmpty(url)) {
Uri uri = Uri.parse(url);
if(uri != null) {
if ("intent".equals(uri.getScheme())) {
try {
Intent intent = Intent.parseUri(uri.toString(), Intent.URI_INTENT_SCHEME);
if(intent != null) {
PackageManager pm = mContext.getPackageManager();
ResolveInfo info = pm.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
if(info != null) {
mContext.startActivity(Intent.parseUri(uri.toString(), Intent.URI_INTENT_SCHEME));
return true;
}
else {
String fallbackUrl = intent.getStringExtra("browser_fallback_url");
if (!TextUtils.isEmpty(fallbackUrl)) {
if(fallbackUrl.startsWith("market://"))
startAppMarketWithUrl(mContext, fallbackUrl, false);
else
view.loadUrl(fallbackUrl);
return true;
}else{
mContext.startActivity(new Intent(Intent.ACTION_VIEW, uri));
}
}
}
} catch (Exception e) {
}
}
if (!HTTP_SCHEMES.contains(uri.getScheme())) {
startUrl(mContext, url, true);
return true;
}
}
}
return false;
}
public static void startUrl(Context context, String url, boolean isNewTask) {
if(context != null && !TextUtils.isEmpty(url)) {
try {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
if(isNewTask) {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
context.startActivity(intent);
} catch (Exception e) {
}
}
}
public static boolean hasActivity(Context context, Intent intent, String packageName) {
PackageManager pm = context.getPackageManager();
List<ResolveInfo> appList = pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo info : appList) {
if (info.activityInfo.packageName.equals(packageName))
return true;
}
return false;
}
public static void startAppMarketWithUrl(Activity context, String url, boolean forceUseGoogle) {
try {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
if (forceUseGoogle || hasActivity(context, intent, "com.android.vending"))
intent.setPackage("com.android.vending");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
} catch (Exception e) {
try {
startUrl(context, url, true);
} catch (Exception e1) {}
}
}
}

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
tools:context="com.yunbao.common.activity.MyWalletActivity">
<include layout="@layout/view_title"/>
<net.lucode.hackware.magicindicator.MagicIndicator
android:id="@+id/magic_indicator"
android:background="@color/color_white"
android:layout_width="match_parent"
android:layout_height="50dp"/>
<androidx.viewpager.widget.ViewPager
android:id="@+id/vp_content"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
</LinearLayout>

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".activity.RechargeActivity">
<include layout="@layout/view_title" android:visibility="gone"/>
<WebView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/rlWebview"
tools:context=".activity.RechargeActivity"/>
</LinearLayout>