diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..85e7c1d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/.idea/ diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/TransColorTextView.java b/app/src/main/java/com/jia/er/nebuluxe/app/TransColorTextView.java new file mode 100644 index 0000000..f11d5f4 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/TransColorTextView.java @@ -0,0 +1,59 @@ +package com.jia.er.nebuluxe.app; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.LinearGradient; +import android.graphics.Paint; +import android.graphics.Shader; +import android.util.AttributeSet; + +import androidx.appcompat.widget.AppCompatTextView; + +public class TransColorTextView extends AppCompatTextView { + + private int startColor; + private int endColor; + private int orientation = 1; // 0: vertical, 1: horizontal + + public TransColorTextView(Context context) { + this(context, null); + } + + public TransColorTextView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public TransColorTextView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + + TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.VerticalGradientTextView); + startColor = ta.getColor(R.styleable.VerticalGradientTextView_startColor, 0xFFFF4081); + endColor = ta.getColor(R.styleable.VerticalGradientTextView_endColor, 0xFF3F51B5); + orientation = ta.getInt(R.styleable.VerticalGradientTextView_gradientOrientation, 1); + ta.recycle(); + } + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + updateShader(w, h); + } + + Shader shader; + + private void updateShader(int w, int h) { + if (orientation == 0) { + shader = new LinearGradient(0, 0, 0, h, startColor, endColor, Shader.TileMode.CLAMP); + } else { + shader = new LinearGradient(0, 0, w, 0, startColor, endColor, Shader.TileMode.CLAMP); + } + } + + @Override + protected void onDraw(Canvas canvas) { + Paint paint = getPaint(); + paint.setShader(shader); + super.onDraw(canvas); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/basics/CommonDialog.java b/app/src/main/java/com/jia/er/nebuluxe/app/basics/CommonDialog.java new file mode 100644 index 0000000..8362b5f --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/basics/CommonDialog.java @@ -0,0 +1,363 @@ +package com.jia.er.nebuluxe.app.basics; + + +import static android.view.View.VISIBLE; + +import android.app.AlertDialog; +import android.content.Context; +import android.text.Html; +import android.text.TextUtils; +import android.util.Log; +import android.util.SparseArray; +import android.util.SparseIntArray; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +import com.jia.er.nebuluxe.app.R; + +/** + * 通用弹窗 + */ +public class CommonDialog extends AlertDialog implements View.OnClickListener { + + public static class Builder { + Context context; + int layoutId = R.layout.dialog_common; + SparseArray showStr = new SparseArray<>(); + SparseArray btnStr = new SparseArray<>(); + SparseIntArray iconRes = new SparseIntArray(); + SparseArray clickId = new SparseArray<>(); + OnDismissListener onDismissListener; + + int specialId; + Object[] specialObj; + ViewDeal mViewDeal; + + public Builder(Context context) { + this.context = context; + } + + public Builder setContentView(int layout) { + this.layoutId = layout; + return this; + } + + public Builder setObject(int layoutId, ViewDeal viewDeal, Object... bigSS) { + this.specialId = layoutId; + this.specialObj = bigSS; + this.mViewDeal = viewDeal; + return this; + } + + public Builder addString(int layoutId, CharSequence show) { + this.showStr.put(layoutId, show); + return this; + } + + public Builder title(String title) { + this.addString(R.id.dialog_title, title); + return this; + } + + public Builder content(String title) { + this.addString(R.id.dialog_content, title); + return this; + } + + public Builder centerIcon(int res) { + this.iconRes.put(R.id.dialog_iv, res); + return this; + } + + public Builder confirmBtn(String title) { + this.addString(R.id.dialog_confirm, title); + return this; + } + + public Builder cancelBtn(String title) { + this.addString(R.id.dialog_cancel, title); + return this; + } + + + public Builder addButton(int layoutId, String btnStr, + OnDialogInterface clickListener) { + this.btnStr.put(layoutId, btnStr); + this.clickId.put(layoutId, clickListener); + return this; + } + + public Builder addOnClick(OnDialogInterface clickListener, int... layoutId) { + if (layoutId != null && layoutId.length > 0) { + for (int i : layoutId) { + this.clickId.put(i, clickListener); + } + } + return this; + } + + public CommonDialog create() { + return new CommonDialog(this); + } + + public Builder addDismissListener(OnDismissListener onDismissListener) { + this.onDismissListener = onDismissListener; + return this; + } + } + + public void hideIcon() { + } + + public interface ViewDeal { + + void dealView(View viewPan, View viewById, Object[] specialObj, CommonDialog commonDialog); + } + + public interface OnDialogInterface { + + void onClick(CommonDialog commonDialog, int vId); + } + + + OnConfirmClickListener mOnConfirmClickListener; + Object clickData; + private View cancel; + private View confirm; + private View vLine; + private View vIcon; + + public CommonDialog(@NonNull Builder builder) { + super(builder.context); + initBuilder(builder); + } + + public CommonDialog(@NonNull Context activity) { + super(activity); + init(activity, null); + } + + public CommonDialog(@NonNull Context activity, String res) { + super(activity); + init(activity, res); + } + + + public CommonDialog(@NonNull Context activity, String res, int layout) { + super(activity); + init(activity, res, layout); + this.isAutoSize = true; + } + + View parent; + + public String getInput(int viewId) { + try { + return ((EditText) findViewById(viewId)).getText().toString().trim(); + } catch (Exception e) { + try { + return ((TextView) findViewById(viewId)).getText().toString().trim(); + } catch (Exception e1) { + return ""; + } + } + } + + private CommonDialog init(final Context activity, String msg) { + return init(activity, msg, R.layout.dialog_common); + } + + private CommonDialog initBuilder(final Builder builder) { + Log.e("CommonDialog", "init.48:"); + parent = LayoutInflater.from(builder.context).inflate(builder.layoutId, null); + for (int i = 0; i < builder.showStr.size(); i++) { + TextView itemView = parent.findViewById(builder.showStr.keyAt(i)); + if (itemView != null) { + itemView.setText(builder.showStr.get(builder.showStr.keyAt(i))); + } + } + for (int i = 0; i < builder.iconRes.size(); i++) { + View view = parent.findViewById(builder.iconRes.keyAt(i)); + if (view instanceof ImageView) { + ((ImageView) view).setImageResource(builder.iconRes.get(builder.iconRes.keyAt(i))); + view.setVisibility(VISIBLE); + } else if (view != null) { + view.setBackgroundResource(builder.iconRes.get(builder.iconRes.keyAt(i))); + view.setVisibility(VISIBLE); + } + } + for (int i = 0; i < builder.btnStr.size(); i++) { + try { + TextView itemView = parent.findViewById(builder.btnStr.keyAt(i)); + if (itemView != null) { + if (TextUtils.isEmpty(builder.btnStr.get(builder.btnStr.keyAt(i)))) { + itemView.setVisibility(View.GONE); + } else { + itemView.setText(builder.btnStr.get(builder.btnStr.keyAt(i))); + } + } + } catch (Exception e) { + Log.e("CommonDialog", "暂时只支持TextView内容填充"); + } + } + if (builder.mViewDeal != null && parent.findViewById(builder.specialId) != null) { + builder.mViewDeal.dealView(parent, parent.findViewById(builder.specialId), builder.specialObj, this); + } + for (int i = 0; i < builder.clickId.size(); i++) { + View itemView = parent.findViewById(builder.clickId.keyAt(i)); + if (itemView != null) { + final int finalI = i; + itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + builder.clickId.get(builder.clickId.keyAt(finalI)) + .onClick(CommonDialog.this, v.getId()); + } + }); + } + } + if (builder.onDismissListener != null) { + setOnDismissListener(builder.onDismissListener); + } + initView(parent); + return this; + } + + private CommonDialog init(final Context cet, String msg, int layout) { + parent = LayoutInflater.from(cet).inflate(layout, null); + initView(parent); + this.cancel = parent.findViewById(R.id.dialog_cancel); + this.confirm = parent.findViewById(R.id.dialog_confirm); + this.vLine = parent.findViewById(R.id.dialog_line); + this.vIcon = parent.findViewById(R.id.dialog_iv); + if (this.cancel != null) cancel.setOnClickListener(this); + if (this.confirm != null) confirm.setOnClickListener(this); + TextView title = parent.findViewById(R.id.dialog_content); + if (title != null && !TextUtils.isEmpty(msg)) { + if (msg.contains("\\n")) { + title.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL); + } + Log.e("CommonDialog", "init.203:" + msg); + String newMsg = msg.replaceAll("\\\\", "\\").replaceAll("\\n", "
"); + Log.e("CommonDialog", "init.205:" + newMsg); + // title.setText(Html.fromHtml(newMsg, null, new MxgsaTagHandler(activity))); + title.setText(Html.fromHtml(newMsg)); + } + Log.e("CommonDialog", "init.215:" + cancelAble); + return this; + } + + protected void initView(View view) { + this.cancel = view.findViewById(R.id.dialog_cancel); + this.confirm = view.findViewById(R.id.dialog_confirm); + this.vLine = view.findViewById(R.id.dialog_line); + Log.e("CommonDialog", "initView.220:" + cancelAble); + if (this.cancel != null) this.cancel.setVisibility(cancelAble ? VISIBLE : View.GONE); + if (vLine != null) this.vLine.setVisibility(!cancelAble ? VISIBLE : View.GONE); + } + + @Override + public T findViewById(int id) { + return parent.findViewById(id); + } + + public void setClickListener(OnConfirmClickListener listener) { + this.mOnConfirmClickListener = listener; + } + + @Override + public final void show() { + this.show(null); + } + + boolean isAutoSize = false; + boolean cancelAble = true; + float widthRate = 0, heightRate = 0; + + /** + * 相对于屏幕短边宽度的比例 + * + * @param widthRate + * @param heightRate + */ + public void setSizeRate(float widthRate, float heightRate) { + this.widthRate = widthRate; + this.heightRate = heightRate; + } + + public CommonDialog gravity(int g) { + this.dialogGravity = g; + return this; + } + + int dialogGravity = Gravity.CENTER; + + public void show(Object obj) { + this.clickData = obj; + try { + super.show(); + } catch (Exception e) { + e.printStackTrace(); + } + setContentView(parent); + initView(parent); + try { + Window dialogWindow = getWindow(); + dialogWindow.setGravity(dialogGravity); + dialogWindow.getDecorView().setPadding(0, 0, 0, 0); + dialogWindow.setBackgroundDrawableResource(android.R.color.transparent); + int width = dialogWindow.getContext().getResources().getDisplayMetrics().widthPixels; + int height = dialogWindow.getContext().getResources().getDisplayMetrics().heightPixels; + int vWidth = parent.getPaddingLeft(); + Log.e("CommonDialog", vWidth + ".width:" + width + " height:" + height); + // if (this.isAutoSize) { + // lp.width = width; + // lp.height = WindowManager.LayoutParams.WRAP_CONTENT; + int minSize = Math.min(width, height); + if (widthRate > 0 || heightRate > 0) { + int w = ViewGroup.LayoutParams.WRAP_CONTENT; + int h = ViewGroup.LayoutParams.WRAP_CONTENT; + if (widthRate > 0) { + w = (int) (widthRate * minSize); + } + if (heightRate > 0) { + h = (int) (heightRate * minSize); + } + dialogWindow.setLayout(w, h); + } else { + dialogWindow.setLayout(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void setCancelable(boolean flag) { + super.setCancelable(flag); + cancelAble = flag; + } + + @Override + public void onClick(View v) { + if (mOnConfirmClickListener != null) { + mOnConfirmClickListener.onClickConfirm(v.getId() == R.id.dialog_confirm, clickData); + } + if (v.getId() == R.id.dialog_confirm || this.cancelAble) { + dismiss(); + } + } + + public interface OnConfirmClickListener { + // isConfirm 取消按钮 + void onClickConfirm(boolean isConfirm, T data); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/basics/Constants.kt b/app/src/main/java/com/jia/er/nebuluxe/app/basics/Constants.kt index 1e1425b..a3e54c7 100644 --- a/app/src/main/java/com/jia/er/nebuluxe/app/basics/Constants.kt +++ b/app/src/main/java/com/jia/er/nebuluxe/app/basics/Constants.kt @@ -53,6 +53,9 @@ object Constants { const val feedback_URL_res: String = "https://campaign.nebuluxetv.com/pages/leave/index" const val feedback_list_URL_res: String = "https://campaign.nebuluxetv.com/pages/leave/list" const val feedback_detail_URL_res: String = "https://campaign.nebuluxetv.com/pages/leave/detail" + const val URL_OF_PRIVACY_POLICY: String = "https://www.nebuluxetv.com/private" + const val URL_OF_USER_POLICY: String = "https://www.nebuluxetv.com/user_policy" + const val URL_OF_VISITOR: String = "https://www.nebuluxetv.com" const val Constants_Main_Video_status = "Constants_Main_Video_status" const val Constants_Main_Video_info = "Constants_Main_Video_info" var WebRefresh: Boolean = false diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/home/FreshActivity.kt b/app/src/main/java/com/jia/er/nebuluxe/app/home/FreshActivity.kt index 85de714..cc60ef7 100644 --- a/app/src/main/java/com/jia/er/nebuluxe/app/home/FreshActivity.kt +++ b/app/src/main/java/com/jia/er/nebuluxe/app/home/FreshActivity.kt @@ -60,7 +60,7 @@ class FreshActivity : BaseActivity() { hideLoading() } else { showNetError() - toast(getString(R.string.network_error)) + toast(R.string.network_error) hideLoading() } } diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/home/GenresActivity.kt b/app/src/main/java/com/jia/er/nebuluxe/app/home/GenresActivity.kt index 98fa4bb..ff729fb 100644 --- a/app/src/main/java/com/jia/er/nebuluxe/app/home/GenresActivity.kt +++ b/app/src/main/java/com/jia/er/nebuluxe/app/home/GenresActivity.kt @@ -77,7 +77,7 @@ class GenresActivity : BaseActivity() { hideLoading() } else { showNetError() - toast(getString(R.string.network_error)) + toast(R.string.network_error) hideLoading() } } diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/home/HomeFragment.kt b/app/src/main/java/com/jia/er/nebuluxe/app/home/HomeFragment.kt index bb2b6ed..5498b1a 100644 --- a/app/src/main/java/com/jia/er/nebuluxe/app/home/HomeFragment.kt +++ b/app/src/main/java/com/jia/er/nebuluxe/app/home/HomeFragment.kt @@ -43,7 +43,8 @@ class HomeFragment : BaseFragment() { Intent( context, HotActivity::class.java - )) + ) + ) } } binding.tvTop.setOnClickListener { @@ -52,7 +53,8 @@ class HomeFragment : BaseFragment() { Intent( context, RankActivity::class.java - )) + ) + ) } } binding.tvFresh.setOnClickListener { @@ -61,7 +63,8 @@ class HomeFragment : BaseFragment() { Intent( context, FreshActivity::class.java - )) + ) + ) } } binding.tvFresh.setOnClickListener { @@ -70,7 +73,18 @@ class HomeFragment : BaseFragment() { Intent( context, GenresActivity::class.java - )) + ) + ) + } + } + binding.rlTop.setOnClickListener { + singleClick { + startActivity( + Intent( + context, + SearchActivity::class.java + ) + ) } } } @@ -240,7 +254,7 @@ class HomeFragment : BaseFragment() { EventBus.getDefault().post(Constants.CONSTANTS_main_stop) } } else { - toast(getString(R.string.network_error)) + toast(R.string.network_error) hideLoading() binding?.srHome?.finishRefresh() EventBus.getDefault().post(Constants.CONSTANTS_main_stop) diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/home/HotActivity.kt b/app/src/main/java/com/jia/er/nebuluxe/app/home/HotActivity.kt index 482371d..0fbd39b 100644 --- a/app/src/main/java/com/jia/er/nebuluxe/app/home/HotActivity.kt +++ b/app/src/main/java/com/jia/er/nebuluxe/app/home/HotActivity.kt @@ -63,7 +63,7 @@ class HotActivity : BaseActivity() { }) } } else { - toast(getString(R.string.network_error)) + toast(R.string.network_error) } binding?.srFree?.finishRefresh() hideLoading() diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/home/RankActivity.kt b/app/src/main/java/com/jia/er/nebuluxe/app/home/RankActivity.kt index 3437f24..d00fc4a 100644 --- a/app/src/main/java/com/jia/er/nebuluxe/app/home/RankActivity.kt +++ b/app/src/main/java/com/jia/er/nebuluxe/app/home/RankActivity.kt @@ -59,7 +59,7 @@ class RankActivity : BaseActivity() { hideLoading() } else { showNetError() - toast(getString(R.string.network_error)) + toast(R.string.network_error) hideLoading() } } diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/home/ReelsFragment.kt b/app/src/main/java/com/jia/er/nebuluxe/app/home/ReelsFragment.kt index 8837a21..497467a 100644 --- a/app/src/main/java/com/jia/er/nebuluxe/app/home/ReelsFragment.kt +++ b/app/src/main/java/com/jia/er/nebuluxe/app/home/ReelsFragment.kt @@ -307,7 +307,7 @@ class ReelsFragment : BaseFragment(), } hideNetError() } else { - toast(getString(R.string.network_error)) + toast(R.string.network_error) hideLoading() } binding.srFy.finishRefresh() @@ -322,7 +322,7 @@ class ReelsFragment : BaseFragment(), dataRes?.collect_total toast(getString(R.string.success)) } else { - toast(getString(R.string.network_error)) + toast(R.string.network_error) } } mViewModel.cancelCollectData.observe(this) { @@ -334,7 +334,7 @@ class ReelsFragment : BaseFragment(), dataRes?.collect_total toast(getString(R.string.success)) } else { - toast(getString(R.string.network_error)) + toast(R.string.network_error) } } } diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/home/SavedFragment.kt b/app/src/main/java/com/jia/er/nebuluxe/app/home/SavedFragment.kt index df6caf7..02db783 100644 --- a/app/src/main/java/com/jia/er/nebuluxe/app/home/SavedFragment.kt +++ b/app/src/main/java/com/jia/er/nebuluxe/app/home/SavedFragment.kt @@ -105,7 +105,7 @@ class SavedFragment : BaseFragment() { // hideNetError() // } else { // hideLoading() -// toast(getString(R.string.network_error)) +// toast(R.string.network_error) // } // binding?.srMyList?.finishRefresh() // binding?.srMyList?.finishLoadMore() @@ -117,7 +117,7 @@ class SavedFragment : BaseFragment() { // myListAdapter?.removeAt(current) // myListAdapter?.notifyDataSetChanged() // } else { -// toast(getString(R.string.network_error)) +// toast(R.string.network_error) // } // } } diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/main/MainActivity.kt b/app/src/main/java/com/jia/er/nebuluxe/app/main/MainActivity.kt index ac505b8..98b92be 100644 --- a/app/src/main/java/com/jia/er/nebuluxe/app/main/MainActivity.kt +++ b/app/src/main/java/com/jia/er/nebuluxe/app/main/MainActivity.kt @@ -199,7 +199,7 @@ class MainActivity : BaseActivity() { // loginDialog?.dismiss() // } else { // hideLoading() -// toast(getString(R.string.network_error)) +// toast(R.string.network_error) // } // } } diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/me/AboutActivity.kt b/app/src/main/java/com/jia/er/nebuluxe/app/me/AboutActivity.kt index c76f7c8..d58cb9f 100644 --- a/app/src/main/java/com/jia/er/nebuluxe/app/me/AboutActivity.kt +++ b/app/src/main/java/com/jia/er/nebuluxe/app/me/AboutActivity.kt @@ -2,8 +2,13 @@ package com.jia.er.nebuluxe.app.me import android.content.Intent import android.net.Uri +import androidx.core.net.toUri import com.jia.er.nebuluxe.app.basics.BaseActivity +import com.jia.er.nebuluxe.app.basics.Constants.URL_OF_PRIVACY_POLICY +import com.jia.er.nebuluxe.app.basics.Constants.URL_OF_USER_POLICY +import com.jia.er.nebuluxe.app.basics.Constants.URL_OF_VISITOR import com.jia.er.nebuluxe.app.databinding.ActivityAboutBinding +import com.jia.er.nebuluxe.app.utils.AppUtil.openWeb import com.jia.er.nebuluxe.app.utils.PackageUtils import com.jia.er.nebuluxe.app.utils.singleClick @@ -16,22 +21,17 @@ class AboutActivity : BaseActivity() { binding.tvVersion.text = "V".plus(PackageUtils.getPackageVersion(this)) binding.tvPrivacyPolicy.setOnClickListener { singleClick { - val webIntent = - Intent(Intent.ACTION_VIEW, Uri.parse("https://www.nebuluxetv.com/private")) - startActivity(webIntent) + openWeb(this, URL_OF_PRIVACY_POLICY) } } binding.tvUserAgreement.setOnClickListener { singleClick { - val webIntent = - Intent(Intent.ACTION_VIEW, Uri.parse("https://www.nebuluxetv.com/user_policy")) - startActivity(webIntent) + openWeb(this, URL_OF_USER_POLICY) } } binding.tvVisitWebsite.setOnClickListener { singleClick { - val webIntent = Intent(Intent.ACTION_VIEW, Uri.parse("https://www.nebuluxetv.com")) - startActivity(webIntent) + openWeb(this, URL_OF_VISITOR) } } } diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/me/MeFragment.kt b/app/src/main/java/com/jia/er/nebuluxe/app/me/MeFragment.kt index 26d1928..bc2af36 100644 --- a/app/src/main/java/com/jia/er/nebuluxe/app/me/MeFragment.kt +++ b/app/src/main/java/com/jia/er/nebuluxe/app/me/MeFragment.kt @@ -1,14 +1,7 @@ package com.jia.er.nebuluxe.app.me import android.annotation.SuppressLint -import android.content.ClipData -import android.content.ClipboardManager -import android.content.Context import android.content.Intent -import android.text.Spannable -import android.text.SpannableString -import android.text.style.UnderlineSpan -import android.view.View import androidx.lifecycle.ViewModelProvider import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy @@ -17,10 +10,16 @@ import com.bumptech.glide.request.RequestOptions import com.jia.er.nebuluxe.app.R import com.jia.er.nebuluxe.app.basics.BaseFragment import com.jia.er.nebuluxe.app.basics.Constants +import com.jia.er.nebuluxe.app.basics.Constants.URL_OF_PRIVACY_POLICY +import com.jia.er.nebuluxe.app.basics.Constants.URL_OF_USER_POLICY import com.jia.er.nebuluxe.app.databinding.FragmentMeBinding import com.jia.er.nebuluxe.app.net.MainViewModel +import com.jia.er.nebuluxe.app.utils.AppUtil.openWeb +import com.jia.er.nebuluxe.app.utils.DialogUtils +import com.jia.er.nebuluxe.app.utils.DialogUtils.DialogOnClickListener import com.jia.er.nebuluxe.app.utils.Memory import com.jia.er.nebuluxe.app.utils.singleClick +import com.jia.er.nebuluxe.app.utils.toast import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode @@ -35,6 +34,49 @@ class MeFragment : BaseFragment() { mViewModel.getInfo() mViewModel.noticeNum() } + binding.llAbout.setOnClickListener { + singleClick { + startActivity( + Intent(requireContext(), AboutActivity::class.java) + ) + } + } + binding.llPrivacy.setOnClickListener { + singleClick { + openWeb(requireContext(), URL_OF_PRIVACY_POLICY) + } + } + binding.llUser.setOnClickListener { + singleClick { + openWeb(requireContext(), URL_OF_USER_POLICY) + } + } + binding.llLanguage.setOnClickListener { + singleClick { + toast(R.string.toast_wait) + } + } + binding.llDelete.setOnClickListener { + DialogUtils.showDoubleBtnDialog( + requireContext(), + getString(R.string.dialog_title_logout), + getString(R.string.dialog_content_logout), + getString(R.string.dialog_confirm_btn_logout), + getString(R.string.dialog_cancel_btn_logout), + R.mipmap.ic_logout, + object : DialogOnClickListener { + + override fun onConfirmClick() { + TODO("Not yet implemented") + } + + override fun onCancelClick() { + TODO("Not yet implemented") + } + + } + ) + } // binding.llFeedback.setOnClickListener { // singleClick { // startActivity( @@ -144,8 +186,7 @@ class MeFragment : BaseFragment() { Glide.with(this).load(Memory.getUserInfo()?.avator).skipMemoryCache(true) .diskCacheStrategy(DiskCacheStrategy.NONE) .apply(RequestOptions.bitmapTransform(CircleCrop())) - .placeholder(R.drawable.iv_avatar) - .error(R.drawable.iv_avatar).into(it) + .placeholder(R.drawable.iv_avatar).error(R.drawable.iv_avatar).into(it) } } else { binding?.tvUserName?.text = @@ -154,8 +195,7 @@ class MeFragment : BaseFragment() { Glide.with(this).load(Memory.getUserInfo()?.avator).skipMemoryCache(true) .diskCacheStrategy(DiskCacheStrategy.NONE) .apply(RequestOptions.bitmapTransform(CircleCrop())) - .placeholder(R.drawable.iv_avatar) - .error(R.drawable.iv_avatar).into(it) + .placeholder(R.drawable.iv_avatar).error(R.drawable.iv_avatar).into(it) } } // if (Memory.isVip()) { diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/me/SettingActivity.kt b/app/src/main/java/com/jia/er/nebuluxe/app/me/SettingActivity.kt index 7fe71a5..d6f43c8 100644 --- a/app/src/main/java/com/jia/er/nebuluxe/app/me/SettingActivity.kt +++ b/app/src/main/java/com/jia/er/nebuluxe/app/me/SettingActivity.kt @@ -94,7 +94,7 @@ class SettingActivity : BaseActivity() { // Constants.WebRefresh = true // finish() // } else { -// toast(getString(R.string.network_error)) +// toast(R.string.network_error) // } // hideLoading() // } diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/net/BodyInterceptor.kt b/app/src/main/java/com/jia/er/nebuluxe/app/net/BodyInterceptor.kt index 04e43f4..967e3ff 100644 --- a/app/src/main/java/com/jia/er/nebuluxe/app/net/BodyInterceptor.kt +++ b/app/src/main/java/com/jia/er/nebuluxe/app/net/BodyInterceptor.kt @@ -1,6 +1,8 @@ package com.jia.er.nebuluxe.app.net +import com.jia.er.nebuluxe.app.BuildConfig.DEBUG import com.jia.er.nebuluxe.app.net.Decryption.EN_STR_TAG +import com.jia.er.nebuluxe.app.utils.LOG import okhttp3.Interceptor import okhttp3.Response import okhttp3.ResponseBody diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/net/Retrofit.kt b/app/src/main/java/com/jia/er/nebuluxe/app/net/Retrofit.kt index ffeedbb..dab04f2 100644 --- a/app/src/main/java/com/jia/er/nebuluxe/app/net/Retrofit.kt +++ b/app/src/main/java/com/jia/er/nebuluxe/app/net/Retrofit.kt @@ -2,6 +2,7 @@ package com.jia.er.nebuluxe.app.net import android.os.Build import android.provider.Settings +import android.util.Log import androidx.lifecycle.LiveData import androidx.lifecycle.liveData import com.jia.er.nebuluxe.app.R diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/utils/AppUtil.kt b/app/src/main/java/com/jia/er/nebuluxe/app/utils/AppUtil.kt new file mode 100644 index 0000000..a4521e9 --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/utils/AppUtil.kt @@ -0,0 +1,16 @@ +package com.jia.er.nebuluxe.app.utils + +import android.content.Context +import android.content.Intent +import android.net.Uri +import androidx.core.net.toUri + +object AppUtil { + + // public static void openWeb(Context context, String webUrl) { + // context.startActivity(new Intent(ACTION_VIEW, Uri.parse(webUrl))); + // } + fun openWeb(context: Context, webUrl: String?) { + context.startActivity(Intent(Intent.ACTION_VIEW, webUrl?.toUri())) + } +} diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/utils/DialogUtils.kt b/app/src/main/java/com/jia/er/nebuluxe/app/utils/DialogUtils.kt index db86578..c8e3300 100644 --- a/app/src/main/java/com/jia/er/nebuluxe/app/utils/DialogUtils.kt +++ b/app/src/main/java/com/jia/er/nebuluxe/app/utils/DialogUtils.kt @@ -1,9 +1,17 @@ package com.jia.er.nebuluxe.app.utils import android.content.Context +import android.graphics.Color +import android.text.Spannable +import android.text.SpannableString +import android.text.SpannedString +import android.text.style.ForegroundColorSpan +import android.util.Log +import android.widget.TextView import androidx.appcompat.widget.AppCompatImageView import androidx.appcompat.widget.AppCompatTextView import com.jia.er.nebuluxe.app.R +import com.jia.er.nebuluxe.app.basics.CommonDialog import com.jia.er.nebuluxe.app.net.MainViewModel import com.jia.er.nebuluxe.app.ui.UnFavoriteDialog import com.jia.er.nebuluxe.app.utils.singleClick @@ -13,10 +21,7 @@ object DialogUtils { fun unFavoriteDialog( - context: Context, - short_play_id: Int, - video_id: Int, - genresViewModel: MainViewModel + context: Context, short_play_id: Int, video_id: Int, genresViewModel: MainViewModel ) { val exampleUnFavoriteDialog = UnFavoriteDialog(context) val tvThinkAgain = @@ -32,4 +37,36 @@ object DialogUtils { } exampleUnFavoriteDialog.show() } + + interface DialogOnClickListener { + fun onConfirmClick() + fun onCancelClick() + } + + fun showDoubleBtnDialog( + context: Context, + title: String, + content: String, + confirmStr: String, + cancelStr: String, + iconRes: Int, + listener: DialogOnClickListener + ) { + singleClick { + val dialog = CommonDialog( + CommonDialog.Builder(context).title(title).content(content).centerIcon(iconRes) + .addString(R.id.dialog_confirm, confirmStr) + .addString(R.id.dialog_cancel, cancelStr) + .addOnClick({ commonDialog, vId -> + if (vId == R.id.dialog_confirm) { + listener.onConfirmClick(); + } else if (vId == R.id.dialog_cancel) { + listener.onCancelClick(); + } + }, R.id.dialog_confirm, R.id.dialog_cancel) + ) + dialog.setSizeRate(.8F, 0F) + dialog.show() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/utils/LOG.java b/app/src/main/java/com/jia/er/nebuluxe/app/utils/LOG.java new file mode 100644 index 0000000..ba0fe7a --- /dev/null +++ b/app/src/main/java/com/jia/er/nebuluxe/app/utils/LOG.java @@ -0,0 +1,364 @@ +package com.jia.er.nebuluxe.app.utils; + +import android.text.TextUtils; +import android.util.Log; + + +import com.google.gson.Gson; + +import java.util.HashSet; +import java.util.Set; + + +public class LOG { + + public static boolean showDebug() { + return true; +// return DEBUG || BASE.isRQ() || SHOW_LOG; + } + + public static void e(String tag, String con) { + if (showDebug()) { + Log.e(tag, con); + } + } + + public static void d(String tag, String con) { + if (showDebug()) Log.d(tag, con); + } + + public static void i(String tag, String con) { + if (showDebug()) { + Log.i(tag, con); + } + } + + public static void bean(String tag, Object obj, String... url) { + if (showDebug()) { + try { + bean(tag, new Gson().toJson(obj), url); + } catch (OutOfMemoryError error) { + if (obj != null) { + Log.e("LOG", "post: = " + obj.toString()); + } else { + Log.e("LOG", "post: = null"); + } + } catch (Exception e) { + Log.w("LOG", "post: 输出错误"); + } + } + } + + public static void bean(String tag, String log, String... url) { + if (!showDebug()) { + return; + } + String lineOut = ""; + if (url != null && url.length > 0) { + lineOut = "<" + url[0] + ">"; + } else { + lineOut = tag; + } + Log.w("BEAN." + tag, "------------------------------" + lineOut + "------------------------------"); + if (log == null) { + Log.w("BEAN." + tag, "=====>null"); + return; + } + Log.w("BEAN." + tag, "=====>" + log); + if ("pollAlarm".equals(tag)) { + return; + } + log = log.replaceAll("(\\d*),˛", "$1_"); + + String outPut = log.replaceAll(":\\{", ":,{").replaceAll(":\\[\\{", ":[,{").replaceAll("\\}", "},").replaceAll("\\]", "],").replaceAll("\\\\\"", ""); + String[] outs = outPut.split(","); + String SPACE = ""; + int lineNumLength = String.valueOf(outs.length).length(); + for (int i = 0; i < outs.length; i++) { + String showLine = frontCompWithZore(i, lineNumLength); + if (outs[i].contains("}") || outs[i].contains("]")) { + if (!TextUtils.isEmpty(SPACE)) { + SPACE = SPACE.substring(0, SPACE.lastIndexOf("\t")); + } + } + Log.w("BEAN." + tag, " --" + showLine + "->" + SPACE + outs[i].replaceAll("\"", "")); + if (outs[i].startsWith("{") && !outs[i].startsWith("{}") || outs[i].contains("[") && !outs[i].startsWith("[]")) { + SPACE = SPACE + "\t"; + } + } + Log.w("BEAN." + tag, "------------------------------" + lineOut + ".end------------------------------"); + } + + /** + * 0 指前面补充零 + * formatLength 字符总长度为 formatLength + * d 代表为正数。 + */ + static String frontCompWithZore(int sourceDate, int formatLength) { + String newString = String.format("%0" + formatLength + "d", sourceDate); + return newString; + } + + public static int useLine() {//该方法 所在方法的 调用所在行数 + StackTraceElement[] stacks = new Exception().getStackTrace(); + return stacks[2].getLineNumber(); + } + + public static int thisLine() {//该方法调用所在行数 + StackTraceElement[] stacks = new Exception().getStackTrace(); + return stacks[1].getLineNumber(); + } + + public static String getUserWhere(Object... object) { + StackTraceElement[] stacks = new Exception().getStackTrace(); + StringBuilder sb = new StringBuilder(); + if (stacks != null) { + try { + String classname5 = stacks[4].getFileName(); //获取调用者的类名 + String method_name5 = stacks[4].getMethodName(); //获取调用者的方法名 + int line5 = stacks[4].getLineNumber(); //获取调用者的方法名 + sb.append(classname5 + "[" + method_name5 + "]." + line5); + + String classname4 = stacks[3].getFileName(); //获取调用者的类名 + String method_name4 = stacks[3].getMethodName(); //获取调用者的方法名 + int line4 = stacks[3].getLineNumber(); //获取调用者的方法名 + sb.append("-->" + classname4 + "[" + method_name4 + "]." + line4); + + String classname = stacks[2].getFileName(); //获取调用者的类名 + String method_name = stacks[2].getMethodName(); //获取调用者的方法名 + int line = stacks[2].getLineNumber(); //获取调用者的方法名 + sb.append("-->" + classname + "[" + method_name + "]." + line); + + String classname1 = stacks[1].getFileName(); //获取调用者的类名 + String method_name1 = stacks[1].getMethodName(); //获取调用者的方法名 + int line1 = stacks[1].getLineNumber(); //获取调用者的方法名 + sb.append("-->" + classname1 + "[" + method_name1 + "]." + line1); + + String classname3 = stacks[0].getFileName(); //获取调用者的类名 + String method_name3 = stacks[0].getMethodName(); //获取调用者的方法名 + int line3 = stacks[0].getLineNumber(); //获取调用者的方法名 + sb.append("-->" + classname3 + "[" + method_name3 + "]." + line3); + String tag = classname; + if (null != object) { + if (object[0] instanceof String) { + tag = (String) object[0]; + } else { + tag = object[0].getClass().getSimpleName(); + } + } + sb.append(tag, 0, tag.length()); + } catch (Exception e) { + } + } + return sb.toString(); + } + + /** + * @param index 位置 1-调用 getWhere 的位置 2调用getWhere 所在行对应方法的方法 + * @return + */ + public static String getWhere(int index) { + StackTraceElement[] stacks = new Exception().getStackTrace(); + StringBuilder sb = new StringBuilder(); + try { + //获取调用者的类名 + String classname = stacks[index].getFileName(); + //获取调用者的方法名 + String methodName5 = stacks[index].getMethodName(); + //获取调用者的方法名 + int line5 = stacks[index].getLineNumber(); +// sb.append(classname5 + "[" + methodName5 + "]." + line5); + + sb.append("at "); + sb.append("("); + sb.append(classname); + sb.append(":"); + sb.append(line5); + sb.append(")"); + sb.append(methodName5); + } catch (Exception e) { + + } + return sb.toString(); + } + + public static String getWhere(String pageName) { + StackTraceElement[] stacks = new Exception().getStackTrace(); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < stacks.length; i++) { + int index = i; + try { + //获取调用者的类名 + String classname = stacks[index].getClassName(); + if (!classname.contains(pageName)) continue; + //获取调用者的方法名 + String methodName5 = stacks[index].getMethodName(); + //获取调用者的方法名 + int line5 = stacks[index].getLineNumber(); +// sb.append(classname5 + "[" + methodName5 + "]." + line5); + + sb.append("at "); + sb.append("("); + sb.append(classname); + sb.append(":"); + sb.append(line5); + sb.append(")"); + sb.append(methodName5); + } catch (Exception e) { + + } + } + + return sb.toString(); + } + + public static void showUserWhere(Object... object) { + String show = ""; + StackTraceElement[] stacks = new Exception().getStackTrace(); + if (stacks != null) { + try { + if (object != null && object.length > 1) { + if (object[1] instanceof Integer) { + StringBuilder showPan = new StringBuilder(); + for (int i = (int) object[1]; i >= 0; i--) { + showPan.append("==> "); + showPan.append(stacks[i].getFileName()); + showPan.append("["); + showPan.append(stacks[i].getMethodName()); + showPan.append("]."); + showPan.append(stacks[i].getLineNumber()); + } + showPan.replace(0, 4, ""); + String tag = (String) object[0]; + Log.e(tag, showPan.toString()); + return; + } + } + String classname4 = stacks[3].getFileName(); //获取调用者的类名 + String method_name4 = stacks[3].getMethodName(); //获取调用者的方法名 + int line4 = stacks[3].getLineNumber(); //获取调用者的方法名 + show = classname4 + "[" + method_name4 + "]." + line4; + + String classname = stacks[2].getFileName(); //获取调用者的类名 + String method_name = stacks[2].getMethodName(); //获取调用者的方法名 + int line = stacks[2].getLineNumber(); //获取调用者的方法名 + show += "==> " + classname + "[" + method_name + "]." + line; + + String classname1 = stacks[1].getFileName(); //获取调用者的类名 + String method_name1 = stacks[1].getMethodName(); //获取调用者的方法名 + int line1 = stacks[1].getLineNumber(); //获取调用者的方法名 + show += "==> " + classname1 + "[" + method_name1 + "]." + line1; + + String classname3 = stacks[0].getFileName(); //获取调用者的类名 + String method_name3 = stacks[0].getMethodName(); //获取调用者的方法名 + int line3 = stacks[0].getLineNumber(); //获取调用者的方法名 + show += "==> " + classname3 + "[" + method_name3 + "]." + line3; + String tag = classname; + if (object != null) { + if (object[0] instanceof String) { + tag = (String) object[0]; + } else { + tag = object[0].getClass().getSimpleName(); + } + Log.e(tag, show); + } + } catch (Exception e) { + } + } + } + + /** + * @param object 0-tag 1-跳过的包名 + */ + public static void showLongWhere(Object... object) { + StackTraceElement[] stacks = new Exception().getStackTrace(); + if (stacks != null) { + try { + String tag = stacks[0].getFileName(); + Set keys = new HashSet(); + if (object != null && object.length > 0) { + if (object[0] instanceof String) { + tag = (String) object[0]; + } else { + tag = object[0].getClass().getSimpleName(); + } + if (object.length > 1) { + for (int i = 1; i < object.length; i++) { + keys.add((String) object[i]); + } + } + } + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < stacks.length; i++) { + StackTraceElement s = stacks[stacks.length - 1 - i]; + if ("com.rq.base.util.LOG".equals(s.getClassName())) { + continue; + } + if (s.getClassName().startsWith("android.")) { + continue; + } + String[] arrs = s.getClassName().split("\\."); + String pkn = arrs[0] + "." + arrs[1] + "." + arrs[2]; + if (keys.contains(pkn)) { + continue; + } + String classname = s.getFileName(); + String method_name = s.getMethodName(); + int line = s.getLineNumber(); + if (i != 0) { + sb.append("\t\n\t"); + } + sb.append("at ").append(s.getClassName()).append(".").append(method_name); + sb.append("("); + sb.append(classname); + sb.append(":"); + sb.append(line); + sb.append(")"); + sb.append(method_name); + } + Log.d(tag, sb.toString()); + } catch (Exception e) { + } + } + } + + + /** + * 需要引起程序员注意并且调试时调用这方法 + * 一般是和后台联调错误需要通过沟通解决 + */ + public static void utilLog(String tag) { + // if (!showDebug()) return; + // String packageName = "com.hz.huarun"; + String con = ""; + StackTraceElement[] stacks = new Exception().getStackTrace(); + StringBuffer stringBuffer = new StringBuffer(); + // String simpleName = classname.substring(classname.lastIndexOf(".") + 1); + if (stacks != null) { + stringBuffer.append("\t【异常起源】>>\t"); + int start = Math.min(stacks.length - 1, 10); + int recoderIndex = start; + + for (int i = start; i >= 0; i--) { + String classname = stacks[i].getClassName(); //获取调用者的类名 + String method_name = stacks[i].getMethodName(); //获取调用者的方法名 + int line = stacks[i].getLineNumber(); //获取调用者的方法名 + // if (recoderIndex == -1 && classname.contains(packageName)) {//项目代码开始 + // recoderIndex = i; + // } + if (i <= recoderIndex) { + if (LOG.class.getName().equals(classname)) { + continue; + } + if (i != recoderIndex) { + stringBuffer.append(tag + "|\t\t\t\t\t"); + } + stringBuffer.append(i + "[" + classname + "." + method_name + " LINE " + line + "] \n"); + } + + } + } + con = stringBuffer.toString(); + System.err.print(tag + "| " + con); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/utils/Toast.kt b/app/src/main/java/com/jia/er/nebuluxe/app/utils/Toast.kt index 217561c..301f57d 100644 --- a/app/src/main/java/com/jia/er/nebuluxe/app/utils/Toast.kt +++ b/app/src/main/java/com/jia/er/nebuluxe/app/utils/Toast.kt @@ -15,8 +15,10 @@ import android.text.style.ForegroundColorSpan import android.text.style.StyleSpan import android.widget.TextView import android.widget.Toast +import androidx.annotation.IntegerRes import androidx.appcompat.widget.AppCompatTextView import com.google.android.gms.ads.identifier.AdvertisingIdClient +import com.jia.er.nebuluxe.app.R import com.jia.er.nebuluxe.app.basics.Constants import com.jia.er.nebuluxe.app.basics.Constants.ONE_DAY_IN_MILLIS import com.jia.er.nebuluxe.app.basics.MyApplication @@ -26,10 +28,27 @@ import java.util.Date import kotlin.math.tan private val handler = Handler(Looper.getMainLooper()) + +fun toast(intStr: Int) { + handler.post { + Toast.makeText( + MyApplication.context, + MyApplication.context.resources.getString(intStr), + Toast.LENGTH_SHORT + ).show() + } + if (intStr == R.string.network_error) { + LOG.showLongWhere("toast") + } +} + fun toast(text: String) { handler.post { Toast.makeText(MyApplication.context, text, Toast.LENGTH_SHORT).show() } + if ("The service is abnormal." == text) { + LOG.showLongWhere("toast") + } } @@ -126,6 +145,7 @@ fun AppCompatTextView.applyTextSkew(angle: Float) { fun dpToPx(dp: Int, context: Context): Int { return (dp * context.resources.displayMetrics.density).toInt() } + fun dpToPxByFloat(dp: Int, context: Context): Float { return (dp * context.resources.displayMetrics.density) } diff --git a/app/src/main/java/com/jia/er/nebuluxe/app/video/PlayerDetailActivity.kt b/app/src/main/java/com/jia/er/nebuluxe/app/video/PlayerDetailActivity.kt index 69b461c..9840d0c 100644 --- a/app/src/main/java/com/jia/er/nebuluxe/app/video/PlayerDetailActivity.kt +++ b/app/src/main/java/com/jia/er/nebuluxe/app/video/PlayerDetailActivity.kt @@ -190,7 +190,7 @@ class PlayerDetailActivity : BaseActivity(), override fun onPlayerError(error: PlaybackException) { super.onPlayerError(error) ivIconPlayer?.visibility = View.VISIBLE - toast(getString(R.string.network_error)) + toast(R.string.network_error) } }) collection?.setOnClickListener { @@ -453,7 +453,7 @@ class PlayerDetailActivity : BaseActivity(), // } // } else { // hideLoading() -// toast(getString(R.string.network_error)) +// toast(R.string.network_error) // } // } mViewModel.videoDetailsData.observe(this) { it -> @@ -498,7 +498,7 @@ class PlayerDetailActivity : BaseActivity(), hideLoading() } else { showNoDrama() - toast(getString(R.string.network_error)) + toast(R.string.network_error) hideLoading() } } @@ -512,7 +512,7 @@ class PlayerDetailActivity : BaseActivity(), EventBus.getDefault().post(Constants.CONSTANTS_collect_refresh) toast(getString(R.string.success)) } else { - toast(getString(R.string.network_error)) + toast(R.string.network_error) } } mViewModel.cancelCollectData.observe(this) { @@ -525,7 +525,7 @@ class PlayerDetailActivity : BaseActivity(), toast(getString(R.string.success)) EventBus.getDefault().post(Constants.CONSTANTS_collect_refresh) } else { - toast(getString(R.string.network_error)) + toast(R.string.network_error) } } } diff --git a/app/src/main/res/drawable/bg_content.xml b/app/src/main/res/drawable/bg_content.xml index 39a3fcc..54334e4 100644 --- a/app/src/main/res/drawable/bg_content.xml +++ b/app/src/main/res/drawable/bg_content.xml @@ -1,10 +1,10 @@ - + - + - + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_example_num_h.xml b/app/src/main/res/drawable/bg_example_num_h.xml index 73b9e4a..5f4b6e9 100644 --- a/app/src/main/res/drawable/bg_example_num_h.xml +++ b/app/src/main/res/drawable/bg_example_num_h.xml @@ -1,9 +1,9 @@ - + - + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_example_num_n.xml b/app/src/main/res/drawable/bg_example_num_n.xml index 5f323e4..0bf824e 100644 --- a/app/src/main/res/drawable/bg_example_num_n.xml +++ b/app/src/main/res/drawable/bg_example_num_n.xml @@ -1,9 +1,9 @@ - + - + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_genres.xml b/app/src/main/res/drawable/bg_genres.xml index 81f13ad..eee6481 100644 --- a/app/src/main/res/drawable/bg_genres.xml +++ b/app/src/main/res/drawable/bg_genres.xml @@ -1,9 +1,9 @@ - + - + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_home_tab.xml b/app/src/main/res/drawable/bg_home_tab.xml index 01af242..53af88b 100644 --- a/app/src/main/res/drawable/bg_home_tab.xml +++ b/app/src/main/res/drawable/bg_home_tab.xml @@ -2,8 +2,8 @@ - - + + diff --git a/app/src/main/res/drawable/bg_home_top.xml b/app/src/main/res/drawable/bg_home_top.xml index 3a712cf..ecd46c1 100644 --- a/app/src/main/res/drawable/bg_home_top.xml +++ b/app/src/main/res/drawable/bg_home_top.xml @@ -3,7 +3,7 @@ - + diff --git a/app/src/main/res/drawable/ic_bg_stroke_gray.xml b/app/src/main/res/drawable/ic_bg_stroke_gray.xml new file mode 100644 index 0000000..68ee986 --- /dev/null +++ b/app/src/main/res/drawable/ic_bg_stroke_gray.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml index ca3826a..fec30d0 100644 --- a/app/src/main/res/drawable/ic_launcher_background.xml +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -1,7 +1,7 @@ diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml index 2b068d1..1b6f1e4 100644 --- a/app/src/main/res/drawable/ic_launcher_foreground.xml +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -1,7 +1,7 @@ diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml index 93dec38..8f5d373 100644 --- a/app/src/main/res/layout/activity_about.xml +++ b/app/src/main/res/layout/activity_about.xml @@ -4,14 +4,14 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/iv_home_bg" - android:paddingTop="55dp"> + android:paddingTop="@dimen/padding_55px"> @@ -20,10 +20,10 @@ android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="5dp" + android:layout_marginTop="@dimen/padding_5px" android:text="About" android:textColor="#FFDAA4" - android:textSize="18dp" + android:textSize="@dimen/text_size_18px" android:textStyle="bold" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" @@ -31,9 +31,9 @@ @@ -67,10 +67,10 @@ + android:paddingTop="@dimen/padding_55px"> @@ -13,7 +13,7 @@ android:id="@+id/example_iv_back" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginLeft="16dp" + android:layout_marginLeft="@dimen/padding_16px" android:src="@drawable/iv_example_back" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -22,10 +22,10 @@ android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="5dp" + android:layout_marginTop="@dimen/padding_5px" android:text="Fresh Drops" android:textColor="#FFffff" - android:textSize="18dp" + android:textSize="@dimen/text_size_18px" android:textStyle="bold" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" @@ -35,7 +35,7 @@ @@ -65,7 +65,7 @@ app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" tools:itemCount="4" - android:layout_marginTop="25dp" + android:layout_marginTop="@dimen/padding_25px" tools:listitem="@layout/item_genres" /> diff --git a/app/src/main/res/layout/activity_genres.xml b/app/src/main/res/layout/activity_genres.xml index 3a7d5b3..08ac8c5 100644 --- a/app/src/main/res/layout/activity_genres.xml +++ b/app/src/main/res/layout/activity_genres.xml @@ -5,7 +5,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/iv_home_bg" - android:paddingTop="55dp"> + android:paddingTop="@dimen/padding_55px"> @@ -13,7 +13,7 @@ android:id="@+id/example_iv_back" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginLeft="16dp" + android:layout_marginLeft="@dimen/padding_16px" android:src="@drawable/iv_example_back" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -22,10 +22,10 @@ android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="5dp" + android:layout_marginTop="@dimen/padding_5px" android:text="Explore Genres" android:textColor="#FFffff" - android:textSize="18dp" + android:textSize="@dimen/text_size_18px" android:textStyle="bold" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" @@ -35,7 +35,7 @@ diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 5332af4..b503325 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -12,21 +12,23 @@ + app:tl_iconGravity="TOP" + app:tl_iconHeight="@dimen/padding_35px" + app:tl_iconMargin="@dimen/padding_n_30px" + app:tl_iconWidth="@dimen/padding_35px" + app:tl_indicator_height="@dimen/padding_0px" /> - - - - - - - - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_play_detail.xml b/app/src/main/res/layout/activity_play_detail.xml index 9c02f69..917344f 100644 --- a/app/src/main/res/layout/activity_play_detail.xml +++ b/app/src/main/res/layout/activity_play_detail.xml @@ -20,16 +20,16 @@ - - + + - + - - + + - + diff --git a/app/src/main/res/layout/activity_rankings.xml b/app/src/main/res/layout/activity_rankings.xml index 2df9f06..2546af0 100644 --- a/app/src/main/res/layout/activity_rankings.xml +++ b/app/src/main/res/layout/activity_rankings.xml @@ -19,8 +19,8 @@ android:id="@+id/example_iv_back" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginLeft="16dp" - android:layout_marginTop="55dp" + android:layout_marginLeft="@dimen/padding_16px" + android:layout_marginTop="@dimen/padding_55px" android:src="@drawable/iv_example_back" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -29,7 +29,7 @@ diff --git a/app/src/main/res/layout/activity_search.xml b/app/src/main/res/layout/activity_search.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/activity_search.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml index cb75f0e..a860780 100644 --- a/app/src/main/res/layout/activity_setting.xml +++ b/app/src/main/res/layout/activity_setting.xml @@ -5,14 +5,14 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/iv_home_bg" - android:paddingTop="55dp"> + android:paddingTop="@dimen/padding_55px"> @@ -21,10 +21,10 @@ android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="5dp" + android:layout_marginTop="@dimen/padding_5px" android:text="Settings" android:textColor="#FFDAA4" - android:textSize="18sp" + android:textSize="@dimen/text_size_18px" android:textStyle="bold" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" @@ -34,9 +34,9 @@ android:id="@+id/me_bg" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginLeft="16dp" - android:layout_marginTop="15dp" - android:layout_marginRight="16dp" + android:layout_marginLeft="@dimen/padding_16px" + android:layout_marginTop="@dimen/padding_15px" + android:layout_marginRight="@dimen/padding_16px" android:background="@drawable/bg_content" android:orientation="vertical" app:layout_constraintLeft_toLeftOf="parent" @@ -45,29 +45,29 @@ - + - + - - + + - + @@ -76,15 +76,15 @@ - - - - + + + + - + diff --git a/app/src/main/res/layout/close_episode_recommend.xml b/app/src/main/res/layout/close_episode_recommend.xml index ef1188b..21e4915 100644 --- a/app/src/main/res/layout/close_episode_recommend.xml +++ b/app/src/main/res/layout/close_episode_recommend.xml @@ -11,7 +11,7 @@ android:id="@+id/tv_recommend" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="123dp" + android:layout_marginTop="@dimen/padding_123px" android:gravity="center" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" @@ -20,8 +20,8 @@ @@ -29,12 +29,12 @@ @@ -42,15 +42,15 @@ @@ -79,7 +79,7 @@ diff --git a/app/src/main/res/layout/custom_banner_view.xml b/app/src/main/res/layout/custom_banner_view.xml index 64309c6..fa64163 100644 --- a/app/src/main/res/layout/custom_banner_view.xml +++ b/app/src/main/res/layout/custom_banner_view.xml @@ -9,9 +9,9 @@ + android:textSize="@dimen/text_size_12px" /> + android:textSize="@dimen/text_size_10px" /> diff --git a/app/src/main/res/layout/custom_banner_view_bottom.xml b/app/src/main/res/layout/custom_banner_view_bottom.xml index e793de5..1b03468 100644 --- a/app/src/main/res/layout/custom_banner_view_bottom.xml +++ b/app/src/main/res/layout/custom_banner_view_bottom.xml @@ -8,10 +8,10 @@ + android:layout_width="@dimen/padding_136px" + android:layout_height="@dimen/padding_180px" + android:layout_marginLeft="@dimen/padding_10px" + android:layout_marginTop="@dimen/padding_10px"> @@ -47,16 +47,16 @@ + android:textSize="@dimen/text_size_10px" /> + android:textSize="@dimen/text_size_10px" /> diff --git a/app/src/main/res/layout/detail_player_view_controller.xml b/app/src/main/res/layout/detail_player_view_controller.xml index 4eba406..d17c6a6 100644 --- a/app/src/main/res/layout/detail_player_view_controller.xml +++ b/app/src/main/res/layout/detail_player_view_controller.xml @@ -16,23 +16,23 @@ android:id="@+id/iv_back_controller" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginLeft="15dp" - android:padding="10dp" - android:layout_marginTop="45dp" + android:layout_marginLeft="@dimen/padding_15px" + android:padding="@dimen/padding_10px" + android:layout_marginTop="@dimen/padding_45px" android:src="@drawable/iv_example_back" /> @@ -41,21 +41,21 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_above="@id/example_ll_bottom_controller" - android:layout_marginBottom="10dp" + android:layout_marginBottom="@dimen/padding_10px" android:gravity="center_horizontal" android:textColor="@color/white" - android:textSize="20sp" + android:textSize="@dimen/text_size_20px" android:visibility="invisible" tools:text="00:00/02:24" /> @@ -63,23 +63,23 @@ android:id="@+id/example_seekBar_player_controller" android:layout_width="match_parent" android:layout_height="match_parent" - android:maxHeight="2dp" - android:paddingStart="0dp" - android:paddingEnd="0dp" + android:maxHeight="@dimen/padding_2px" + android:paddingStart="@dimen/padding_0px" + android:paddingEnd="@dimen/padding_0px" android:progressDrawable="@drawable/bg_example_seekbar_player" android:splitTrack="false" android:thumb="@drawable/bg_example_shape_seekbar_player" - android:thumbOffset="8dp" /> + android:thumbOffset="@dimen/padding_8px" /> + android:layout_marginLeft="@dimen/padding_19px" + android:layout_marginRight="@dimen/padding_19px" + android:layout_marginBottom="@dimen/padding_18px" /> @@ -123,24 +123,24 @@ diff --git a/app/src/main/res/layout/dialog_common.xml b/app/src/main/res/layout/dialog_common.xml new file mode 100644 index 0000000..03592fb --- /dev/null +++ b/app/src/main/res/layout/dialog_common.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_loading.xml b/app/src/main/res/layout/dialog_loading.xml index 861b1d9..c928831 100644 --- a/app/src/main/res/layout/dialog_loading.xml +++ b/app/src/main/res/layout/dialog_loading.xml @@ -10,12 +10,12 @@ android:layout_height="wrap_content" android:layout_gravity="center" android:orientation="vertical" - android:padding="18dp"> + android:padding="@dimen/padding_18px"> @@ -24,9 +24,9 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" - android:layout_marginTop="16dp" + android:layout_marginTop="@dimen/padding_16px" android:textColor="#E593CA" - android:textSize="16dp"/> + android:textSize="@dimen/text_size_16px"/> \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_series.xml b/app/src/main/res/layout/dialog_series.xml index 0a1098c..b22dedf 100644 --- a/app/src/main/res/layout/dialog_series.xml +++ b/app/src/main/res/layout/dialog_series.xml @@ -9,9 +9,9 @@ @@ -21,10 +21,10 @@ android:id="@+id/tv_content_dialog_series" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginLeft="17dp" + android:layout_marginLeft="@dimen/padding_17px" android:text="Rising Star" android:textColor="#FFDAA4" - android:textSize="14dp" + android:textSize="@dimen/text_size_14px" android:textStyle="bold" /> + android:textSize="@dimen/text_size_12px" /> + android:textSize="@dimen/text_size_10px" /> @@ -86,9 +86,9 @@ + android:layout_marginTop="@dimen/padding_20px" + android:layout_marginRight="@dimen/padding_15px" /> \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_un_collection.xml b/app/src/main/res/layout/dialog_un_collection.xml index 4cf86b6..a6f4ba6 100644 --- a/app/src/main/res/layout/dialog_un_collection.xml +++ b/app/src/main/res/layout/dialog_un_collection.xml @@ -17,7 +17,7 @@ android:id="@+id/example_iv_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="16dp" + android:layout_marginTop="@dimen/padding_16px" android:scaleType="fitXY" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" @@ -30,7 +30,7 @@ android:gravity="center" android:text="Enable Notifications" android:textColor="#FFDAA4" - android:textSize="18dp" + android:textSize="@dimen/text_size_18px" android:textStyle="bold" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" @@ -40,22 +40,22 @@ android:id="@+id/iv_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="24dp" + android:layout_marginTop="@dimen/padding_24px" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@id/example_tv_title" /> @@ -64,11 +64,11 @@ android:id="@+id/example_tv_think_again" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="18dp" + android:layout_marginTop="@dimen/padding_18px" android:gravity="center" android:text="Confirm" android:textColor="#FFDAA4" - android:textSize="12dp" + android:textSize="@dimen/text_size_12px" android:textStyle="bold" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" @@ -79,9 +79,9 @@ diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 9ccd33b..fa4deeb 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -22,11 +22,11 @@ android:id="@+id/tv_hello" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginLeft="25dp" - android:layout_marginTop="52dp" + android:layout_marginLeft="@dimen/padding_25px" + android:layout_marginTop="@dimen/padding_52px" android:text="Hello Visitor!" android:textColor="#FFFFFF" - android:textSize="20dp" + android:textSize="@dimen/text_size_20px" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -36,7 +36,7 @@ android:layout_height="wrap_content" android:text="Endless Binge, Short Dramas." android:textColor="#70FFFFFF" - android:textSize="12dp" + android:textSize="@dimen/text_size_12px" app:layout_constraintLeft_toLeftOf="@id/tv_hello" app:layout_constraintTop_toBottomOf="@id/tv_hello" /> @@ -50,9 +50,9 @@ @@ -61,7 +61,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" - android:layout_marginLeft="16dp" + android:layout_marginLeft="@dimen/padding_16px" android:src="@drawable/iv_example_search" /> + android:textSize="@dimen/text_size_14px" /> @@ -93,17 +93,17 @@ @@ -111,52 +111,52 @@ android:id="@+id/ll" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginTop="12dp" + android:layout_marginTop="@dimen/padding_12px" app:layout_constraintTop_toBottomOf="@id/tv_filters"> + android:textSize="@dimen/text_size_10px" /> + android:textSize="@dimen/text_size_10px" /> + android:textSize="@dimen/text_size_10px" /> + android:textSize="@dimen/text_size_10px" /> @@ -164,8 +164,8 @@ android:id="@+id/cl_fs" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginHorizontal="25dp" - android:layout_marginTop="12dp" + android:layout_marginHorizontal="@dimen/padding_25px" + android:layout_marginTop="@dimen/padding_12px" android:orientation="vertical" android:visibility="gone" app:layout_constraintTop_toBottomOf="@id/ll" @@ -176,22 +176,22 @@ android:layout_height="wrap_content" android:text="Featured Series" android:textColor="#FFFFFF" - android:textSize="16dp" + android:textSize="@dimen/text_size_16px" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" /> + android:layout_marginTop="@dimen/padding_16px" + app:cardCornerRadius="@dimen/padding_20px" + app:cardElevation="@dimen/padding_0px"> + android:textSize="@dimen/text_size_12px" /> + android:textSize="@dimen/text_size_10px" /> @@ -232,8 +232,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|right" - android:layout_marginRight="14dp" - android:layout_marginBottom="16dp" + android:layout_marginRight="@dimen/padding_14px" + android:layout_marginBottom="@dimen/padding_16px" android:src="@drawable/iv_item_play" /> @@ -246,7 +246,7 @@ android:id="@+id/cl_banner" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginTop="12dp" + android:layout_marginTop="@dimen/padding_12px" android:visibility="gone" app:layout_constraintTop_toBottomOf="@id/cl_fs" tools:visibility="visible"> @@ -255,10 +255,10 @@ android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginLeft="25dp" + android:layout_marginLeft="@dimen/padding_25px" android:text="Editor’s Picks" android:textColor="#FFFFFF" - android:textSize="16dp" + android:textSize="@dimen/text_size_16px" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -266,7 +266,7 @@ android:id="@+id/banner_home" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginTop="12dp" + android:layout_marginTop="@dimen/padding_12px" app:banner_auto_loop="false" app:layout_constraintTop_toBottomOf="@id/tv" /> @@ -277,7 +277,7 @@ android:id="@+id/cl_banner_b" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginTop="12dp" + android:layout_marginTop="@dimen/padding_12px" android:visibility="gone" app:layout_constraintTop_toBottomOf="@id/cl_fs" tools:visibility="visible"> @@ -286,10 +286,10 @@ android:id="@+id/tv_vip" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginLeft="25dp" + android:layout_marginLeft="@dimen/padding_25px" android:text="VIP Exclusives" android:textColor="#FFFFFF" - android:textSize="16dp" + android:textSize="@dimen/text_size_16px" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -297,7 +297,7 @@ android:id="@+id/banner_home_b" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginTop="16dp" + android:layout_marginTop="@dimen/padding_16px" app:banner_auto_loop="false" app:layout_constraintTop_toBottomOf="@id/tv_vip" /> @@ -306,7 +306,7 @@ android:id="@+id/indicator_home" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="12dp" + android:layout_marginTop="@dimen/padding_12px" app:normal_drawable="@drawable/iv_indicator_n" app:selected_drawable="@drawable/iv_indicator_h" app:layout_constraintLeft_toLeftOf="@id/banner_home_b" diff --git a/app/src/main/res/layout/fragment_hot.xml b/app/src/main/res/layout/fragment_hot.xml index 044a5b8..ce60d94 100644 --- a/app/src/main/res/layout/fragment_hot.xml +++ b/app/src/main/res/layout/fragment_hot.xml @@ -5,13 +5,13 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/iv_home_bg" - android:paddingTop="55dp"> + android:paddingTop="@dimen/padding_55px"> @@ -21,7 +21,7 @@ android:id="@+id/sr_free" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_marginTop="25dp" + android:layout_marginTop="@dimen/padding_25px" android:forceHasOverlappingRendering="false" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toBottomOf="@id/example_iv_back" @@ -40,10 +40,10 @@ @@ -33,8 +33,8 @@ - - + + @@ -43,9 +43,9 @@ @@ -107,9 +107,9 @@ @@ -118,11 +118,11 @@ android:id="@+id/tv_coin_left" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginLeft="28dp" - android:layout_marginTop="15dp" + android:layout_marginLeft="@dimen/padding_28px" + android:layout_marginTop="@dimen/padding_15px" android:text="Coins" android:textColor="#50FFFFFF" - android:textSize="14dp" + android:textSize="@dimen/padding_14px" android:textStyle="bold" android:visibility="gone" app:layout_constraintLeft_toLeftOf="parent" @@ -132,18 +132,18 @@ android:id="@+id/tv_coin_left_num" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="4dp" - android:drawablePadding="6dp" + android:layout_marginTop="@dimen/padding_4px" + android:drawablePadding="@dimen/padding_6px" android:text="99999" android:textColor="#FFDAA4" - android:textSize="18dp" + android:textSize="@dimen/padding_18px" android:visibility="gone" app:layout_constraintLeft_toLeftOf="@id/tv_coin_left" app:layout_constraintTop_toBottomOf="@id/tv_coin_left" /> @@ -181,7 +181,7 @@ android:id="@+id/wallet" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginRight="28dp" + android:layout_marginRight="@dimen/padding_28px" app:layout_constraintBottom_toBottomOf="@id/tv_coin_left_num" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="@id/tv_coin_left" /> @@ -191,9 +191,9 @@ android:id="@+id/cl_vip" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginLeft="12dp" + android:layout_marginLeft="@dimen/padding_12px" + android:layout_marginRight="@dimen/padding_12px" android:visibility="gone" - android:layout_marginRight="12dp" app:layout_constraintTop_toBottomOf="@id/tv_id"> @@ -216,7 +216,7 @@ android:id="@+id/iv_txt_vip" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginLeft="4dp" + android:layout_marginLeft="@dimen/padding_4px" app:layout_constraintBottom_toBottomOf="@id/iv_vip" app:layout_constraintLeft_toRightOf="@id/iv_vip" app:layout_constraintTop_toTopOf="@id/iv_vip" /> @@ -225,7 +225,7 @@ android:id="@+id/iv_super" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginLeft="8dp" + android:layout_marginLeft="@dimen/padding_8px" app:layout_constraintBottom_toBottomOf="@id/iv_txt_vip" app:layout_constraintLeft_toRightOf="@id/iv_txt_vip" app:layout_constraintTop_toTopOf="@id/iv_txt_vip" /> @@ -234,8 +234,8 @@ android:id="@+id/iv_vip_lock" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="11dp" - android:layout_marginRight="35dp" + android:layout_marginTop="@dimen/padding_11px" + android:layout_marginRight="@dimen/padding_35px" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -243,7 +243,7 @@ android:id="@+id/iv_right" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginLeft="8dp" + android:layout_marginLeft="@dimen/padding_8px" app:layout_constraintBottom_toBottomOf="@id/iv_vip_lock" app:layout_constraintLeft_toRightOf="@id/iv_vip_lock" app:layout_constraintTop_toTopOf="@id/iv_vip_lock" /> @@ -252,10 +252,10 @@ android:id="@+id/tv_vip_type" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginLeft="5dp" + android:layout_marginLeft="@dimen/padding_5px" android:text="Quarterly VIP" android:textColor="#FFFFFF" - android:textSize="14dp" + android:textSize="@dimen/padding_14px" android:textStyle="bold" android:visibility="gone" app:layout_constraintBottom_toBottomOf="@id/iv_vip" @@ -266,10 +266,10 @@ android:id="@+id/tv_vip_des" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="2dp" + android:layout_marginTop="@dimen/padding_2px" android:text="Unlimited access to all series" android:textColor="#714B29" - android:textSize="12dp" + android:textSize="@dimen/padding_12px" android:visibility="gone" app:layout_constraintLeft_toLeftOf="@id/iv_vip" app:layout_constraintTop_toBottomOf="@id/tv_vip_type" /> @@ -278,13 +278,13 @@ @@ -295,12 +295,12 @@ android:id="@+id/ll_top" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginLeft="16dp" - android:layout_marginTop="18dp" - android:layout_marginRight="16dp" + android:layout_marginLeft="@dimen/padding_16px" + android:layout_marginTop="@dimen/padding_18px" + android:layout_marginRight="@dimen/padding_16px" android:orientation="horizontal" - android:paddingLeft="11dp" - android:paddingRight="11dp" + android:paddingLeft="@dimen/padding_11px" + android:paddingRight="@dimen/padding_11px" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toBottomOf="@id/cl_vip"> @@ -309,17 +309,17 @@ style="@style/MineBtnPan"> + android:textSize="@dimen/text_size_12px" /> @@ -329,17 +329,17 @@ style="@style/MineBtnPan"> + android:textSize="@dimen/text_size_12px" /> @@ -348,17 +348,17 @@ style="@style/MineBtnPan"> + android:textSize="@dimen/text_size_12px" /> @@ -368,12 +368,12 @@ @@ -382,17 +382,17 @@ style="@style/MineBtnPan"> + android:textSize="@dimen/text_size_12px" /> @@ -402,17 +402,17 @@ style="@style/MineBtnPan"> + android:textSize="@dimen/text_size_12px" /> @@ -422,17 +422,17 @@ style="@style/MineBtnPan"> + android:textSize="@dimen/text_size_12px" /> diff --git a/app/src/main/res/layout/item_dominant_ceo.xml b/app/src/main/res/layout/item_dominant_ceo.xml index f25ab8a..e48f0be 100644 --- a/app/src/main/res/layout/item_dominant_ceo.xml +++ b/app/src/main/res/layout/item_dominant_ceo.xml @@ -4,24 +4,24 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginStart="12dp" - android:layout_marginTop="6dp"> + android:layout_marginStart="@dimen/padding_12px" + android:layout_marginTop="@dimen/padding_6px"> + app:strokeWidth="@dimen/padding_1px" /> @@ -14,16 +14,16 @@ android:id="@+id/rl" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginTop="65dp" + android:layout_marginTop="@dimen/padding_65px" app:layout_constraintTop_toTopOf="parent"> + android:layout_height="@dimen/padding_440px" + app:cardCornerRadius="@dimen/padding_30px" + app:cardElevation="@dimen/padding_0px"> diff --git a/app/src/main/res/layout/item_genres.xml b/app/src/main/res/layout/item_genres.xml index a229c69..9f6d94c 100644 --- a/app/src/main/res/layout/item_genres.xml +++ b/app/src/main/res/layout/item_genres.xml @@ -4,8 +4,8 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginLeft="16dp" - android:layout_marginRight="16dp"> + android:layout_marginLeft="@dimen/padding_16px" + android:layout_marginRight="@dimen/padding_16px"> + android:textSize="@dimen/text_size_15px" /> + android:textSize="@dimen/text_size_12px" /> @@ -53,8 +53,8 @@ + android:layout_marginTop="@dimen/padding_10px" + android:layout_marginLeft="@dimen/padding_3px"> diff --git a/app/src/main/res/layout/item_hot.xml b/app/src/main/res/layout/item_hot.xml index a6430b3..42902f2 100644 --- a/app/src/main/res/layout/item_hot.xml +++ b/app/src/main/res/layout/item_hot.xml @@ -4,8 +4,8 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginStart="12dp" - android:layout_marginTop="12dp"> + android:layout_marginStart="@dimen/padding_12px" + android:layout_marginTop="@dimen/padding_12px"> @@ -30,8 +30,8 @@ android:layout_height="wrap_content" android:layout_alignRight="@id/iv_hot" android:layout_alignBottom="@id/iv_hot" - android:layout_marginRight="14dp" - android:layout_marginBottom="16dp" + android:layout_marginRight="@dimen/padding_14px" + android:layout_marginBottom="@dimen/padding_16px" android:src="@drawable/iv_item_play" /> diff --git a/app/src/main/res/layout/item_num_data.xml b/app/src/main/res/layout/item_num_data.xml index 3f748bf..9566135 100644 --- a/app/src/main/res/layout/item_num_data.xml +++ b/app/src/main/res/layout/item_num_data.xml @@ -3,15 +3,15 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginLeft="11dp" - android:layout_marginTop="11dp"> + android:layout_marginLeft="@dimen/padding_11px" + android:layout_marginTop="@dimen/padding_11px"> diff --git a/app/src/main/res/layout/item_ranks.xml b/app/src/main/res/layout/item_ranks.xml index ff535e8..de4148c 100644 --- a/app/src/main/res/layout/item_ranks.xml +++ b/app/src/main/res/layout/item_ranks.xml @@ -4,15 +4,15 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginLeft="16dp" - android:layout_marginTop="12dp" - android:layout_marginRight="16dp"> + android:layout_marginLeft="@dimen/padding_16px" + android:layout_marginTop="@dimen/padding_12px" + android:layout_marginRight="@dimen/padding_16px"> + app:cardCornerRadius="@dimen/padding_10px" + app:cardElevation="@dimen/padding_0px"> @@ -73,12 +73,12 @@ android:layout_height="wrap_content" android:layout_below="@id/tv_rank_name" android:layout_alignStart="@id/tv_rank_name" - android:layout_marginTop="3dp" + android:layout_marginTop="@dimen/padding_3px" android:ellipsize="end" android:gravity="center" - android:lineSpacingExtra="1dp" + android:lineSpacingExtra="@dimen/padding_1px" android:textColor="#FFE8C4" - android:textSize="10dp" + android:textSize="@dimen/text_size_10px" tools:text="Satisfying,Marriage" /> @@ -88,11 +88,11 @@ android:layout_height="wrap_content" android:layout_below="@id/tv_num" android:layout_alignStart="@id/tv_num" - android:layout_marginTop="10dp" + android:layout_marginTop="@dimen/padding_10px" android:drawableStart="@drawable/iv_item_rank_heat" - android:drawablePadding="3dp" + android:drawablePadding="@dimen/padding_3px" android:textColor="#FFffff" - android:textSize="10dp" + android:textSize="@dimen/text_size_10px" tools:text="15.6K" /> @@ -102,16 +102,16 @@ android:layout_height="wrap_content" android:layout_below="@id/tv_rank_watch" android:layout_alignStart="@id/tv_num" - android:layout_marginTop="15dp" - android:layout_marginRight="13dp" + android:layout_marginTop="@dimen/padding_15px" + android:layout_marginRight="@dimen/padding_13px" android:layout_toLeftOf="@id/example_cardView" android:background="@drawable/iv_des_bg" android:ellipsize="end" android:maxLines="2" - android:paddingHorizontal="21dp" - android:paddingTop="10dp" + android:paddingHorizontal="@dimen/padding_21px" + android:paddingTop="@dimen/padding_10px" android:textColor="#C7C7C7" - android:textSize="12dp" + android:textSize="@dimen/text_size_12px" tools:text="The scumbag treated her as a stunt double and neglected her for five years. Unexpectedly, his wife was the white moonlight he had been searching." /> diff --git a/app/src/main/res/layout/layout_emptyview.xml b/app/src/main/res/layout/layout_emptyview.xml index 3488b4c..0f96fa0 100644 --- a/app/src/main/res/layout/layout_emptyview.xml +++ b/app/src/main/res/layout/layout_emptyview.xml @@ -11,7 +11,7 @@ android:id="@+id/iv_no_data" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="130dp" + android:layout_marginTop="@dimen/padding_130px" android:src="@drawable/iv_no_data" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" @@ -21,11 +21,11 @@ android:id="@+id/tv_top" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_margin="10dp" + android:layout_margin="@dimen/padding_10px" android:gravity="center" - android:padding="10dp" + android:padding="@dimen/padding_10px" android:text="No connection" - android:textSize="18sp" + android:textSize="@dimen/text_size_18px" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@id/iv_no_data" @@ -40,7 +40,7 @@ android:gravity="center" android:text="No Data" android:textColor="#FFDAA4" - android:textSize="14dp" + android:textSize="@dimen/text_size_14px" android:textStyle="bold" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" diff --git a/app/src/main/res/layout/layout_network_error.xml b/app/src/main/res/layout/layout_network_error.xml index 8746d09..4fa8300 100644 --- a/app/src/main/res/layout/layout_network_error.xml +++ b/app/src/main/res/layout/layout_network_error.xml @@ -10,7 +10,7 @@ android:id="@+id/example_iv_empty" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="130dp" + android:layout_marginTop="@dimen/padding_130px" android:src="@drawable/iv_no_data" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" @@ -20,11 +20,11 @@ android:id="@+id/tv_top" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_margin="10dp" + android:layout_margin="@dimen/padding_10px" android:gravity="center" - android:padding="10dp" + android:padding="@dimen/padding_10px" android:text="No connection" - android:textSize="18sp" + android:textSize="@dimen/text_size_18px" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@id/example_iv_empty" @@ -36,10 +36,10 @@ android:id="@+id/example_tv_no_network" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="18dp" + android:layout_marginTop="@dimen/padding_18px" android:text="@string/example_no_network" android:textColor="#FFDAA4" - android:textSize="16dp" + android:textSize="@dimen/text_size_16px" android:textStyle="bold" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" @@ -49,17 +49,17 @@ android:id="@+id/tv_example_retry" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:paddingLeft="14dp" + android:paddingLeft="@dimen/padding_14px" android:gravity="center" - android:paddingTop="5dp" - android:paddingRight="14dp" - android:paddingBottom="5dp" - android:layout_marginTop="15dp" + android:paddingTop="@dimen/padding_5px" + android:paddingRight="@dimen/padding_14px" + android:paddingBottom="@dimen/padding_5px" + android:layout_marginTop="@dimen/padding_15px" android:textStyle="bold" - android:layout_marginRight="14dp" + android:layout_marginRight="@dimen/padding_14px" android:text="Retry" android:textColor="#FFDAA4" - android:textSize="14dp" + android:textSize="@dimen/text_size_14px" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@id/example_tv_no_network" /> diff --git a/app/src/main/res/layout/layout_no_drama.xml b/app/src/main/res/layout/layout_no_drama.xml index a3a83d8..0671f96 100644 --- a/app/src/main/res/layout/layout_no_drama.xml +++ b/app/src/main/res/layout/layout_no_drama.xml @@ -10,7 +10,7 @@ android:id="@+id/example_iv_empty" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="130dp" + android:layout_marginTop="@dimen/padding_130px" android:src="@drawable/iv_no_data" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" @@ -20,11 +20,11 @@ android:id="@+id/tv_top" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_margin="10dp" + android:layout_margin="@dimen/padding_10px" android:gravity="center" - android:padding="10dp" + android:padding="@dimen/padding_10px" android:text="No connection" - android:textSize="18sp" + android:textSize="@dimen/text_size_18px" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@id/example_iv_empty" @@ -36,10 +36,10 @@ android:id="@+id/example_tv_no_network" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="18dp" + android:layout_marginTop="@dimen/padding_18px" android:text="Sorry, the system couldn't find this short." android:textColor="#FFDAA4" - android:textSize="16dp" + android:textSize="@dimen/text_size_16px" android:textStyle="bold" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" @@ -49,16 +49,16 @@ android:id="@+id/tv_example_retry" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="15dp" - android:layout_marginRight="14dp" + android:layout_marginTop="@dimen/padding_15px" + android:layout_marginRight="@dimen/padding_14px" android:gravity="center" - android:paddingLeft="14dp" - android:paddingTop="5dp" - android:paddingRight="14dp" - android:paddingBottom="5dp" + android:paddingLeft="@dimen/padding_14px" + android:paddingTop="@dimen/padding_5px" + android:paddingRight="@dimen/padding_14px" + android:paddingBottom="@dimen/padding_5px" android:text="Return" android:textColor="#FFDAA4" - android:textSize="14dp" + android:textSize="@dimen/text_size_14px" android:textStyle="bold" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" diff --git a/app/src/main/res/layout/line_layout.xml b/app/src/main/res/layout/line_layout.xml index cb4306f..8206552 100644 --- a/app/src/main/res/layout/line_layout.xml +++ b/app/src/main/res/layout/line_layout.xml @@ -7,6 +7,6 @@ \ No newline at end of file diff --git a/app/src/main/res/layout/new_detail_player_banner_view.xml b/app/src/main/res/layout/new_detail_player_banner_view.xml index 1ec11fa..dddfd7f 100644 --- a/app/src/main/res/layout/new_detail_player_banner_view.xml +++ b/app/src/main/res/layout/new_detail_player_banner_view.xml @@ -7,10 +7,10 @@ + app:strokeWidth="@dimen/padding_1px"> @@ -31,21 +31,21 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_above="@id/example_ll_bottom_controller" - android:layout_marginBottom="10dp" + android:layout_marginBottom="@dimen/padding_10px" android:gravity="center_horizontal" android:textColor="@color/white" - android:textSize="20sp" + android:textSize="@dimen/text_size_20px" android:visibility="invisible" tools:text="00:00/02:24" /> @@ -53,23 +53,23 @@ android:id="@+id/example_seekBar_player_controller" android:layout_width="match_parent" android:layout_height="match_parent" - android:maxHeight="2dp" - android:paddingStart="0dp" - android:paddingEnd="0dp" + android:maxHeight="@dimen/padding_2px" + android:paddingStart="@dimen/padding_0px" + android:paddingEnd="@dimen/padding_0px" android:progressDrawable="@drawable/bg_example_seekbar_player" android:splitTrack="false" android:thumb="@drawable/bg_example_shape_seekbar_player" - android:thumbOffset="8dp" /> + android:thumbOffset="@dimen/padding_8px" /> + android:layout_marginLeft="@dimen/padding_19px" + android:layout_marginRight="@dimen/padding_19px" + android:layout_marginBottom="@dimen/padding_28px" /> @@ -104,7 +104,7 @@ android:gravity="center" android:text="111" android:textColor="#FFDAA4" - android:textSize="12dp" + android:textSize="@dimen/text_size_12px" android:textStyle="bold" /> @@ -112,23 +112,23 @@ + android:layout_marginLeft="@dimen/padding_16px" + android:layout_marginRight="@dimen/padding_16px" + android:layout_marginBottom="@dimen/padding_6px"> diff --git a/app/src/main/res/mipmap-mdpi/ic_btn_dialog_confirm.png b/app/src/main/res/mipmap-mdpi/ic_btn_dialog_confirm.png new file mode 100644 index 0000000..ba5414e Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_btn_dialog_confirm.png differ diff --git a/app/src/main/res/mipmap-xhdpi/n9_dialog_bg.9.png b/app/src/main/res/mipmap-xhdpi/n9_dialog_bg.9.png new file mode 100644 index 0000000..e007916 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/n9_dialog_bg.9.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_dialog_bg.png b/app/src/main/res/mipmap-xxhdpi/ic_dialog_bg.png new file mode 100644 index 0000000..3d6e488 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_dialog_bg.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_logout.png b/app/src/main/res/mipmap-xxhdpi/ic_logout.png new file mode 100644 index 0000000..46a6ba9 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_logout.png differ diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml new file mode 100644 index 0000000..42d97b8 --- /dev/null +++ b/app/src/main/res/values/attrs.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 920cef7..aed0142 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -13,5 +13,8 @@ #F0C2E1 #D4D4D4 + #0F0F0F + #0F0F0F #111111 + #1D1D1D \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml new file mode 100644 index 0000000..057fbc2 --- /dev/null +++ b/app/src/main/res/values/dimens.xml @@ -0,0 +1,2659 @@ + + + + + 0dp + 1dp + 2dp + 3dp + 4dp + 5dp + 6dp + 7dp + 8dp + 9dp + 10dp + 11dp + 12dp + 13dp + 14dp + 15dp + 16dp + 17dp + 18dp + 19dp + 20dp + 21dp + 22dp + 23dp + 24dp + 25dp + 26dp + 27dp + 28dp + 29dp + -30dp + 30dp + 31dp + 32dp + 33dp + 34dp + 35dp + 36dp + 37dp + 38dp + 39dp + 40dp + 41dp + 42dp + 43dp + 44dp + 45dp + 46dp + 47dp + 48dp + 49dp + 50dp + 51dp + 52dp + 53dp + 54dp + 55dp + 56dp + 57dp + 58dp + 59dp + 60dp + 61dp + 62dp + 63dp + 64dp + 65dp + 66dp + 67dp + 68dp + 69dp + 70dp + 71dp + 72dp + 73dp + 74dp + 75dp + 76dp + 77dp + 78dp + 79dp + 80dp + 81dp + 82dp + 83dp + 84dp + 85dp + 86dp + 87dp + 88dp + 89dp + 90dp + 91dp + 92dp + 93dp + 94dp + 95dp + 96dp + 97dp + 98dp + 99dp + 100dp + 101dp + 102dp + 103dp + 104dp + 105dp + 106dp + 107dp + 108dp + 109dp + 110dp + 111dp + 112dp + 113dp + 114dp + 115dp + 116dp + 117dp + 118dp + 119dp + 120dp + 121dp + 122dp + 123dp + 124dp + 125dp + 126dp + 127dp + 128dp + 129dp + 130dp + 131dp + 132dp + 133dp + 134dp + 135dp + 136dp + 137dp + 138dp + 139dp + 140dp + 141dp + 142dp + 143dp + 144dp + 145dp + 146dp + 147dp + 148dp + 149dp + 150dp + 151dp + 152dp + 153dp + 154dp + 155dp + 156dp + 157dp + 158dp + 159dp + 160dp + 161dp + 162dp + 163dp + 164dp + 165dp + 166dp + 167dp + 168dp + 169dp + 170dp + 171dp + 172dp + 173dp + 174dp + 175dp + 176dp + 177dp + 178dp + 179dp + 180dp + 181dp + 182dp + 183dp + 184dp + 185dp + 186dp + 187dp + 188dp + 189dp + 190dp + 191dp + 192dp + 193dp + 194dp + 195dp + 196dp + 197dp + 198dp + 199dp + 200dp + 201dp + 202dp + 203dp + 204dp + 205dp + 206dp + 207dp + 208dp + 209dp + 210dp + 211dp + 212dp + 213dp + 214dp + 215dp + 216dp + 217dp + 218dp + 219dp + 220dp + 221dp + 222dp + 223dp + 224dp + 225dp + 226dp + 227dp + 228dp + 229dp + 230dp + 231dp + 232dp + 233dp + 234dp + 235dp + 236dp + 237dp + 238dp + 239dp + 240dp + 241dp + 242dp + 243dp + 244dp + 245dp + 246dp + 247dp + 248dp + 249dp + 250dp + 251dp + 252dp + 253dp + 254dp + 255dp + 256dp + 257dp + 258dp + 259dp + 260dp + 261dp + 262dp + 263dp + 264dp + 265dp + 266dp + 267dp + 268dp + 269dp + 270dp + 271dp + 272dp + 273dp + 274dp + 275dp + 276dp + 277dp + 278dp + 279dp + 280dp + 281dp + 282dp + 283dp + 284dp + 285dp + 286dp + 287dp + 288dp + 289dp + 290dp + 291dp + 292dp + 293dp + 294dp + 295dp + 296dp + 297dp + 298dp + 299dp + 300dp + 301dp + 302dp + 303dp + 304dp + 305dp + 306dp + 307dp + 308dp + 309dp + 310dp + 311dp + 312dp + 313dp + 314dp + 315dp + 316dp + 317dp + 318dp + 319dp + 320dp + 321dp + 322dp + 323dp + 324dp + 325dp + 326dp + 327dp + 328dp + 329dp + 330dp + 331dp + 332dp + 333dp + 334dp + 335dp + 336dp + 337dp + 338dp + 339dp + 340dp + 341dp + 342dp + 343dp + 344dp + 345dp + 346dp + 347dp + 348dp + 349dp + 350dp + 351dp + 352dp + 353dp + 354dp + 355dp + 356dp + 357dp + 358dp + 359dp + 360dp + 361dp + 362dp + 363dp + 364dp + 365dp + 366dp + 367dp + 368dp + 369dp + 370dp + 371dp + 372dp + 373dp + 374dp + 375dp + 376dp + 377dp + 378dp + 379dp + 380dp + 381dp + 382dp + 383dp + 384dp + 385dp + 386dp + 387dp + 388dp + 389dp + 390dp + 391dp + 392dp + 393dp + 394dp + 395dp + 396dp + 397dp + 398dp + 399dp + 400dp + 401dp + 402dp + 403dp + 404dp + 405dp + 406dp + 407dp + 408dp + 409dp + 410dp + 411dp + 412dp + 413dp + 414dp + 415dp + 416dp + 417dp + 418dp + 419dp + 420dp + 421dp + 422dp + 423dp + 424dp + 425dp + 426dp + 427dp + 428dp + 429dp + 430dp + 431dp + 432dp + 433dp + 434dp + 435dp + 436dp + 437dp + 438dp + 439dp + 440dp + 441dp + 442dp + 443dp + 444dp + 445dp + 446dp + 447dp + 448dp + 449dp + 450dp + 451dp + 452dp + 453dp + 454dp + 455dp + 456dp + 457dp + 458dp + 459dp + 460dp + 461dp + 462dp + 463dp + 464dp + 465dp + 466dp + 467dp + 468dp + 469dp + 470dp + 471dp + 472dp + 473dp + 474dp + 475dp + 476dp + 477dp + 478dp + 479dp + 480dp + 481dp + 482dp + 483dp + 484dp + 485dp + 486dp + 487dp + 488dp + 489dp + 490dp + 491dp + 492dp + 493dp + 494dp + 495dp + 496dp + 497dp + 498dp + 499dp + 500dp + 501dp + 502dp + 503dp + 504dp + 505dp + 506dp + 507dp + 508dp + 509dp + 510dp + 511dp + 512dp + 513dp + 514dp + 515dp + 516dp + 517dp + 518dp + 519dp + 520dp + 521dp + 522dp + 523dp + 524dp + 525dp + 526dp + 527dp + 528dp + 529dp + 530dp + 531dp + 532dp + 533dp + 534dp + 535dp + 536dp + 537dp + 538dp + 539dp + 540dp + 541dp + 542dp + 543dp + 544dp + 545dp + 546dp + 547dp + 548dp + 549dp + 550dp + 551dp + 552dp + 553dp + 554dp + 555dp + 556dp + 557dp + 558dp + 559dp + 560dp + 561dp + 562dp + 563dp + 564dp + 565dp + 566dp + 567dp + 568dp + 569dp + 570dp + 571dp + 572dp + 573dp + 574dp + 575dp + 576dp + 577dp + 578dp + 579dp + 580dp + 581dp + 582dp + 583dp + 584dp + 585dp + 586dp + 587dp + 588dp + 589dp + 590dp + 591dp + 592dp + 593dp + 594dp + 595dp + 596dp + 597dp + 598dp + 599dp + 600dp + 601dp + 602dp + 603dp + 604dp + 605dp + 606dp + 607dp + 608dp + 609dp + 610dp + 611dp + 612dp + 613dp + 614dp + 615dp + 616dp + 617dp + 618dp + 619dp + 620dp + 621dp + 622dp + 623dp + 624dp + 625dp + 626dp + 627dp + 628dp + 629dp + 630dp + 631dp + 632dp + 633dp + 634dp + 635dp + 636dp + 637dp + 638dp + 639dp + 640dp + 641dp + 642dp + 643dp + 644dp + 645dp + 646dp + 647dp + 648dp + 649dp + 650dp + 651dp + 652dp + 653dp + 654dp + 655dp + 656dp + 657dp + 658dp + 659dp + 660dp + 661dp + 662dp + 663dp + 664dp + 665dp + 666dp + 667dp + 668dp + 669dp + 670dp + 671dp + 672dp + 673dp + 674dp + 675dp + 676dp + 677dp + 678dp + 679dp + 680dp + 681dp + 682dp + 683dp + 684dp + 685dp + 686dp + 687dp + 688dp + 689dp + 690dp + 691dp + 692dp + 693dp + 694dp + 695dp + 696dp + 697dp + 698dp + 699dp + 700dp + 701dp + 702dp + 703dp + 704dp + 705dp + 706dp + 707dp + 708dp + 709dp + 710dp + 711dp + 712dp + 713dp + 714dp + 715dp + 716dp + 717dp + 718dp + 719dp + 720dp + 721dp + 722dp + 723dp + 724dp + 725dp + 726dp + 727dp + 728dp + 729dp + 730dp + 731dp + 732dp + 733dp + 734dp + 735dp + 736dp + 737dp + 738dp + 739dp + 740dp + 741dp + 742dp + 743dp + 744dp + 745dp + 746dp + 747dp + 748dp + 749dp + 750dp + 751dp + 752dp + 753dp + 754dp + 755dp + 756dp + 757dp + 758dp + 759dp + 760dp + 761dp + 762dp + 763dp + 764dp + 765dp + 766dp + 767dp + 768dp + 769dp + 770dp + 771dp + 772dp + 773dp + 774dp + 775dp + 776dp + 777dp + 778dp + 779dp + 780dp + 781dp + 782dp + 783dp + 784dp + 785dp + 786dp + 787dp + 788dp + 789dp + 790dp + 791dp + 792dp + 793dp + 794dp + 795dp + 796dp + 797dp + 798dp + 799dp + 800dp + 801dp + 802dp + 803dp + 804dp + 805dp + 806dp + 807dp + 808dp + 809dp + 810dp + 811dp + 812dp + 813dp + 814dp + 815dp + 816dp + 817dp + 818dp + 819dp + 820dp + 821dp + 822dp + 823dp + 824dp + 825dp + 826dp + 827dp + 828dp + 829dp + 830dp + 831dp + 832dp + 833dp + 834dp + 835dp + 836dp + 837dp + 838dp + 839dp + 840dp + 841dp + 842dp + 843dp + 844dp + 845dp + 846dp + 847dp + 848dp + 849dp + 850dp + 851dp + 852dp + 853dp + 854dp + 855dp + 856dp + 857dp + 858dp + 859dp + 860dp + 861dp + 862dp + 863dp + 864dp + 865dp + 866dp + 867dp + 868dp + 869dp + 870dp + 871dp + 872dp + 873dp + 874dp + 875dp + 876dp + 877dp + 878dp + 879dp + 880dp + 881dp + 882dp + 883dp + 884dp + 885dp + 886dp + 887dp + 888dp + 889dp + 890dp + 891dp + 892dp + 893dp + 894dp + 895dp + 896dp + 897dp + 898dp + 899dp + 900dp + 901dp + 902dp + 903dp + 904dp + 905dp + 906dp + 907dp + 908dp + 909dp + 910dp + 911dp + 912dp + 913dp + 914dp + 915dp + 916dp + 917dp + 918dp + 919dp + 920dp + 921dp + 922dp + 923dp + 924dp + 925dp + 926dp + 927dp + 928dp + 929dp + 930dp + 931dp + 932dp + 933dp + 934dp + 935dp + 936dp + 937dp + 938dp + 939dp + 940dp + 941dp + 942dp + 943dp + 944dp + 945dp + 946dp + 947dp + 948dp + 949dp + 950dp + 951dp + 952dp + 953dp + 954dp + 955dp + 956dp + 957dp + 958dp + 959dp + 960dp + 961dp + 962dp + 963dp + 964dp + 965dp + 966dp + 967dp + 968dp + 969dp + 970dp + 971dp + 972dp + 973dp + 974dp + 975dp + 976dp + 977dp + 978dp + 979dp + 980dp + 981dp + 982dp + 983dp + 984dp + 985dp + 986dp + 987dp + 988dp + 989dp + 990dp + 991dp + 992dp + 993dp + 994dp + 995dp + 996dp + 997dp + 998dp + 999dp + 1000dp + 1001dp + 1002dp + 1003dp + 1004dp + 1005dp + 1006dp + 1007dp + 1008dp + 1009dp + 1010dp + 1011dp + 1012dp + 1013dp + 1014dp + 1015dp + 1016dp + 1017dp + 1018dp + 1019dp + 1020dp + 1021dp + 1022dp + 1023dp + 1024dp + 1025dp + 1026dp + 1027dp + 1028dp + 1029dp + 1030dp + 1031dp + 1032dp + 1033dp + 1034dp + 1035dp + 1036dp + 1037dp + 1038dp + 1039dp + 1040dp + 1041dp + 1042dp + 1043dp + 1044dp + 1045dp + 1046dp + 1047dp + 1048dp + 1049dp + 1050dp + 1051dp + 1052dp + 1053dp + 1054dp + 1055dp + 1056dp + 1057dp + 1058dp + 1059dp + 1060dp + 1061dp + 1062dp + 1063dp + 1064dp + 1065dp + 1066dp + 1067dp + 1068dp + 1069dp + 1070dp + 1071dp + 1072dp + 1073dp + 1074dp + 1075dp + 1076dp + 1077dp + 1078dp + 1079dp + 1080dp + 1081dp + 1082dp + 1083dp + 1084dp + 1085dp + 1086dp + 1087dp + 1088dp + 1089dp + 1090dp + 1091dp + 1092dp + 1093dp + 1094dp + 1095dp + 1096dp + 1097dp + 1098dp + 1099dp + 1100dp + 1101dp + 1102dp + 1103dp + 1104dp + 1105dp + 1106dp + 1107dp + 1108dp + 1109dp + 1110dp + 1111dp + 1112dp + 1113dp + 1114dp + 1115dp + 1116dp + 1117dp + 1118dp + 1119dp + 1120dp + 1121dp + 1122dp + 1123dp + 1124dp + 1125dp + 1126dp + 1127dp + 1128dp + 1129dp + 1130dp + 1131dp + 1132dp + 1133dp + 1134dp + 1135dp + 1136dp + 1137dp + 1138dp + 1139dp + 1140dp + 1141dp + 1142dp + 1143dp + 1144dp + 1145dp + 1146dp + 1147dp + 1148dp + 1149dp + 1150dp + 1151dp + 1152dp + 1153dp + 1154dp + 1155dp + 1156dp + 1157dp + 1158dp + 1159dp + 1160dp + 1161dp + 1162dp + 1163dp + 1164dp + 1165dp + 1166dp + 1167dp + 1168dp + 1169dp + 1170dp + 1171dp + 1172dp + 1173dp + 1174dp + 1175dp + 1176dp + 1177dp + 1178dp + 1179dp + 1180dp + 1181dp + 1182dp + 1183dp + 1184dp + 1185dp + 1186dp + 1187dp + 1188dp + 1189dp + 1190dp + 1191dp + 1192dp + 1193dp + 1194dp + 1195dp + 1196dp + 1197dp + 1198dp + 1199dp + 1200dp + 1201dp + 1202dp + 1203dp + 1204dp + 1205dp + 1206dp + 1207dp + 1208dp + 1209dp + 1210dp + 1211dp + 1212dp + 1213dp + 1214dp + 1215dp + 1216dp + 1217dp + 1218dp + 1219dp + 1220dp + 1221dp + 1222dp + 1223dp + 1224dp + 1225dp + 1226dp + 1227dp + 1228dp + 1229dp + 1230dp + 1231dp + 1232dp + 1233dp + 1234dp + 1235dp + 1236dp + 1237dp + 1238dp + 1239dp + 1240dp + 1241dp + 1242dp + 1243dp + 1244dp + 1245dp + 1246dp + 1247dp + 1248dp + 1249dp + 1250dp + 1251dp + 1252dp + 1253dp + 1254dp + 1255dp + 1256dp + 1257dp + 1258dp + 1259dp + 1260dp + 1261dp + 1262dp + 1263dp + 1264dp + 1265dp + 1266dp + 1267dp + 1268dp + 1269dp + 1270dp + 1271dp + 1272dp + 1273dp + 1274dp + 1275dp + 1276dp + 1277dp + 1278dp + 1279dp + 1280dp + 1281dp + 1282dp + 1283dp + 1284dp + 1285dp + 1286dp + 1287dp + 1288dp + 1289dp + 1290dp + 1291dp + 1292dp + 1293dp + 1294dp + 1295dp + 1296dp + 1297dp + 1298dp + 1299dp + 1300dp + 1301dp + 1302dp + 1303dp + 1304dp + 1305dp + 1306dp + 1307dp + 1308dp + 1309dp + 1310dp + 1311dp + 1312dp + 1313dp + 1314dp + 1315dp + 1316dp + 1317dp + 1318dp + 1319dp + 1320dp + 1321dp + 1322dp + 1323dp + 1324dp + 1325dp + 1326dp + 1327dp + 1328dp + 1329dp + 1330dp + 1331dp + 1332dp + 1333dp + 1334dp + 1335dp + 1336dp + 1337dp + 1338dp + 1339dp + 1340dp + 1341dp + 1342dp + 1343dp + 1344dp + 1345dp + 1346dp + 1347dp + 1348dp + 1349dp + 1350dp + 1351dp + 1352dp + 1353dp + 1354dp + 1355dp + 1356dp + 1357dp + 1358dp + 1359dp + 1360dp + 1361dp + 1362dp + 1363dp + 1364dp + 1365dp + 1366dp + 1367dp + 1368dp + 1369dp + 1370dp + 1371dp + 1372dp + 1373dp + 1374dp + 1375dp + 1376dp + 1377dp + 1378dp + 1379dp + 1380dp + 1381dp + 1382dp + 1383dp + 1384dp + 1385dp + 1386dp + 1387dp + 1388dp + 1389dp + 1390dp + 1391dp + 1392dp + 1393dp + 1394dp + 1395dp + 1396dp + 1397dp + 1398dp + 1399dp + 1400dp + 1401dp + 1402dp + 1403dp + 1404dp + 1405dp + 1406dp + 1407dp + 1408dp + 1409dp + 1410dp + 1411dp + 1412dp + 1413dp + 1414dp + 1415dp + 1416dp + 1417dp + 1418dp + 1419dp + 1420dp + 1421dp + 1422dp + 1423dp + 1424dp + 1425dp + 1426dp + 1427dp + 1428dp + 1429dp + 1430dp + 1431dp + 1432dp + 1433dp + 1434dp + 1435dp + 1436dp + 1437dp + 1438dp + 1439dp + 1440dp + 1441dp + 1442dp + 1443dp + 1444dp + 1445dp + 1446dp + 1447dp + 1448dp + 1449dp + 1450dp + 1451dp + 1452dp + 1453dp + 1454dp + 1455dp + 1456dp + 1457dp + 1458dp + 1459dp + 1460dp + 1461dp + 1462dp + 1463dp + 1464dp + 1465dp + 1466dp + 1467dp + 1468dp + 1469dp + 1470dp + 1471dp + 1472dp + 1473dp + 1474dp + 1475dp + 1476dp + 1477dp + 1478dp + 1479dp + 1480dp + 1481dp + 1482dp + 1483dp + 1484dp + 1485dp + 1486dp + 1487dp + 1488dp + 1489dp + 1490dp + 1491dp + 1492dp + 1493dp + 1494dp + 1495dp + 1496dp + 1497dp + 1498dp + 1499dp + 1500dp + 1501dp + 1502dp + 1503dp + 1504dp + 1505dp + 1506dp + 1507dp + 1508dp + 1509dp + 1510dp + 1511dp + 1512dp + 1513dp + 1514dp + 1515dp + 1516dp + 1517dp + 1518dp + 1519dp + 1520dp + 1521dp + 1522dp + 1523dp + 1524dp + 1525dp + 1526dp + 1527dp + 1528dp + 1529dp + 1530dp + 1531dp + 1532dp + 1533dp + 1534dp + 1535dp + 1536dp + 1537dp + 1538dp + 1539dp + 1540dp + 1541dp + 1542dp + 1543dp + 1544dp + 1545dp + 1546dp + 1547dp + 1548dp + 1549dp + 1550dp + 1551dp + 1552dp + 1553dp + 1554dp + 1555dp + 1556dp + 1557dp + 1558dp + 1559dp + 1560dp + 1561dp + 1562dp + 1563dp + 1564dp + 1565dp + 1566dp + 1567dp + 1568dp + 1569dp + 1570dp + 1571dp + 1572dp + 1573dp + 1574dp + 1575dp + 1576dp + 1577dp + 1578dp + 1579dp + 1580dp + 1581dp + 1582dp + 1583dp + 1584dp + 1585dp + 1586dp + 1587dp + 1588dp + 1589dp + 1590dp + 1591dp + 1592dp + 1593dp + 1594dp + 1595dp + 1596dp + 1597dp + 1598dp + 1599dp + 1600dp + 1601dp + 1602dp + 1603dp + 1604dp + 1605dp + 1606dp + 1607dp + 1608dp + 1609dp + 1610dp + 1611dp + 1612dp + 1613dp + 1614dp + 1615dp + 1616dp + 1617dp + 1618dp + 1619dp + 1620dp + 1621dp + 1622dp + 1623dp + 1624dp + 1625dp + 1626dp + 1627dp + 1628dp + 1629dp + 1630dp + 1631dp + 1632dp + 1633dp + 1634dp + 1635dp + 1636dp + 1637dp + 1638dp + 1639dp + 1640dp + 1641dp + 1642dp + 1643dp + 1644dp + 1645dp + 1646dp + 1647dp + 1648dp + 1649dp + 1650dp + 1651dp + 1652dp + 1653dp + 1654dp + 1655dp + 1656dp + 1657dp + 1658dp + 1659dp + 1660dp + 1661dp + 1662dp + 1663dp + 1664dp + 1665dp + 1666dp + 1667dp + 1668dp + 1669dp + 1670dp + 1671dp + 1672dp + 1673dp + 1674dp + 1675dp + 1676dp + 1677dp + 1678dp + 1679dp + 1680dp + 1681dp + 1682dp + 1683dp + 1684dp + 1685dp + 1686dp + 1687dp + 1688dp + 1689dp + 1690dp + 1691dp + 1692dp + 1693dp + 1694dp + 1695dp + 1696dp + 1697dp + 1698dp + 1699dp + 1700dp + 1701dp + 1702dp + 1703dp + 1704dp + 1705dp + 1706dp + 1707dp + 1708dp + 1709dp + 1710dp + 1711dp + 1712dp + 1713dp + 1714dp + 1715dp + 1716dp + 1717dp + 1718dp + 1719dp + 1720dp + 1721dp + 1722dp + 1723dp + 1724dp + 1725dp + 1726dp + 1727dp + 1728dp + 1729dp + 1730dp + 1731dp + 1732dp + 1733dp + 1734dp + 1735dp + 1736dp + 1737dp + 1738dp + 1739dp + 1740dp + 1741dp + 1742dp + 1743dp + 1744dp + 1745dp + 1746dp + 1747dp + 1748dp + 1749dp + 1750dp + 1751dp + 1752dp + 1753dp + 1754dp + 1755dp + 1756dp + 1757dp + 1758dp + 1759dp + 1760dp + 1761dp + 1762dp + 1763dp + 1764dp + 1765dp + 1766dp + 1767dp + 1768dp + 1769dp + 1770dp + 1771dp + 1772dp + 1773dp + 1774dp + 1775dp + 1776dp + 1777dp + 1778dp + 1779dp + 1780dp + 1781dp + 1782dp + 1783dp + 1784dp + 1785dp + 1786dp + 1787dp + 1788dp + 1789dp + 1790dp + 1791dp + 1792dp + 1793dp + 1794dp + 1795dp + 1796dp + 1797dp + 1798dp + 1799dp + 1800dp + 1801dp + 1802dp + 1803dp + 1804dp + 1805dp + 1806dp + 1807dp + 1808dp + 1809dp + 1810dp + 1811dp + 1812dp + 1813dp + 1814dp + 1815dp + 1816dp + 1817dp + 1818dp + 1819dp + 1820dp + 1821dp + 1822dp + 1823dp + 1824dp + 1825dp + 1826dp + 1827dp + 1828dp + 1829dp + 1830dp + 1831dp + 1832dp + 1833dp + 1834dp + 1835dp + 1836dp + 1837dp + 1838dp + 1839dp + 1840dp + 1841dp + 1842dp + 1843dp + 1844dp + 1845dp + 1846dp + 1847dp + 1848dp + 1849dp + 1850dp + 1851dp + 1852dp + 1853dp + 1854dp + 1855dp + 1856dp + 1857dp + 1858dp + 1859dp + 1860dp + 1861dp + 1862dp + 1863dp + 1864dp + 1865dp + 1866dp + 1867dp + 1868dp + 1869dp + 1870dp + 1871dp + 1872dp + 1873dp + 1874dp + 1875dp + 1876dp + 1877dp + 1878dp + 1879dp + 1880dp + 1881dp + 1882dp + 1883dp + 1884dp + 1885dp + 1886dp + 1887dp + 1888dp + 1889dp + 1890dp + 1891dp + 1892dp + 1893dp + 1894dp + 1895dp + 1896dp + 1897dp + 1898dp + 1899dp + 1900dp + 1901dp + 1902dp + 1903dp + 1904dp + 1905dp + 1906dp + 1907dp + 1908dp + 1909dp + 1910dp + 1911dp + 1912dp + 1913dp + 1914dp + 1915dp + 1916dp + 1917dp + 1918dp + 1919dp + 1920dp + 1921dp + 1922dp + 1923dp + 1924dp + 1925dp + 1926dp + 1927dp + 1928dp + 1929dp + 1930dp + 1931dp + 1932dp + 1933dp + 1934dp + 1935dp + 1936dp + 1937dp + 1938dp + 1939dp + 1940dp + 1941dp + 1942dp + 1943dp + 1944dp + 1945dp + 1946dp + 1947dp + 1948dp + 1949dp + 1950dp + 1951dp + 1952dp + 1953dp + 1954dp + 1955dp + 1956dp + 1957dp + 1958dp + 1959dp + 1960dp + 1961dp + 1962dp + 1963dp + 1964dp + 1965dp + 1966dp + 1967dp + 1968dp + 1969dp + 1970dp + 1971dp + 1972dp + 1973dp + 1974dp + 1975dp + 1976dp + 1977dp + 1978dp + 1979dp + 1980dp + 1981dp + 1982dp + 1983dp + 1984dp + 1985dp + 1986dp + 1987dp + 1988dp + 1989dp + 1990dp + 1991dp + 1992dp + 1993dp + 1994dp + 1995dp + 1996dp + 1997dp + 1998dp + 1999dp + 2000dp + 2001dp + 2002dp + 2003dp + 2004dp + 2005dp + 2006dp + 2007dp + 2008dp + 2009dp + 2010dp + 2011dp + 2012dp + 2013dp + 2014dp + 2015dp + 2016dp + 2017dp + 2018dp + 2019dp + 2020dp + 2021dp + 2022dp + 2023dp + 2024dp + 2025dp + 2026dp + 2027dp + 2028dp + 2029dp + 2030dp + 2031dp + 2032dp + 2033dp + 2034dp + 2035dp + 2036dp + 2037dp + 2038dp + 2039dp + 2040dp + 2041dp + 2042dp + 2043dp + 2044dp + 2045dp + 2046dp + 2047dp + 2048dp + 2049dp + 2050dp + 2051dp + 2052dp + 2053dp + 2054dp + 2055dp + 2056dp + 2057dp + 2058dp + 2059dp + 2060dp + 2061dp + 2062dp + 2063dp + 2064dp + 2065dp + 2066dp + 2067dp + 2068dp + 2069dp + 2070dp + 2071dp + 2072dp + 2073dp + 2074dp + 2075dp + 2076dp + 2077dp + 2078dp + 2079dp + 2080dp + 2081dp + 2082dp + 2083dp + 2084dp + 2085dp + 2086dp + 2087dp + 2088dp + 2089dp + 2090dp + 2091dp + 2092dp + 2093dp + 2094dp + 2095dp + 2096dp + 2097dp + 2098dp + 2099dp + 2100dp + 2101dp + 2102dp + 2103dp + 2104dp + 2105dp + 2106dp + 2107dp + 2108dp + 2109dp + 2110dp + 2111dp + 2112dp + 2113dp + 2114dp + 2115dp + 2116dp + 2117dp + 2118dp + 2119dp + 2120dp + 2121dp + 2122dp + 2123dp + 2124dp + 2125dp + 2126dp + 2127dp + 2128dp + 2129dp + 2130dp + 2131dp + 2132dp + 2133dp + 2134dp + 2135dp + 2136dp + 2137dp + 2138dp + 2139dp + 2140dp + 2141dp + 2142dp + 2143dp + 2144dp + 2145dp + 2146dp + 2147dp + 2148dp + 2149dp + 2150dp + 2151dp + 2152dp + 2153dp + 2154dp + 2155dp + 2156dp + 2157dp + 2158dp + 2159dp + 2160dp + 2161dp + 2162dp + 2163dp + 2164dp + 2165dp + 2166dp + 2167dp + 2168dp + 2169dp + 2170dp + 2171dp + 2172dp + 2173dp + 2174dp + 2175dp + 2176dp + 2177dp + 2178dp + 2179dp + 2180dp + 2181dp + 2182dp + 2183dp + 2184dp + 2185dp + 2186dp + 2187dp + 2188dp + 2189dp + 2190dp + 2191dp + 2192dp + 2193dp + 2194dp + 2195dp + 2196dp + 2197dp + 2198dp + 2199dp + 2200dp + 2201dp + 2202dp + 2203dp + 2204dp + 2205dp + 2206dp + 2207dp + 2208dp + 2209dp + 2210dp + 2211dp + 2212dp + 2213dp + 2214dp + 2215dp + 2216dp + 2217dp + 2218dp + 2219dp + 2220dp + 2221dp + 2222dp + 2223dp + 2224dp + 2225dp + 2226dp + 2227dp + 2228dp + 2229dp + 2230dp + 2231dp + 2232dp + 2233dp + 2234dp + 2235dp + 2236dp + 2237dp + 2238dp + 2239dp + 2240dp + 2241dp + 2242dp + 2243dp + 2244dp + 2245dp + 2246dp + 2247dp + 2248dp + 2249dp + 2250dp + 2251dp + 2252dp + 2253dp + 2254dp + 2255dp + 2256dp + 2257dp + 2258dp + 2259dp + 2260dp + 2261dp + 2262dp + 2263dp + 2264dp + 2265dp + 2266dp + 2267dp + 2268dp + 2269dp + 2270dp + 2271dp + 2272dp + 2273dp + 2274dp + 2275dp + 2276dp + 2277dp + 2278dp + 2279dp + 2280dp + 2281dp + 2282dp + 2283dp + 2284dp + 2285dp + 2286dp + 2287dp + 2288dp + 2289dp + 2290dp + 2291dp + 2292dp + 2293dp + 2294dp + 2295dp + 2296dp + 2297dp + 2298dp + 2299dp + 2300dp + 2301dp + 2302dp + 2303dp + 2304dp + 2305dp + 2306dp + 2307dp + 2308dp + 2309dp + 2310dp + 2311dp + 2312dp + 2313dp + 2314dp + 2315dp + 2316dp + 2317dp + 2318dp + 2319dp + 2320dp + 2321dp + 2322dp + 2323dp + 2324dp + 2325dp + 2326dp + 2327dp + 2328dp + 2329dp + 2330dp + 2331dp + 2332dp + 2333dp + 2334dp + 2335dp + 2336dp + 2337dp + 2338dp + 2339dp + 2340dp + 2341dp + 2342dp + 2343dp + 2344dp + 2345dp + 2346dp + 2347dp + 2348dp + 2349dp + 2350dp + 2351dp + 2352dp + 2353dp + 2354dp + 2355dp + 2356dp + 2357dp + 2358dp + 2359dp + 2360dp + 2361dp + 2362dp + 2363dp + 2364dp + 2365dp + 2366dp + 2367dp + 2368dp + 2369dp + 2370dp + 2371dp + 2372dp + 2373dp + 2374dp + 2375dp + 2376dp + 2377dp + 2378dp + 2379dp + 2380dp + 2381dp + 2382dp + 2383dp + 2384dp + 2385dp + 2386dp + 2387dp + 2388dp + 2389dp + 2390dp + 2391dp + 2392dp + 2393dp + 2394dp + 2395dp + 2396dp + 2397dp + 2398dp + 2399dp + 2400dp + 2401dp + 2402dp + 2403dp + 2404dp + 2405dp + 2406dp + 2407dp + 2408dp + 2409dp + 2410dp + 2411dp + 2412dp + 2413dp + 2414dp + 2415dp + 2416dp + 2417dp + 2418dp + 2419dp + 2420dp + 2421dp + 2422dp + 2423dp + 2424dp + 2425dp + 2426dp + 2427dp + 2428dp + 2429dp + 2430dp + 2431dp + 2432dp + 2433dp + 2434dp + 2435dp + 2436dp + 2437dp + 2438dp + 2439dp + 2440dp + 2441dp + 2442dp + 2443dp + 2444dp + 2445dp + 2446dp + 2447dp + 2448dp + 2449dp + 2450dp + 2451dp + 2452dp + 2453dp + 2454dp + 2455dp + 2456dp + 2457dp + 2458dp + 2459dp + 2460dp + 2461dp + 2462dp + 2463dp + 2464dp + 2465dp + 2466dp + 2467dp + 2468dp + 2469dp + 2470dp + 2471dp + 2472dp + 2473dp + 2474dp + 2475dp + 2476dp + 2477dp + 2478dp + 2479dp + 2480dp + 2481dp + 2482dp + 2483dp + 2484dp + 2485dp + 2486dp + 2487dp + 2488dp + 2489dp + 2490dp + 2491dp + 2492dp + 2493dp + 2494dp + 2495dp + 2496dp + 2497dp + 2498dp + 2499dp + 2500dp + 2501dp + 2502dp + 2503dp + 2504dp + 2505dp + 2506dp + 2507dp + 2508dp + 2509dp + 2510dp + 2511dp + 2512dp + 2513dp + 2514dp + 2515dp + 2516dp + 2517dp + 2518dp + 2519dp + 2520dp + 2521dp + 2522dp + 2523dp + 2524dp + 2525dp + 2526dp + 2527dp + 2528dp + 2529dp + 2530dp + 2531dp + 2532dp + 2533dp + 2534dp + 2535dp + 2536dp + 2537dp + 2538dp + 2539dp + 2540dp + 2541dp + 2542dp + 2543dp + 2544dp + 2545dp + 2546dp + 2547dp + 2548dp + 2549dp + 2550dp + 2551dp + 2552dp + 2553dp + 2554dp + 2555dp + 2556dp + 2557dp + 2558dp + 2559dp + 2560dp + 2561dp + 2562dp + 2563dp + 2564dp + 2565dp + 2566dp + 2567dp + 2568dp + 2569dp + 2570dp + 2571dp + 2572dp + 2573dp + 2574dp + 2575dp + 2576dp + 2577dp + 2578dp + 2579dp + 2580dp + 2581dp + 2582dp + 2583dp + 2584dp + 2585dp + 2586dp + 2587dp + 2588dp + 2589dp + 2590dp + 2591dp + 2592dp + 2593dp + 2594dp + 2595dp + 2596dp + 2597dp + 2598dp + 2599dp + 2600dp + + 10sp + 11sp + 12sp + 13sp + 14sp + 15sp + 16sp + 17sp + 18sp + 19sp + 20sp + 21sp + 22sp + 23sp + 24sp + 25sp + 26sp + 27sp + 28sp + 29sp + 30sp + 31sp + 32sp + 33sp + 34sp + 35sp + 36sp + 37sp + 38sp + 39sp + 40sp + 41sp + 42sp + 43sp + 44sp + 45sp + 46sp + 47sp + 48sp + 49sp + 50sp + 51sp + 52sp + 53sp + 54sp + 55sp + 56sp + 57sp + 58sp + 59sp + 60sp + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 28f4a0d..ddcbbd1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -19,4 +19,9 @@ Help Center User Agreement About Us + Is Developing + Log out of your account? + You’ll need to sign in again. Unsaved history will be lost. + Log Out + Cancel \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 6f3733f..e45ebbc 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -32,4 +32,4 @@ dependencyResolutionManagement { rootProject.name = "Nebuluxe" include(":app") - \ No newline at end of file +include(":lib")