app/build.gradle
@@ -38,10 +38,24 @@ buildFeatures { viewBinding true } android.applicationVariants.all { variant -> variant.outputs.all { def viron if (buildType.name.equals('release')) { viron = "正式版"; }else if (buildType.name.equals('debug')) { viron = "开发版"; } outputFileName = "MVVM开源项目-" + viron + "-v" + defaultConfig.versionName +"-" + defaultConfig.versionCode +"-" + new Date().format("MMddHHmm", TimeZone.getTimeZone("UTC"))+ ".apk" } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.3.0' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' @@ -63,4 +77,9 @@ implementation 'com.permissionx.guolindev:permissionx:1.2.2' //权限依赖让你推广你就发群里?没有别的群了? implementation 'com.github.bumptech.glide:glide:4.12.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0' implementation 'com.pangle.cn:ads-sdk-pro:4.0.2.2'//字节跳动 穿山甲广告 implementation 'com.tencent.bugly:crashreport:latest.release' //其中latest.release指代最新Bugly SDK版本号,也可以指定明确的版本号,例如2.1.9 implementation 'com.tencent.bugly:nativecrashreport:latest.release' //其中latest.release指代最新Bugly NDK版本号,也可以指定明确的版本号,例如3.0 implementation 'com.facebook.rebound:rebound:0.3.6'//Rebound “弹簧”动画效果的第三方工具包,由FaceBook implementation 'com.github.zhaolei9527:BottomMenu:v1.0.1'//底部菜单弹框 } app/libs/alipaySdk-15.7.5.aarBinary files differ
app/proguard-rules.pro
@@ -18,4 +18,8 @@ # If you keep the line number information, uncomment this to # hide the original source file name. #-renamesourcefileattribute SourceFile #-renamesourcefileattribute SourceFile #穿山甲混淆代码 -keep class com.bytedance.sdk.openadsdk.** { *; } -keep public interface com.bytedance.sdk.openadsdk.downloadnew.** {*;} -keep class com.pgl.sys.ces.* {*;} app/src/main/AndroidManifest.xml
@@ -1,16 +1,38 @@ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.runt.open.mvvm" > <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <!--写入SD卡的权限:如果你希望保存相机拍照后的照片--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!--读取SD卡的权限:打开相册选取图片所必须的权限--> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" tools:ignore="ProtectedPermissions" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.READ_LOGS" tools:ignore="ProtectedPermissions" /> <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:icon="@mipmap/app_icon" android:name=".MyApplication" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:networkSecurityConfig="@xml/network_security_config" android:theme="@style/Theme.OpemMvvm" > <activity android:name=".MainActivity" android:name=".ui.splash.SplashActivity" android:exported="true" android:label="@string/app_name" > <intent-filter> @@ -19,6 +41,16 @@ <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".MainActivity" android:launchMode="singleTask" tools:ignore="WrongManifestParent" android:exported="true"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <action android:name="com.zfwl.merchant.activities.MainActivity" /> </intent-filter> </activity> </application> </manifest> app/src/main/java/com/runt/open/mvvm/MyApplication.java
@@ -8,6 +8,9 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.bytedance.sdk.openadsdk.TTAdConfig; import com.bytedance.sdk.openadsdk.TTAdConstant; import com.bytedance.sdk.openadsdk.TTAdSdk; import com.runt.open.mvvm.util.MyLog; import com.scwang.smart.refresh.footer.ClassicsFooter; import com.scwang.smart.refresh.header.ClassicsHeader; @@ -17,6 +20,7 @@ import com.scwang.smart.refresh.layout.api.RefreshLayout; import com.scwang.smart.refresh.layout.listener.DefaultRefreshFooterCreator; import com.scwang.smart.refresh.layout.listener.DefaultRefreshHeaderCreator; import com.tencent.bugly.crashreport.CrashReport; import java.util.ArrayList; import java.util.List; @@ -42,6 +46,7 @@ @Override public void onCreate() { super.onCreate(); MyLog.i(TAG,"onCreate"); application = this; //CrashReport.initCrashReport(getApplicationContext(), "8d88679ae9", false);//注册bugly //设置全局的Header构建器 @@ -109,6 +114,29 @@ } } }); CrashReport.initCrashReport(getApplicationContext(), "8d88679ae9", false);//注册bugly TTAdConfig.Builder builder = new TTAdConfig.Builder() .appId("5106813") .useTextureView(true) //使用TextureView控件播放视频,默认为SurfaceView,当有SurfaceView冲突的场景,可以使用TextureView .appName(getString(R.string.app_name)) .titleBarTheme(TTAdConstant.TITLE_BAR_THEME_DARK) .allowShowNotify(true) //是否允许sdk展示通知栏提示 .allowShowPageWhenScreenLock(true) //是否在锁屏场景支持展示广告落地页 .directDownloadNetworkType(TTAdConstant.NETWORK_STATE_WIFI) //允许直接下载的网络状态集合 .supportMultiProcess(true) //是否支持多进程,true支持 .asyncInit(true) ;//异步初始化sdk,开启可减少初始化耗时 //.httpStack(new MyOkStack3())//自定义网络库,demo中给出了okhttp3版本的样例,其余请自行开发或者咨询工作人员。 TTAdSdk.init(this, builder.build(), new TTAdSdk.InitCallback() { @Override public void success() { MyLog.i(TAG,"TTAdSdk success"); } @Override public void fail(int i, String s) { MyLog.e(TAG,"TTAdSdk fail"); } }); } /** @@ -121,14 +149,6 @@ System.exit(0); } public void clearActivities(){ for(Activity activity:activities){ /*if(activity instanceof LoginActivity){ continue; }*/ activity.finish(); } } public boolean isInfront(){ return isInfront; app/src/main/java/com/runt/open/mvvm/base/activities/BaseActivity.java
@@ -2,17 +2,11 @@ import android.Manifest; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.ActivityInfo; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.provider.Settings; import android.util.Log; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; @@ -25,7 +19,6 @@ import androidx.annotation.Nullable; import androidx.annotation.StringRes; import androidx.appcompat.app.AppCompatActivity; import androidx.core.content.FileProvider; import androidx.lifecycle.ViewModelProvider; import androidx.viewbinding.ViewBinding; @@ -33,32 +26,12 @@ import com.runt.open.mvvm.R; import com.runt.open.mvvm.base.model.BaseViewModel; import com.runt.open.mvvm.base.model.ViewModelFactory; import com.runt.open.mvvm.data.ApkUpGradeResult; import com.runt.open.mvvm.util.MyLog; import com.runt.open.mvvm.util.SpUtils; import com.permissionx.guolindev.PermissionX; import com.permissionx.guolindev.callback.ExplainReasonCallbackWithBeforeParam; import com.permissionx.guolindev.callback.ForwardToSettingsCallback; import com.permissionx.guolindev.callback.RequestCallback; import com.permissionx.guolindev.request.ExplainScope; import com.permissionx.guolindev.request.ForwardScope; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; import java.util.Date; import java.util.List; import dmax.dialog.SpotsDialog; import okhttp3.Call; import okhttp3.Callback; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import okhttp3.ResponseBody; /** * activity 封装 @@ -134,6 +107,12 @@ public abstract void initViews(); public boolean isNull(Object object){ return object == null || object.toString().trim().equals("") || object.equals("null"); } AlertDialog loadingDialog; /** * 显示加载弹框 app/src/main/java/com/runt/open/mvvm/listener/CustomClickListener.java
New file @@ -0,0 +1,37 @@ package com.runt.open.mvvm.listener; import android.view.View; /** * My father is Object, ites purpose of * * @purpose Created by Runt (qingingrunt2010@qq.com) on 2020-4-14. */ public abstract class CustomClickListener implements View.OnClickListener { private long mLastClickTime; private long timeInterval = 500L; public CustomClickListener() { } public CustomClickListener(long interval) { this.timeInterval = interval; } @Override public void onClick(View v) { long nowTime = System.currentTimeMillis(); if (nowTime - mLastClickTime > timeInterval) { // 单次点击事件 onSingleClick(v); mLastClickTime = nowTime; } else { // 快速点击事件 onFastClick(v); } } protected abstract void onSingleClick(View view); protected void onFastClick(View v){}; } app/src/main/java/com/runt/open/mvvm/retrofit/api/LoginApiCenter.java
New file @@ -0,0 +1,24 @@ package com.runt.open.mvvm.retrofit.api; import com.runt.open.mvvm.ui.login.LoggedInUser; import io.reactivex.Observable; import retrofit2.http.Field; import retrofit2.http.FormUrlEncoded; import retrofit2.http.POST; /** * Created by Administrator on 2021/11/15 0015. */ public interface LoginApiCenter { @FormUrlEncoded @POST("login") Observable<LoggedInUser> login(@Field("phone") String phone,@Field("pass") String pass); @FormUrlEncoded @POST("login") Observable<LoggedInUser> loginByCode(@Field("phone") String phone,@Field("code") String code); } app/src/main/java/com/runt/open/mvvm/ui/dashboard/DashboardFragment.java
File was deleted app/src/main/java/com/runt/open/mvvm/ui/dashboard/DashboardViewModel.java
File was deleted app/src/main/java/com/runt/open/mvvm/ui/home/HomeFragment.java
File was deleted app/src/main/java/com/runt/open/mvvm/ui/home/HomeViewModel.java
File was deleted app/src/main/java/com/runt/open/mvvm/ui/login/LoggedInUser.java
New file @@ -0,0 +1,10 @@ package com.runt.open.mvvm.ui.login; import com.runt.open.mvvm.data.BaseApiResult; /** * Created by Administrator on 2021/11/15 0015. */ public class LoggedInUser extends BaseApiResult<UserBean> { } app/src/main/java/com/runt/open/mvvm/ui/login/LoginDataSource.java
New file @@ -0,0 +1,7 @@ package com.runt.open.mvvm.ui.login; /** * Created by Administrator on 2021/11/15 0015. */ public class LoginDataSource { } app/src/main/java/com/runt/open/mvvm/ui/login/LoginViewModel.java
New file @@ -0,0 +1,30 @@ package com.runt.open.mvvm.ui.login; import androidx.lifecycle.MutableLiveData; import com.runt.open.mvvm.base.model.BaseViewModel; import com.runt.open.mvvm.retrofit.api.LoginApiCenter; import com.runt.open.mvvm.retrofit.observable.HttpObserver; import com.runt.open.mvvm.retrofit.utils.RetrofitUtils; import io.reactivex.Observable; /** * Created by Administrator on 2021/11/15 0015. */ public class LoginViewModel extends BaseViewModel { MutableLiveData<LoggedInUser> loginResult = new MutableLiveData<>(); public MutableLiveData<LoggedInUser> getLoginResult() { return loginResult; } public void login(String username, String password) { // can be launched in a separate asynchronous job final Observable<LoggedInUser> userObservable = RetrofitUtils.getInstance().getRetrofit(LoginApiCenter.class).login(username, password); httpObserverOn(userObservable,new HttpObserver<LoggedInUser>(loginResult){}); } } app/src/main/java/com/runt/open/mvvm/ui/login/UserBean.java
New file @@ -0,0 +1,278 @@ package com.runt.open.mvvm.ui.login; /** * Created by Administrator on 2021/11/15 0015. */ import java.io.Serializable; import java.math.BigDecimal; import java.util.Date; /** * 用户表 AdvertCustomer * @author Runt_自动生成 * @email qingingrunt2010@qq.com * @date 2020-04-17 20:28:26 */ public class UserBean implements Serializable { private static final long serialVersionUID = 1L; private static UserBean user; public static UserBean getUser() { return user; } public static void setUser(UserBean user) { UserBean.user = user; } /** 主键 **/ private String id; /** 手机号 **/ private String phone; /** 登录token **/ private String token; /** 昵称 **/ private String username; /** 头像 **/ private String head; /** 金币数量 **/ private int coin; /* 连续签到天数 */ private int sign; /** 用户类型(0推广,1店员,2商家,3广告商) **/ private Integer type; /** 上级管理者 **/ private String upuser; /** 余额 **/ private BigDecimal balance; /** 会员等级(0普通用户,1会员) **/ private Integer vlevel; /** 会员到期时间 **/ private Date vtime; /** 状态0通过,1审核中,-1封收益 , -2 限制支付 , -3限制广告 ,-4限制发送短信,-5永久限制发送短信,-6 限制登录 **/ private String status; /** 真实姓名 **/ private String realname; /** 银行卡 **/ private String bank; /** 支付宝 **/ private String alipay; /** 微信 **/ private String wechat; /** QQ **/ private String qq; /** 创建时间 **/ private Date ctime; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getToken() { return token; } public void setToken(String token) { this.token = token; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getHead() { return head; } public void setHead(String head) { this.head = head; } public Integer getType() { return type; } public void setType(Integer type) { this.type = type; } public String getUpuser() { return upuser; } public void setUpuser(String upuser) { this.upuser = upuser; } public BigDecimal getBalance() { return balance; } public void setBalance(BigDecimal balance) { this.balance = balance; } public Integer getVlevel() { return vlevel; } public void setVlevel(Integer vlevel) { this.vlevel = vlevel; } public Date getVtime() { return vtime; } public void setVtime(Date vtime) { this.vtime = vtime; } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public String getRealname() { return realname; } public void setRealname(String realname) { this.realname = realname; } public String getBank() { return bank; } public void setBank(String bank) { this.bank = bank; } public String getAlipay() { return alipay; } public void setAlipay(String alipay) { this.alipay = alipay; } public String getWechat() { return wechat; } public void setWechat(String wechat) { this.wechat = wechat; } public String getQq() { return qq; } public void setQq(String qq) { this.qq = qq; } public Date getCtime() { return ctime; } public void setCtime(Date ctime) { this.ctime = ctime; } public int getCoin() { return coin; } public void setCoin(int coin) { this.coin = coin; } public int getSign() { return sign; } public void setSign(int sign) { this.sign = sign; } @Override public String toString() { return "UserBean{" + "id='" + id + '\'' + ", phone='" + phone + '\'' + ", token='" + token + '\'' + ", username='" + username + '\'' + ", head='" + head + '\'' + ", coin=" + coin + ", sign=" + sign + ", type=" + type + ", upuser='" + upuser + '\'' + ", balance=" + balance + ", vlevel=" + vlevel + ", vtime=" + vtime + ", status=" + status + ", wechat='" + wechat + '\'' + ", qq='" + qq + '\'' + ", ctime=" + ctime + '}'; } } app/src/main/java/com/runt/open/mvvm/ui/main/dashboard/DashboardFragment.java
New file @@ -0,0 +1,44 @@ package com.runt.open.mvvm.ui.main.dashboard; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; import com.runt.open.mvvm.databinding.FragmentDashboardBinding; public class DashboardFragment extends Fragment { private DashboardViewModel dashboardViewModel; private FragmentDashboardBinding binding; public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { dashboardViewModel = new ViewModelProvider(this).get(DashboardViewModel.class); binding = FragmentDashboardBinding.inflate(inflater, container, false); View root = binding.getRoot(); final TextView textView = binding.textDashboard; dashboardViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() { @Override public void onChanged(@Nullable String s) { textView.setText(s); } }); return root; } @Override public void onDestroyView() { super.onDestroyView(); binding = null; } } app/src/main/java/com/runt/open/mvvm/ui/main/dashboard/DashboardViewModel.java
New file @@ -0,0 +1,19 @@ package com.runt.open.mvvm.ui.main.dashboard; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; public class DashboardViewModel extends ViewModel { private MutableLiveData<String> mText; public DashboardViewModel() { mText = new MutableLiveData<>(); mText.setValue("This is dashboard fragment"); } public LiveData<String> getText() { return mText; } } app/src/main/java/com/runt/open/mvvm/ui/main/home/HomeFragment.java
New file @@ -0,0 +1,44 @@ package com.runt.open.mvvm.ui.main.home; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; import com.runt.open.mvvm.databinding.FragmentHomeBinding; public class HomeFragment extends Fragment { private HomeViewModel homeViewModel; private FragmentHomeBinding binding; public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { homeViewModel = new ViewModelProvider(this).get(HomeViewModel.class); binding = FragmentHomeBinding.inflate(inflater, container, false); View root = binding.getRoot(); final TextView textView = binding.textHome; homeViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() { @Override public void onChanged(@Nullable String s) { textView.setText(s); } }); return root; } @Override public void onDestroyView() { super.onDestroyView(); binding = null; } } app/src/main/java/com/runt/open/mvvm/ui/main/home/HomeViewModel.java
New file @@ -0,0 +1,19 @@ package com.runt.open.mvvm.ui.main.home; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; public class HomeViewModel extends ViewModel { private MutableLiveData<String> mText; public HomeViewModel() { mText = new MutableLiveData<>(); mText.setValue("This is home fragment"); } public LiveData<String> getText() { return mText; } } app/src/main/java/com/runt/open/mvvm/ui/main/notifications/NotificationsFragment.java
New file @@ -0,0 +1,44 @@ package com.runt.open.mvvm.ui.main.notifications; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; import com.runt.open.mvvm.databinding.FragmentNotificationsBinding; public class NotificationsFragment extends Fragment { private NotificationsViewModel notificationsViewModel; private FragmentNotificationsBinding binding; public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { notificationsViewModel = new ViewModelProvider(this).get(NotificationsViewModel.class); binding = FragmentNotificationsBinding.inflate(inflater, container, false); View root = binding.getRoot(); final TextView textView = binding.textNotifications; notificationsViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() { @Override public void onChanged(@Nullable String s) { textView.setText(s); } }); return root; } @Override public void onDestroyView() { super.onDestroyView(); binding = null; } } app/src/main/java/com/runt/open/mvvm/ui/main/notifications/NotificationsViewModel.java
New file @@ -0,0 +1,19 @@ package com.runt.open.mvvm.ui.main.notifications; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; public class NotificationsViewModel extends ViewModel { private MutableLiveData<String> mText; public NotificationsViewModel() { mText = new MutableLiveData<>(); mText.setValue("This is notifications fragment"); } public LiveData<String> getText() { return mText; } } app/src/main/java/com/runt/open/mvvm/ui/notifications/NotificationsFragment.java
File was deleted app/src/main/java/com/runt/open/mvvm/ui/notifications/NotificationsViewModel.java
File was deleted app/src/main/java/com/runt/open/mvvm/ui/splash/SplashActivity.java
New file @@ -0,0 +1,93 @@ package com.runt.open.mvvm.ui.splash; import android.content.Intent; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.View; import android.view.WindowManager; import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import com.bytedance.sdk.openadsdk.TTSplashAd; import com.runt.open.mvvm.MainActivity; import com.runt.open.mvvm.base.activities.BaseActivity; import com.runt.open.mvvm.databinding.ActivitySplashBinding; /** * My father is Object, ites purpose of 启动页 * * @purpose Created by Runt (qingingrunt2010@qq.com) on 2020-4-16. */ public class SplashActivity extends BaseActivity<ActivitySplashBinding,SplashViewModel> { final String TAG = "WelcomeActivity"; Handler handler = new Handler(){ boolean started = false; @Override public void handleMessage(@NonNull Message msg) { super.handleMessage(msg); if(!started) {//确保该语句只执行一次 started = true; Intent intent = new Intent(mContext, MainActivity.class); startActivity(intent); finish(); } } }; @Override public void initViews() { getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);//全屏 hideBottomUIMenu(); viewModel.getSplashAd().observe(this, new Observer<TTSplashAd>() { @Override public void onChanged(TTSplashAd ttSplashAd) { binding.splashAdContainer.addView(ttSplashAd.getSplashView()); //设置SplashView的交互监听器 ttSplashAd.setSplashInteractionListener(new TTSplashAd.AdInteractionListener() { @Override public void onAdClicked(View view, int type) { Log.d(TAG, "onAdClicked"); } @Override public void onAdShow(View view, int type) { Log.d(TAG, "onAdShow"); } @Override public void onAdSkip() { Log.d(TAG, "onAdSkip"); handler.sendMessage(new Message()); } @Override public void onAdTimeOver() { Log.d(TAG, "onAdTimeOver"); handler.sendMessage(new Message()); } }); } }); viewModel.getTimeOut().observe(this, new Observer<Integer>() { @Override public void onChanged(Integer integer) { handler.sendMessage(new Message()); } }); viewModel.applyTdAd(mContext);;//请求广告 } @Override protected void onDestroy() { super.onDestroy(); binding.splashAdContainer.removeAllViews(); } } app/src/main/java/com/runt/open/mvvm/ui/splash/SplashViewModel.java
New file @@ -0,0 +1,87 @@ package com.runt.open.mvvm.ui.splash; import android.content.Context; import android.os.Handler; import android.util.Log; import androidx.lifecycle.MutableLiveData; import com.bytedance.sdk.openadsdk.AdSlot; import com.bytedance.sdk.openadsdk.TTAdNative; import com.bytedance.sdk.openadsdk.TTAdSdk; import com.bytedance.sdk.openadsdk.TTSplashAd; import com.runt.open.mvvm.base.model.BaseViewModel; import java.util.Date; /** * Created by Administrator on 2021/11/15 0015. */ public class SplashViewModel extends BaseViewModel { final String TAG = "SplashViewModel"; long cTime = new Date().getTime(),limitTime = 2000; private MutableLiveData<TTSplashAd> splashAd = new MutableLiveData<>(); private MutableLiveData<Integer> timeOut = new MutableLiveData<>(); public MutableLiveData<TTSplashAd> getSplashAd() { return splashAd; } public MutableLiveData<Integer> getTimeOut() { return timeOut; } public void countdown(){ new Handler().postDelayed(new Runnable() { @Override public void run() { timeOut.setValue(0); } },limitTime); } /** * 请求广告 * @param context */ public void applyTdAd(Context context){ countdown(); TTAdNative mTTAdNative = TTAdSdk.getAdManager().createAdNative(context); AdSlot adSlot = new AdSlot.Builder() .setCodeId("887382769")//广告id .setSupportDeepLink(true) .setImageAcceptedSize(1080,1920) //模板广告需要设置期望个性化模板广告的大小,单位dp,代码位是否属于个性化模板广告,请在穿山甲平台查看 //.setExpressViewAcceptedSize(expressViewWidth, expressViewHeight) .build(); mTTAdNative.loadSplashAd(adSlot,new TTAdNative.SplashAdListener() { @Override public void onError(int i, String s) { Log.i(TAG,"code:"+i+" message:"+s); } @Override public void onTimeout() { Log.i(TAG,"超时"); } @Override public void onSplashAdLoad(TTSplashAd ttSplashAd) { Log.d(TAG, "开屏广告请求成功"); long waitTime = limitTime - (new Date().getTime() - cTime); if(waitTime > 0){//是否超过限定时间 没有超时则继续 new Handler().postDelayed(new Runnable() { @Override public void run() { splashAd.setValue(ttSplashAd); } }, waitTime > 0 ? waitTime : 0); } } }); } } app/src/main/java/com/runt/open/mvvm/util/AlgorithmUtils.java
New file @@ -0,0 +1,75 @@ package com.runt.open.mvvm.util; import android.graphics.Point; /** * Created by Administrator on 2018/4/24. */ public class AlgorithmUtils { /** * 密码等级算法 * @param pwd * @return */ public static int pwdLevel(String pwd){ int level = 0 ; boolean flag = false; try{ Integer.parseInt(pwd); }catch (Exception e){ flag =true; } boolean isHigh = false; boolean hasUp = false; boolean hasLow = false; boolean hasNum = false; for(int i = 0 ; i < pwd.length(); i ++ ){ int chars = (int)pwd.toCharArray()[i]; if(chars>64 && chars<91){//包含大写字母 hasUp = true; }else if(chars>96 && chars<123){//包含小写字母 hasLow = true; }else if(chars>47 && chars<58){//数字 hasNum = true; }else{//特殊字符 isHigh = true; } } int length = 7; if(pwd.length()>length && isHigh && hasLow && hasUp && hasNum){//长度足够,包含大小写+特殊字符+数字 level = 4 ; }else if(pwd.length()>length && isHigh && !hasLow && hasUp && hasNum){//长度足够,包含大写+特殊字符+数字 level = 3 ; }else if(pwd.length()>length && isHigh && hasLow && !hasUp && hasNum){//长度足够,包含小写+特殊字符+数字 level = 3 ; }else if(pwd.length()>length && !isHigh && hasLow && hasUp && hasNum){//长度足够,包含大、小写+数字 level = 3 ; }else if(pwd.length()>length && isHigh && !hasLow && !hasUp && hasNum){//长度足够,只包含特殊符号+数字 level = 2 ; }else if(pwd.length()>length && !isHigh && !hasLow && hasUp && hasNum){//长度足够,只包含大写字母+数字 level = 2 ; }else if(pwd.length()>length && !isHigh && hasLow && !hasUp && hasNum){//长度足够,只包含小写字母+数字 level = 2 ; }else if(pwd.length()>length && isHigh && !hasLow && !hasUp && !hasNum){//长度足够,只包含特殊符号 level = 1 ; }else if(pwd.length()>length && !isHigh && !hasLow && hasUp && !hasNum){//长度足够,只包含大写字母 level = 1 ; }else if(pwd.length()>length && !isHigh && hasLow && !hasUp && !hasNum){//长度足够,只包含小写字母 level = 1 ; }else if((pwd.length()<length+1 && pwd.length() > 0 ) || !flag){//全是数字或长度太小 level = 0 ; }else if(pwd.length() == 0){ level = -1 ; } //MyMyLog.i("AlgorithmUtils", String.format("pwdLevel isHigh:%s , hasLow:%s , hasUp:%s , hasNum:%s ,level:%s",isHigh , hasLow , hasUp , hasNum ,level)); return level; } } app/src/main/java/com/runt/open/mvvm/util/Configuration.java
New file @@ -0,0 +1,48 @@ package com.runt.open.mvvm.util; /** * Created by xanarry on 2016/5/22. */ public class Configuration { public static final int REQUEST_CODE_PIC = 303; public final static String MESS_TIP_NET_ERROR = "网络连接不畅,请稍后再试!!!"; public final static String KEY_MES_CODE= "code"; public final static String KEY_MES_TIME= "time"; public final static String KEY_MES_MESSAGE= "msg"; public final static String KEY_MES_ERROR= "error"; public final static String KEY_CODE_SUCCESS= "0";//code 0 成功 public final static int KEY_CODE_INFO= 101;//修改资料 public final static String KEY_USER = "user"; public final static String KEY_ADVERT= "advert"; public final static String KEY_DATA= "data"; public final static String KEY_FILES= "files"; public final static String KEY_SCREEN_TYPE = "screen_type";//屏幕类型 public final static String KEY_SCREEN_FILES= "screen_files";//播放的资源文件列表 public final static String KEY_NAME= "name"; public final static String KEY_MARk= "mark"; public final static String KEY_ORDER= "order"; public final static String FILENAME_MK = "fileName"; public final static String FILEPATH = "path"; public final static String STR_APPLY_DATA = "apply datas"; public final static String STR_FILE_PLAN_FAILED = "file plan failed"; public final static String STR_START_FILE_PLAN = "start file plan"; public final static String STR_FINISHED_FILE_PLAN = "finished plan"; public final static String FILESIZE_MK = "fileSize"; public static final String KEY_EXTRAS = "extras"; public static final String KEY_USERID = "customerId"; public static final String KEY_TOKEN = "token"; public static final String KEY_USERNAME = "username"; public static final String KEY_PHONE = "phone"; public static final String KEY_USERPASS = "userpass"; public static final String MESSAGE_RECEIVED_ACTION = "MESSAGE_RECEIVED_ACTION"; public static final String KEY_REGION = "region", IS_LOGIN = "is_login"; } app/src/main/java/com/runt/open/mvvm/util/SpUtils.java
@@ -27,8 +27,8 @@ } public final String PROJECT = "project"; public final String USER = "user"; public final static String PROJECT = "project"; public final static String USER = "user"; public boolean clearData(Context context, String keyShared){ app/src/main/res/anim/anima_make_none.xml
New file @@ -0,0 +1,16 @@ <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:ordering="together"> <objectAnimator android:duration="150" android:propertyName="scaleX" android:valueFrom="1" android:valueTo="0" ></objectAnimator> <objectAnimator android:duration="150" android:propertyName="scaleY" android:valueFrom="1" android:valueTo="0" ></objectAnimator> </set> app/src/main/res/color/home_nav_color.xml
New file @@ -0,0 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_checked="false" android:color="@color/gray_pressed" /> <item android:state_checked="true" android:color="@color/txt_normal" /> </selector> app/src/main/res/color/verify_code.xml
New file @@ -0,0 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <selector xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android" tools:ignore="MissingDefaultResource"> <item android:state_enabled="false" android:color="@color/holo_red_light" /> <item android:color="@color/txt_normal" /> </selector> app/src/main/res/drawable-v21/bg_circle_default.xml
New file @@ -0,0 +1,24 @@ <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/color_gray" > <item> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_focused="true"> <shape> <stroke android:width="0.5dp" android:color="@color/white" /> <solid android:color="@color/input_bg" /> <corners android:radius="@dimen/circle" /> </shape> </item> <item> <shape> <stroke android:width="0.5dp" android:color="@color/white" /> <solid android:color="@color/input_bg" /> <corners android:radius="@dimen/circle" /> <padding android:bottom="0dp" android:left="0dp" android:right="0dp" android:top="0dp" /> </shape> </item> </selector> </item> </ripple> app/src/main/res/drawable-v21/bg_white.xml
New file @@ -0,0 +1,27 @@ <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/color_gray"> <item> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <shape android:shape="rectangle"> <solid android:color="@color/gray_pressed" /> </shape> </item> <item android:state_enabled="false"> <shape android:shape="rectangle"> <solid android:color="@color/cut_off_line" /> </shape> </item> <item> <shape android:shape="rectangle"> <solid android:color="@color/white" /> </shape> </item> </selector> </item> </ripple> app/src/main/res/drawable-v21/bg_white_circle.xml
New file @@ -0,0 +1,30 @@ <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/color_gray" > <item> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false"> <shape> <stroke android:width="0.5dp" android:color="@color/white" /> <solid android:color="@color/color_gray" /> <corners android:radius="@dimen/circle" /> </shape> </item> <item android:state_pressed="true"> <shape> <solid android:color="@color/gray_pressed" /> <corners android:radius="@dimen/circle" /> <padding android:bottom="0dp" android:left="0dp" android:right="0dp" android:top="0dp" /> </shape> </item> <item> <shape> <solid android:color="@color/white" /> <corners android:radius="@dimen/circle" /> <padding android:bottom="0dp" android:left="0dp" android:right="0dp" android:top="0dp" /> </shape> </item> </selector> </item> </ripple> app/src/main/res/drawable-v21/btn_blue_border.xml
New file @@ -0,0 +1,37 @@ <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/deep_blue"> <item> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <shape android:shape="rectangle"> <corners android:radius="@dimen/corner" /> <solid android:color="@color/cut_off_line" /> <stroke android:width="1dp" android:color="@color/link" /> </shape> </item> <item android:state_enabled="false"> <shape android:shape="rectangle"> <corners android:radius="@dimen/corner" /> <solid android:color="@color/cut_off_line" /> </shape> </item> <item> <shape android:shape="rectangle"> <corners android:radius="@dimen/corner" /> <gradient android:angle="270" android:endColor="@color/white" android:startColor="@color/white" /> <stroke android:width="1dp" android:color="@color/link" /> </shape> </item> </selector> </item> </ripple> app/src/main/res/drawable-v21/btn_blue_circle_border.xml
New file @@ -0,0 +1,37 @@ <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/deep_blue"> <item> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <shape android:shape="rectangle"> <corners android:radius="@dimen/circle" /> <solid android:color="@color/cut_off_line" /> <stroke android:width="1dp" android:color="@color/link" /> </shape> </item> <item android:state_enabled="false"> <shape android:shape="rectangle"> <corners android:radius="@dimen/circle" /> <solid android:color="@color/cut_off_line" /> </shape> </item> <item> <shape android:shape="rectangle"> <corners android:radius="@dimen/circle" /> <gradient android:angle="270" android:endColor="@color/white" android:startColor="@color/white" /> <stroke android:width="1dp" android:color="@color/link" /> </shape> </item> </selector> </item> </ripple> app/src/main/res/drawable-v21/btn_blue_corner.xml
New file @@ -0,0 +1,31 @@ <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/deep_blue"> <item> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <shape android:shape="rectangle"> <corners android:radius="@dimen/corner" /> <solid android:color="@color/deep_blue" /> </shape> </item> <item android:state_enabled="false"> <shape android:shape="rectangle"> <corners android:radius="@dimen/corner" /> <solid android:color="@color/cut_off_line" /> </shape> </item> <item> <shape android:shape="rectangle"> <corners android:radius="@dimen/corner" /> <gradient android:angle="270" android:endColor="@color/link" android:startColor="@color/link" /> </shape> </item> </selector> </item> </ripple> app/src/main/res/drawable-v21/btn_circle.xml
New file @@ -0,0 +1,34 @@ <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/cut_off_line"> <item> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <shape android:shape="rectangle"> <corners android:radius="@dimen/circle" /> <solid android:color="@color/white" /> </shape> </item> <item android:state_enabled="false"> <shape android:shape="rectangle"> <corners android:radius="@dimen/circle" /> <solid android:color="@color/cut_off_line" /> </shape> </item> <item> <shape android:shape="rectangle"> <corners android:radius="@dimen/circle" /> <gradient android:angle="270" android:endColor="@color/white" android:startColor="@color/white" /> <stroke android:width="1dp" android:color="@color/cut_off_circle" /> </shape> </item> </selector> </item> </ripple> app/src/main/res/drawable-v21/btn_circle_blue.xml
New file @@ -0,0 +1,31 @@ <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/cut_off_line"> <item> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <shape android:shape="rectangle"> <corners android:radius="@dimen/circle" /> <solid android:color="@color/deep_blue" /> </shape> </item> <item android:state_enabled="false"> <shape android:shape="rectangle"> <corners android:radius="@dimen/circle" /> <solid android:color="@color/btn_gray_normal" /> </shape> </item> <item> <shape android:shape="rectangle"> <corners android:radius="@dimen/circle" /> <gradient android:angle="270" android:endColor="@color/theme" android:startColor="@color/theme" /> </shape> </item> </selector> </item> </ripple> app/src/main/res/drawable-v21/btn_circle_red.xml
New file @@ -0,0 +1,25 @@ <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <shape android:shape="rectangle"> <corners android:radius="@dimen/circle" /> <solid android:color="@color/err" /> </shape> </item> <item android:state_enabled="false"> <shape android:shape="rectangle"> <corners android:radius="@dimen/circle" /> <solid android:color="@color/cut_off_line" /> </shape> </item> <item> <shape android:shape="rectangle"> <corners android:radius="@dimen/circle" /> <gradient android:angle="270" android:endColor="@color/err" android:startColor="@color/err" /> </shape> </item> </selector> app/src/main/res/drawable-v21/btn_gray_border.xml
New file @@ -0,0 +1,37 @@ <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/txt_enable"> <item> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <shape android:shape="rectangle"> <corners android:radius="@dimen/corner" /> <solid android:color="@color/cut_off_line" /> <stroke android:width="1dp" android:color="@color/cut_off_line" /> </shape> </item> <item android:state_enabled="false"> <shape android:shape="rectangle"> <corners android:radius="@dimen/corner" /> <solid android:color="@color/cut_off_line" /> </shape> </item> <item> <shape android:shape="rectangle"> <corners android:radius="@dimen/corner" /> <gradient android:angle="270" android:endColor="@color/white" android:startColor="@color/white" /> <stroke android:width="1dp" android:color="@color/cut_off_line" /> </shape> </item> </selector> </item> </ripple> app/src/main/res/drawable-v21/btn_gray_circle.xml
New file @@ -0,0 +1,24 @@ <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/color_gray" > <item> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_focused="true"> <shape> <stroke android:width="0.5dp" android:color="@color/white" /> <solid android:color="@color/input_bg" /> <corners android:radius="@dimen/circle" /> </shape> </item> <item> <shape> <stroke android:width="0.5dp" android:color="@color/white" /> <solid android:color="@color/color_gray8" /> <corners android:radius="@dimen/circle" /> <padding android:bottom="0dp" android:left="0dp" android:right="0dp" android:top="0dp" /> </shape> </item> </selector> </item> </ripple> app/src/main/res/drawable-v21/btn_white_lb_corner.xml
New file @@ -0,0 +1,36 @@ <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/black_20"> <item> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <shape android:shape="rectangle"> <corners android:bottomLeftRadius="8dp" /> <solid android:color="@color/black_10" /> </shape> </item> <item android:state_enabled="false"> <shape android:shape="rectangle"> <corners android:bottomLeftRadius="8dp" /> <solid android:color="@color/black_10" /> </shape> </item> <item android:state_focused="true"> <shape android:shape="rectangle"> <corners android:bottomLeftRadius="8dp" /> <solid android:color="@color/gray_normal" /> </shape> </item> <item> <shape android:shape="rectangle"> <corners android:bottomLeftRadius="8dp" /> <solid android:color="@color/white" /> </shape> </item> </selector> </item> </ripple> app/src/main/res/drawable-v21/btn_white_rb_corner.xml
New file @@ -0,0 +1,35 @@ <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/black_20"> <item> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <shape android:shape="rectangle"> <corners android:bottomRightRadius="8dp" /> <solid android:color="@color/black_10" /> </shape> </item> <item android:state_enabled="false"> <shape android:shape="rectangle"> <corners android:bottomRightRadius="8dp" /> <solid android:color="@color/black_10" /> </shape> </item> <item android:state_focused="true"> <shape android:shape="rectangle"> <corners android:bottomRightRadius="8dp" /> <solid android:color="@color/black" /> </shape> </item> <item> <shape android:shape="rectangle"> <corners android:bottomRightRadius="8dp" /> <solid android:color="@color/white" /> </shape> </item> </selector> </item> </ripple> app/src/main/res/drawable-v21/enable_corner_border.xml
New file @@ -0,0 +1,38 @@ <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/enable_color" > <item> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false"> <shape> <stroke android:width="0.5dp" android:color="@color/white" /> <solid android:color="@color/enable_color" /> <corners android:radius="@dimen/radius" /> </shape> </item> <item android:state_pressed="true"> <shape> <solid android:color="@color/white" /> <corners android:radius="@dimen/radius" /> <padding android:bottom="0dp" android:left="0dp" android:right="0dp" android:top="0dp" /> </shape> </item> <item android:state_checked="true"> <shape> <stroke android:width="0.5dp" android:color="@color/white" /> <solid android:color="@color/theme_color" /> <corners android:radius="@dimen/radius" /> </shape> </item> <item> <shape> <stroke android:width="0.5dp" android:color="@color/white" /> <solid android:color="@color/enable_color" /> <corners android:radius="@dimen/radius" /> <padding android:bottom="0dp" android:left="0dp" android:right="0dp" android:top="0dp" /> </shape> </item> </selector> </item> </ripple> app/src/main/res/drawable-v21/theme_corner_border.xml
New file @@ -0,0 +1,38 @@ <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/enable_color" > <item> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false"> <shape> <stroke android:width="0.5dp" android:color="@color/white" /> <solid android:color="@color/enable_color" /> <corners android:radius="@dimen/radius" /> </shape> </item> <item android:state_pressed="true"> <shape> <solid android:color="@color/white" /> <corners android:radius="@dimen/radius" /> <padding android:bottom="0dp" android:left="0dp" android:right="0dp" android:top="0dp" /> </shape> </item> <item android:state_checked="true"> <shape> <stroke android:width="0.5dp" android:color="@color/white" /> <solid android:color="@color/theme_color" /> <corners android:radius="@dimen/radius" /> </shape> </item> <item> <shape> <stroke android:width="0.5dp" android:color="@color/theme_color" /> <solid android:color="@color/theme_tint_color" /> <corners android:radius="@dimen/radius" /> <padding android:bottom="0dp" android:left="0dp" android:right="0dp" android:top="0dp" /> </shape> </item> </selector> </item> </ripple> app/src/main/res/drawable-v21/white_corner_border.xml
New file @@ -0,0 +1,38 @@ <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/enable_color" > <item> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false"> <shape> <stroke android:width="0.5dp" android:color="@color/white" /> <solid android:color="@color/enable_color" /> <corners android:radius="@dimen/radius" /> </shape> </item> <item android:state_pressed="true"> <shape> <solid android:color="@color/white" /> <corners android:radius="@dimen/radius" /> <padding android:bottom="0dp" android:left="0dp" android:right="0dp" android:top="0dp" /> </shape> </item> <item android:state_checked="true"> <shape> <stroke android:width="0.5dp" android:color="@color/white" /> <solid android:color="@color/theme_color" /> <corners android:radius="@dimen/radius" /> </shape> </item> <item> <shape> <stroke android:width="0.5dp" android:color="@color/enable_color" /> <solid android:color="@color/white" /> <corners android:radius="@dimen/radius" /> <padding android:bottom="0dp" android:left="0dp" android:right="0dp" android:top="0dp" /> </shape> </item> </selector> </item> </ripple> app/src/main/res/drawable-v24/ic_launcher_foreground.xml
File was deleted app/src/main/res/drawable/bg_black_circle.xml
New file @@ -0,0 +1,11 @@ <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle"> <corners android:radius="@dimen/circle" /> <solid android:color="@color/black" /> </shape> </item> </selector> app/src/main/res/drawable/bg_blue_circle.xml
New file @@ -0,0 +1,11 @@ <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle"> <corners android:radius="@dimen/circle" /> <solid android:color="@color/ske_blue" /> </shape> </item> </selector> app/src/main/res/drawable/bg_enable_circle.xml
New file @@ -0,0 +1,11 @@ <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle"> <corners android:radius="@dimen/circle" /> <solid android:color="@color/gray_normal" /> </shape> </item> </selector> app/src/main/res/drawable/bg_enable_circle_border.xml
New file @@ -0,0 +1,15 @@ <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle"> <corners android:radius="@dimen/circle" /> <padding android:bottom="100dp" /> <gradient android:angle="270" android:endColor="@color/white" android:startColor="@color/white" /> <stroke android:width="1dp" android:color="@color/txt_enable" /> </shape> </item> </selector> app/src/main/res/drawable/bg_gradient_blue.xml
New file @@ -0,0 +1,12 @@ <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape> <corners android:radius="5dp" /> <gradient android:angle="360" android:endColor="@color/blue_sky" android:startColor="@color/color_blue"/> </shape> </item> </layer-list> app/src/main/res/drawable/bg_gradient_gray.xml
New file @@ -0,0 +1,12 @@ <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item > <shape> <corners android:radius="2.0dip" /> <gradient android:angle="180" android:startColor="@color/color_gray" android:endColor="@color/color_gray8" /> </shape> </item> </layer-list> app/src/main/res/drawable/bg_num.xml
New file @@ -0,0 +1,25 @@ <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false"> <shape> <stroke android:width="0.5dp" android:color="@color/corsor_color" /> <solid android:color="@color/cameralist_gray" /> </shape> </item> <item android:state_pressed="true"> <shape> <solid android:color="@color/ui_content" /> </shape> </item> <item android:state_focused="true"> <shape> <solid android:color="@color/trans_blue" /> </shape> </item> <item> <shape> <stroke android:color="@color/cut_off_line" /> <solid android:color="@color/white" /> </shape> </item> </selector> app/src/main/res/drawable/bg_red_border_circle.xml
New file @@ -0,0 +1,14 @@ <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle"> <corners android:radius="@dimen/circle" /> <gradient android:angle="270" android:endColor="@color/white" android:startColor="@color/white" /> <stroke android:width="1dp" android:color="@color/sign_today" /> </shape> </item> </selector> app/src/main/res/drawable/bg_red_circle.xml
New file @@ -0,0 +1,11 @@ <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle"> <corners android:radius="@dimen/circle" /> <solid android:color="@color/sign_today" /> </shape> </item> </selector> app/src/main/res/drawable/bg_seekbar_progress_drawable.xml
New file @@ -0,0 +1,26 @@ <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 背景图 --> <item android:id="@android:id/background" android:height="3dp"> <shape> <corners android:radius="10dp"/> <size android:height="5dp" /> <solid android:color="#eeeff3"/> </shape> </item> <!-- 进和能量图 --> <item android:id="@android:id/progress" android:height="3dp"> <clip> <shape> <corners android:radius="10dp"/> <size android:height="5dp" /> <gradient android:endColor="#10A2F1" android:startColor="#0079FF" /> </shape> </clip> </item> </layer-list> app/src/main/res/drawable/bg_them_circle.xml
New file @@ -0,0 +1,12 @@ <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle"> <corners android:radius="@dimen/circle" /> <gradient android:angle="270" android:endColor="@color/theme" android:startColor="@color/theme" /> </shape> </item> </selector> app/src/main/res/drawable/bg_theme_border.xml
New file @@ -0,0 +1,14 @@ <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle"> <corners android:radius="@dimen/corner" /> <gradient android:angle="270" android:endColor="@color/white" android:startColor="@color/white" /> <stroke android:width="1dp" android:color="@color/theme" /> </shape> </item> </selector> app/src/main/res/drawable/bg_white.xml
New file @@ -0,0 +1,21 @@ <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <shape android:shape="rectangle"> <solid android:color="@color/gray_pressed" /> </shape> </item> <item android:state_enabled="false"> <shape android:shape="rectangle"> <solid android:color="@color/cut_off_line" /> </shape> </item> <item> <shape android:shape="rectangle"> <solid android:color="@color/white" /> </shape> </item> </selector> app/src/main/res/drawable/bg_white_circle.xml
New file @@ -0,0 +1,11 @@ <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle"> <corners android:radius="@dimen/circle" /> <solid android:color="@color/white" /> </shape> </item> </selector> app/src/main/res/drawable/bg_white_corner.xml
New file @@ -0,0 +1,11 @@ <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle"> <corners android:radius="@dimen/corner" /> <gradient android:angle="270" android:endColor="@color/white" android:startColor="@color/white" /> </shape> </item> </selector> app/src/main/res/drawable/bg_white_corner_8.xml
New file @@ -0,0 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="@color/white" /> <corners android:radius="8dp" /> </shape> app/src/main/res/drawable/calender_last.xml
New file @@ -0,0 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false" android:drawable="@mipmap/top_left_e" /> <item android:state_pressed="true" android:drawable="@mipmap/top_left_e" /> <item android:drawable="@mipmap/top_left_g" /> </selector> app/src/main/res/drawable/calender_next.xml
New file @@ -0,0 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false" android:drawable="@mipmap/top_right_e" /> <item android:state_pressed="true" android:drawable="@mipmap/top_right_e" /> <item android:drawable="@mipmap/top_right_g" /> </selector> app/src/main/res/drawable/check_selector.xml
New file @@ -0,0 +1,9 @@ <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@mipmap/selected" android:state_checked="true"/> <item android:drawable="@mipmap/selected" android:state_selected="true"/> <item android:drawable="@mipmap/select" android:state_checked="false"/> <item android:drawable="@mipmap/select" /> </selector> app/src/main/res/drawable/enable_corner_border.xml
New file @@ -0,0 +1,33 @@ <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false"> <shape> <stroke android:width="0.5dp" android:color="@color/white" /> <solid android:color="@color/enable_color" /> <corners android:radius="@dimen/radius" /> </shape> </item> <item android:state_pressed="true"> <shape> <solid android:color="@color/white" /> <corners android:radius="@dimen/radius" /> <padding android:bottom="0dp" android:left="0dp" android:right="0dp" android:top="0dp" /> </shape> </item> <item android:state_checked="true"> <shape> <stroke android:width="0.5dp" android:color="@color/white" /> <solid android:color="@color/theme_color" /> <corners android:radius="@dimen/radius" /> </shape> </item> <item> <shape> <stroke android:width="0.5dp" android:color="@color/white" /> <solid android:color="@color/enable_color" /> <corners android:radius="@dimen/radius" /> <padding android:bottom="0dp" android:left="0dp" android:right="0dp" android:top="0dp" /> </shape> </item> </selector> app/src/main/res/drawable/ic_dashboard_black_24dp.xml
File was deleted app/src/main/res/drawable/ic_home_black_24dp.xml
File was deleted app/src/main/res/drawable/ic_launcher_background.xml
@@ -2,169 +2,169 @@ <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="108dp" android:height="108dp" android:viewportWidth="108" android:viewportHeight="108"> android:viewportHeight="108" android:viewportWidth="108"> <path android:fillColor="#3DDC84" android:fillColor="#008577" android:pathData="M0,0h108v108h-108z" /> <path android:fillColor="#00000000" android:pathData="M9,0L9,108" android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8" /> <path android:fillColor="#00000000" android:pathData="M19,0L19,108" android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8" /> <path android:fillColor="#00000000" android:pathData="M29,0L29,108" android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8" /> <path android:fillColor="#00000000" android:pathData="M39,0L39,108" android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8" /> <path android:fillColor="#00000000" android:pathData="M49,0L49,108" android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8" /> <path android:fillColor="#00000000" android:pathData="M59,0L59,108" android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8" /> <path android:fillColor="#00000000" android:pathData="M69,0L69,108" android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8" /> <path android:fillColor="#00000000" android:pathData="M79,0L79,108" android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8" /> <path android:fillColor="#00000000" android:pathData="M89,0L89,108" android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8" /> <path android:fillColor="#00000000" android:pathData="M99,0L99,108" android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8" /> <path android:fillColor="#00000000" android:pathData="M0,9L108,9" android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8" /> <path android:fillColor="#00000000" android:pathData="M0,19L108,19" android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8" /> <path android:fillColor="#00000000" android:pathData="M0,29L108,29" android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8" /> <path android:fillColor="#00000000" android:pathData="M0,39L108,39" android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8" /> <path android:fillColor="#00000000" android:pathData="M0,49L108,49" android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8" /> <path android:fillColor="#00000000" android:pathData="M0,59L108,59" android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8" /> <path android:fillColor="#00000000" android:pathData="M0,69L108,69" android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8" /> <path android:fillColor="#00000000" android:pathData="M0,79L108,79" android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8" /> <path android:fillColor="#00000000" android:pathData="M0,89L108,89" android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8" /> <path android:fillColor="#00000000" android:pathData="M0,99L108,99" android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8" /> <path android:fillColor="#00000000" android:pathData="M19,29L89,29" android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8" /> <path android:fillColor="#00000000" android:pathData="M19,39L89,39" android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8" /> <path android:fillColor="#00000000" android:pathData="M19,49L89,49" android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8" /> <path android:fillColor="#00000000" android:pathData="M19,59L89,59" android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8" /> <path android:fillColor="#00000000" android:pathData="M19,69L89,69" android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8" /> <path android:fillColor="#00000000" android:pathData="M19,79L89,79" android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8" /> <path android:fillColor="#00000000" android:pathData="M29,19L29,89" android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8" /> <path android:fillColor="#00000000" android:pathData="M39,19L39,89" android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8" /> <path android:fillColor="#00000000" android:pathData="M49,19L49,89" android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8" /> <path android:fillColor="#00000000" android:pathData="M59,19L59,89" android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8" /> <path android:fillColor="#00000000" android:pathData="M69,19L69,89" android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8" /> <path android:fillColor="#00000000" android:pathData="M79,19L79,89" android:strokeWidth="0.8" android:strokeColor="#33FFFFFF" /> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8" /> </vector> app/src/main/res/drawable/ic_notifications_black_24dp.xml
File was deleted app/src/main/res/drawable/item_check_pass.xml
New file @@ -0,0 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/bg_black_circle" android:state_checked="true"/> <item android:drawable="@drawable/bg_white_circle" android:state_checked="false"/> </selector> app/src/main/res/drawable/picture_icon_delete.png
app/src/main/res/drawable/picture_icon_shadow_bg.png
app/src/main/res/drawable/picture_icon_video.png
app/src/main/res/drawable/theme_corner_border.xml
New file @@ -0,0 +1,32 @@ <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false"> <shape> <stroke android:width="0.5dp" android:color="@color/white" /> <solid android:color="@color/enable_color" /> <corners android:radius="@dimen/radius" /> </shape> </item> <item android:state_pressed="true"> <shape> <solid android:color="@color/white" /> <corners android:radius="@dimen/radius" /> <padding android:bottom="0dp" android:left="0dp" android:right="0dp" android:top="0dp" /> </shape> </item> <item android:state_checked="true"> <shape> <stroke android:width="0.5dp" android:color="@color/white" /> <solid android:color="@color/theme_color" /> <corners android:radius="@dimen/radius" /> </shape> </item> <item> <shape> <stroke android:width="0.5dp" android:color="@color/theme_color" /> <solid android:color="@color/theme_tint_color" /> <corners android:radius="@dimen/radius" /> <padding android:bottom="0dp" android:left="0dp" android:right="0dp" android:top="0dp" /> </shape> </item> </selector> app/src/main/res/drawable/white_corner_border.xml
New file @@ -0,0 +1,31 @@ <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false"> <shape> <stroke android:width="0.5dp" android:color="@color/white" /> <solid android:color="@color/enable_color" /> <corners android:radius="@dimen/radius" /> </shape> </item> <item android:state_pressed="true"> <shape> <stroke android:width="0.5dp" android:color="@color/enable_color" /> <solid android:color="@color/press_color" /> <corners android:radius="@dimen/radius" /> </shape> </item> <item android:state_checked="true"> <shape> <stroke android:width="0.5dp" android:color="@color/white" /> <solid android:color="@color/theme_color" /> <corners android:radius="@dimen/radius" /> </shape> </item> <item> <shape> <stroke android:width="0.5dp" android:color="@color/enable_color" /> <solid android:color="@color/white" /> <corners android:radius="@dimen/radius" /> </shape> </item> </selector> app/src/main/res/layout/activity_splash.xml
New file @@ -0,0 +1,21 @@ <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/rel_root" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:src="@mipmap/welcom" android:scaleType="centerCrop" /> <FrameLayout android:id="@+id/splash_ad_container" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout> app/src/main/res/layout/fragment_dashboard.xml
@@ -5,7 +5,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".ui.dashboard.DashboardFragment" > tools:context=".ui.main.dashboard.DashboardFragment" > <TextView android:id="@+id/text_dashboard" app/src/main/res/layout/fragment_home.xml
@@ -5,7 +5,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".ui.home.HomeFragment" > tools:context=".ui.main.home.HomeFragment" > <TextView android:id="@+id/text_home" app/src/main/res/layout/fragment_notifications.xml
@@ -5,7 +5,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".ui.notifications.NotificationsFragment" > tools:context=".ui.main.notifications.NotificationsFragment" > <TextView android:id="@+id/text_notifications" app/src/main/res/layout/item_btn_text_with_text.xml
New file @@ -0,0 +1,74 @@ <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/bg_white" android:orientation="vertical"> <LinearLayout android:id="@+id/lin_item_text" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/bg_white" android:clickable="false" android:gravity="center_vertical" android:orientation="horizontal" > <TextView android:id="@+id/txt_left" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_vertical" android:text="标题" android:textColor="@color/black" android:textSize="17sp" /> <TextView android:id="@+id/txt_red_point" android:layout_width="20dp" android:layout_height="20dp" android:layout_marginLeft="10dp" android:background="@drawable/btn_circle_red" android:gravity="center" android:text="1" android:textColor="@color/white" android:visibility="gone"/> <RelativeLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1.0"> <TextView android:id="@+id/txt_right" android:layout_width="match_parent" android:layout_height="match_parent" android:drawablePadding="5dp" android:drawableRight="@mipmap/arrow_right" android:gravity="center_vertical|right" android:maxLines="1" android:text="" android:textColor="@color/txt_enable" android:textSize="17sp" /> <TextView android:id="@+id/txt_right_red_point" android:layout_width="10dp" android:layout_height="10dp" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="10dp" android:background="@drawable/btn_circle_red" android:visibility="gone" android:textColor="@color/white" /> </RelativeLayout> </LinearLayout> <View android:id="@+id/view_divider" android:layout_width="match_parent" android:layout_height="0.5dp" android:background="@color/color_gray" /> </LinearLayout> app/src/main/res/menu/bottom_nav_menu.xml
@@ -1,19 +1,19 @@ <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/navigation_home" android:icon="@drawable/ic_home_black_24dp" android:title="@string/title_home"/> android:id="@+id/nav_msg" android:icon="@mipmap/icon_news" android:title="资讯" /> <item android:id="@+id/navigation_dashboard" android:icon="@drawable/ic_dashboard_black_24dp" android:title="@string/title_dashboard"/> android:id="@+id/nav_service" android:icon="@mipmap/icon_home" android:title="服务" /> <item android:id="@+id/navigation_notifications" android:icon="@drawable/ic_notifications_black_24dp" android:title="@string/title_notifications"/> android:id="@+id/nav_mine" android:icon="@mipmap/icon_mine" android:title="我的" /> </menu> app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
File was deleted app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
File was deleted app/src/main/res/mipmap-hdpi/arrow_bottom_black.png
app/src/main/res/mipmap-hdpi/arrow_bottom_white.png
app/src/main/res/mipmap-hdpi/arrow_top_black.png
app/src/main/res/mipmap-hdpi/arrow_top_white.png
app/src/main/res/mipmap-hdpi/bg_seekbar_display1.png
app/src/main/res/mipmap-hdpi/bg_seekbar_display2.png
app/src/main/res/mipmap-hdpi/data_null.png
app/src/main/res/mipmap-hdpi/ic_add_black_48dp.png
app/src/main/res/mipmap-hdpi/ic_arrow_back_black_24dp.png
app/src/main/res/mipmap-hdpi/ic_arrow_back_white_24dp.png
app/src/main/res/mipmap-hdpi/ic_launcher.webpBinary files differ
app/src/main/res/mipmap-hdpi/ic_launcher_round.webpBinary files differ
app/src/main/res/mipmap-hdpi/ic_stay_primary_landscape_black_48dp.png
app/src/main/res/mipmap-hdpi/ic_stay_primary_portrait_black_48dp.png
app/src/main/res/mipmap-hdpi/icon_delete.png
app/src/main/res/mipmap-hdpi/icon_more_hor_black.png
app/src/main/res/mipmap-hdpi/icon_more_hor_white.png
app/src/main/res/mipmap-hdpi/icon_more_vert_black.png
app/src/main/res/mipmap-hdpi/icon_more_vert_white.png
app/src/main/res/mipmap-hdpi/icon_seekbar_thumb.png
app/src/main/res/mipmap-hdpi/icon_white_mine.png
app/src/main/res/mipmap-hdpi/icon_white_setting.png
app/src/main/res/mipmap-mdpi/arrow_bottom_black.png
app/src/main/res/mipmap-mdpi/arrow_bottom_white.png
app/src/main/res/mipmap-mdpi/arrow_top_black.png
app/src/main/res/mipmap-mdpi/arrow_top_white.png
app/src/main/res/mipmap-mdpi/data_null.png
app/src/main/res/mipmap-mdpi/ic_add_black_48dp.png
app/src/main/res/mipmap-mdpi/ic_arrow_back_black_24dp.png
app/src/main/res/mipmap-mdpi/ic_arrow_back_white_24dp.png
app/src/main/res/mipmap-mdpi/ic_launcher.webpBinary files differ
app/src/main/res/mipmap-mdpi/ic_launcher_round.webpBinary files differ
app/src/main/res/mipmap-mdpi/ic_stay_primary_landscape_black_48dp.png
app/src/main/res/mipmap-mdpi/ic_stay_primary_portrait_black_48dp.png
app/src/main/res/mipmap-mdpi/icon_more_hor_black.png
app/src/main/res/mipmap-mdpi/icon_more_hor_white.png
app/src/main/res/mipmap-mdpi/icon_more_vert_black.png
app/src/main/res/mipmap-mdpi/icon_more_vert_white.png
app/src/main/res/mipmap-mdpi/icon_white_mine.png
app/src/main/res/mipmap-mdpi/icon_white_setting.png
app/src/main/res/mipmap-xhdpi/alipay.png
app/src/main/res/mipmap-xhdpi/arrow_bottom_black.png
app/src/main/res/mipmap-xhdpi/arrow_bottom_white.png
app/src/main/res/mipmap-xhdpi/arrow_right.png
app/src/main/res/mipmap-xhdpi/arrow_top_black.png
app/src/main/res/mipmap-xhdpi/arrow_top_white.png
app/src/main/res/mipmap-xhdpi/birth.png
app/src/main/res/mipmap-xhdpi/coin.png
app/src/main/res/mipmap-xhdpi/coin_d.png
app/src/main/res/mipmap-xhdpi/data_null.png
app/src/main/res/mipmap-xhdpi/default_head.png
app/src/main/res/mipmap-xhdpi/ic_add_black_48dp.png
app/src/main/res/mipmap-xhdpi/ic_arrow_back_black_24dp.png
app/src/main/res/mipmap-xhdpi/ic_arrow_back_white_24dp.png
app/src/main/res/mipmap-xhdpi/ic_delete.png
app/src/main/res/mipmap-xhdpi/ic_launcher.webpBinary files differ
app/src/main/res/mipmap-xhdpi/ic_launcher_round.webpBinary files differ
app/src/main/res/mipmap-xhdpi/ic_stay_primary_landscape_black_48dp.png
app/src/main/res/mipmap-xhdpi/ic_stay_primary_portrait_black_48dp.png
app/src/main/res/mipmap-xhdpi/icon_coin.png
app/src/main/res/mipmap-xhdpi/icon_delete.png
app/src/main/res/mipmap-xhdpi/icon_more_hor_black.png
app/src/main/res/mipmap-xhdpi/icon_more_hor_white.png
app/src/main/res/mipmap-xhdpi/icon_more_vert_black.png
app/src/main/res/mipmap-xhdpi/icon_more_vert_white.png
app/src/main/res/mipmap-xhdpi/icon_white_back.png
app/src/main/res/mipmap-xhdpi/icon_white_mine.png
app/src/main/res/mipmap-xhdpi/icon_white_setting.png
app/src/main/res/mipmap-xhdpi/location_dark.png
app/src/main/res/mipmap-xhdpi/location_e.png
app/src/main/res/mipmap-xhdpi/select.png
app/src/main/res/mipmap-xhdpi/selected.png
app/src/main/res/mipmap-xhdpi/sign.png
app/src/main/res/mipmap-xhdpi/top_left_e.png
app/src/main/res/mipmap-xhdpi/top_left_g.png
app/src/main/res/mipmap-xhdpi/top_right_e.png
app/src/main/res/mipmap-xhdpi/top_right_g.png
app/src/main/res/mipmap-xhdpi/user_back.png
app/src/main/res/mipmap-xhdpi/weipay.png
app/src/main/res/mipmap-xxhdpi/alipay.png
app/src/main/res/mipmap-xxhdpi/app_icon.png
app/src/main/res/mipmap-xxhdpi/arrow_bottom_black.png
app/src/main/res/mipmap-xxhdpi/arrow_bottom_white.png
app/src/main/res/mipmap-xxhdpi/arrow_right.png
app/src/main/res/mipmap-xxhdpi/arrow_top_black.png
app/src/main/res/mipmap-xxhdpi/arrow_top_white.png
app/src/main/res/mipmap-xxhdpi/bg_bozhong.jpg
app/src/main/res/mipmap-xxhdpi/bg_uav.jpg
app/src/main/res/mipmap-xxhdpi/bg_xiaomai.jpg
app/src/main/res/mipmap-xxhdpi/bg_yumi.jpg
app/src/main/res/mipmap-xxhdpi/birth.png
app/src/main/res/mipmap-xxhdpi/data_null.png
app/src/main/res/mipmap-xxhdpi/default_head.png
app/src/main/res/mipmap-xxhdpi/female.png
app/src/main/res/mipmap-xxhdpi/ic_add_black_48dp.png
app/src/main/res/mipmap-xxhdpi/ic_arrow_back_black_24dp.png
app/src/main/res/mipmap-xxhdpi/ic_arrow_back_white_24dp.png
app/src/main/res/mipmap-xxhdpi/ic_launcher.webpBinary files differ
app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webpBinary files differ
app/src/main/res/mipmap-xxhdpi/ic_stay_primary_landscape_black_48dp.png
app/src/main/res/mipmap-xxhdpi/ic_stay_primary_portrait_black_48dp.png
app/src/main/res/mipmap-xxhdpi/icon_coin.png
app/src/main/res/mipmap-xxhdpi/icon_more_hor_black.png
app/src/main/res/mipmap-xxhdpi/icon_more_hor_white.png
app/src/main/res/mipmap-xxhdpi/icon_more_vert_black.png
app/src/main/res/mipmap-xxhdpi/icon_more_vert_white.png
app/src/main/res/mipmap-xxhdpi/icon_white_back.png
app/src/main/res/mipmap-xxhdpi/icon_white_mine.png
app/src/main/res/mipmap-xxhdpi/icon_white_setting.png
app/src/main/res/mipmap-xxhdpi/location_dark.png
app/src/main/res/mipmap-xxhdpi/location_e.png
app/src/main/res/mipmap-xxhdpi/male.png
app/src/main/res/mipmap-xxhdpi/select.png
app/src/main/res/mipmap-xxhdpi/selected.png
app/src/main/res/mipmap-xxhdpi/sign.png
app/src/main/res/mipmap-xxhdpi/top_left_g.png
app/src/main/res/mipmap-xxhdpi/top_right_e.png
app/src/main/res/mipmap-xxhdpi/weipay.png
app/src/main/res/mipmap-xxxhdpi/alipay.png
app/src/main/res/mipmap-xxxhdpi/arrow_bottom_black.png
app/src/main/res/mipmap-xxxhdpi/arrow_bottom_white.png
app/src/main/res/mipmap-xxxhdpi/arrow_right.png
app/src/main/res/mipmap-xxxhdpi/arrow_top_black.png
app/src/main/res/mipmap-xxxhdpi/arrow_top_white.png
app/src/main/res/mipmap-xxxhdpi/birth.png
app/src/main/res/mipmap-xxxhdpi/data_null.png
app/src/main/res/mipmap-xxxhdpi/default_head.png
app/src/main/res/mipmap-xxxhdpi/female.png
app/src/main/res/mipmap-xxxhdpi/ic_add_black_48dp.png
app/src/main/res/mipmap-xxxhdpi/ic_launcher.webpBinary files differ
app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webpBinary files differ
app/src/main/res/mipmap-xxxhdpi/ic_stay_primary_landscape_black_48dp.png
app/src/main/res/mipmap-xxxhdpi/ic_stay_primary_portrait_black_48dp.png
app/src/main/res/mipmap-xxxhdpi/icon_coin.png
app/src/main/res/mipmap-xxxhdpi/icon_home.png
app/src/main/res/mipmap-xxxhdpi/icon_mine.png
app/src/main/res/mipmap-xxxhdpi/icon_more_hor_black.png
app/src/main/res/mipmap-xxxhdpi/icon_more_hor_white.png
app/src/main/res/mipmap-xxxhdpi/icon_more_vert_black.png
app/src/main/res/mipmap-xxxhdpi/icon_more_vert_white.png
app/src/main/res/mipmap-xxxhdpi/icon_news.png
app/src/main/res/mipmap-xxxhdpi/icon_white_back.png
app/src/main/res/mipmap-xxxhdpi/icon_white_mine.png
app/src/main/res/mipmap-xxxhdpi/icon_white_setting.png
app/src/main/res/mipmap-xxxhdpi/location_dark.png
app/src/main/res/mipmap-xxxhdpi/location_e.png
app/src/main/res/mipmap-xxxhdpi/male.png
app/src/main/res/mipmap-xxxhdpi/select.png
app/src/main/res/mipmap-xxxhdpi/selected.png
app/src/main/res/mipmap-xxxhdpi/top_left_g.png
app/src/main/res/mipmap-xxxhdpi/top_right_e.png
app/src/main/res/mipmap-xxxhdpi/weipay.png
app/src/main/res/mipmap-xxxhdpi/welcom.png
app/src/main/res/navigation/mobile_navigation.xml
@@ -7,19 +7,19 @@ <fragment android:id="@+id/navigation_home" android:name="com.runt.open.mvvm.ui.home.HomeFragment" android:name="com.runt.open.mvvm.ui.main.home.HomeFragment" android:label="@string/title_home" tools:layout="@layout/fragment_home" /> <fragment android:id="@+id/navigation_dashboard" android:name="com.runt.open.mvvm.ui.dashboard.DashboardFragment" android:name="com.runt.open.mvvm.ui.main.dashboard.DashboardFragment" android:label="@string/title_dashboard" tools:layout="@layout/fragment_dashboard" /> <fragment android:id="@+id/navigation_notifications" android:name="com.runt.open.mvvm.ui.notifications.NotificationsFragment" android:name="com.runt.open.mvvm.ui.main.notifications.NotificationsFragment" android:label="@string/title_notifications" tools:layout="@layout/fragment_notifications" /> </navigation> app/src/main/res/values/colors.xml
@@ -1,5 +1,105 @@ <?xml version="1.0" encoding="utf-8"?> <resources> <color name="colorPrimary">@color/theme_color</color> <color name="colorPrimaryDark">#17B4A0</color> <color name="colorAccent">#D81B60</color> <color name="theme_color">#3475F8</color> <color name="theme_tint_color">#A7C3FA</color> <color name="press_color">#8B8C8D</color> <color name="enable_color">#646161</color> <color name="enable_txt_color">#D5D2D2</color> <color name="txt_color">#2C2C2C</color> <color name="txt_cusor_color">#FFFFFF</color> <color name="shade_color">#F0F0F0</color> <color name="btn_login_normal">@color/theme</color> <color name="btn_logout_normal">#d33f3f</color> <color name="btn_logout_pressed">#DA5A4D</color> <color name="btn_register_normal">#ffffff</color> <color name="btn_register_pressed">@color/theme</color> <color name="common_bottom_bar_normal_bg">#2d2f31</color> <color name="common_bottom_bar_selected_bg">#161718</color> <color name="common_botton_bar_blue">#2ea7e0</color> <color name="common_bg">#fcfcfc</color> <color name="btn_pressed_green_solid">#B6DA53</color> <color name="divider_list">#d4d4d4</color> <color name="top_bar_normal_bg">@color/theme</color> <color name="error_item_color">#F6EBE6</color> <color name="bottom_bar_normal_bg">#2D2F31</color> <color name="bottom_text_color_normal">#ffffff</color> <color name="btn_white_normal">#f7f8f8</color> <color name="btn_white_pressed">#b5b5b6</color> <color name="btn_green_noraml">#68C270</color> <color name="btn_green_pressed">#6FCD78</color> <color name="btn_gray_normal">#c0c0c0</color> <color name="btn_gray_pressed_status">#b5b5b6</color> <color name="btn_gray_pressed">#666667</color> <color name="btn_blue_normal">#1e90ff</color> <color name="btn_blue_pressed">#0066FF</color> <color name="blue_sky">#34a2ff</color> <color name="color_blue">#5070b2</color> <color name="orange">#FFA500</color> <color name="gray_pressed">#b5b5b6</color> <color name="gray_normal">#666667</color> <color name="grid_state_pressed">#1Affffff</color> <color name="grid_state_focused">#80000000</color> <color name="voip_interface_text_color">#bababa</color> <color name="black_deep">#FF000000</color> <color name="btn_answer_pressed">#4ebcd3</color> <color name="btn_answer_normal">#2dafa3</color> <color name="list_item_secondary_color">#888888</color> <color name="list_item_primary_color">#000</color> <color name="holo_blue_bright">#ff00ddff</color> <color name="holo_green_light">#ff99cc00</color> <color name="holo_orange_light">#ffffbb33</color> <color name="holo_red_light">#ffff4444</color> <color name="holo_black">#ff111111</color> <color name="bg_tools_panel">#2F2F2F</color> <color name="color_transparent">#00000000</color> <color name="em_blue">#1E88E5</color> <color name="em_blue_pressed">#0000aF</color> <color name="em_indicator_select">#9E9E9E</color> <color name="em_indicator_normal">#1AFFFFFF</color> <color name="btn_normal">@color/theme</color> <color name="btn_press">#03a687</color> <color name="anv_normal">#FFBDBEC0</color> <color name="transparent">#00000000</color> <color name="err">#f90c10</color> <color name="green">#06ae3b</color> <color name="theme">#3D71E5</color> <color name="link">@color/theme</color> <color name="deep_blue">#0864ce</color> <color name="txt_enable">#9D9D9D</color> <color name="cut_off_line">#DDDDDD</color> <color name="cut_off_circle">#A4A4A4</color> <color name="txt_normal">#333333</color> <color name="txt_hint">#F9FAFC</color> <color name="input_bg">#F9FAFC</color> <color name="background_color">#f7f7f7</color> <color name="color_gray">#e6ebee</color> <color name="color_gray8">#e6e6e6</color> <color name="ske_blue">#34a7ff</color> <color name="gold">#ffba02</color> <color name="sign_today">#ff6b6a</color> <color name="black_10">#1A000000</color> <color name="black_20">#43000000</color> <color name="bottom_menu_btn_bg_common_color">#FFFFFF</color> <color name="bottom_menu_btn_bg_press_color">#EEEEEE</color> <color name="bottom_menu_btn_text_commom_color">#5B729A</color> <color name="bottom_menu_btn_text_press_colot">#3F51B5</color> <color name="bottom_menu_btn_text_stress_color">#FF0000</color> <color name="bottom_menu_layout_color">#00000000</color> <color name="teal_700">#FF018786</color> <color name="black">#FF000000</color> <color name="black_4">#373737</color> @@ -15,5 +115,11 @@ <color name="enable_sky">#889DB6</color> <color name="deep_sky">#4184D6</color> <color name="sky">#509CFA</color> <color name="gold">#FAD550</color> <color name="main_bg">#1C2250</color> <color name="color_pink">#E45CB0</color> <color name="color_prog">#52E5C7</color> <color name="trans_blue">#62B8F6</color> <color name="ui_content">#fff8f8f8</color> <color name="cameralist_gray">#e3e3e3</color> <color name="corsor_color">#adadad</color> </resources> app/src/main/res/values/dimens.xml
@@ -1,9 +1,48 @@ <resources> <!-- Default screen margins, per the Android Design guidelines. --> <dimen name="activity_horizontal_margin">16dp</dimen> <dimen name="activity_vertical_margin">16dp</dimen> <dimen name="small_radios">3dp</dimen> <dimen name="circle">1000dp</dimen> <dimen name="radios">10dp</dimen> <dimen name="frame_margin_lr">10dp</dimen> <!-- 间距 --> <dimen name="activity_title_bar_height">45dp</dimen> <dimen name="btn_top_buttom_padding">10dp</dimen> <dimen name="edit_text_padding">12dp</dimen> <!-- titleBar或底部栏分割线高度 --> <dimen name="bar_divider_height">4dp</dimen> <!-- 字体 --> <dimen name="top_bar_title_size">18sp</dimen> <dimen name="normal_text_size">16sp</dimen> <dimen name="small_text_size">14sp</dimen> <dimen name="smaller_text_size">12sp</dimen> <dimen name="activity_horizontal_margin">10dp</dimen> <dimen name="activity_vertical_margin">10dp</dimen> <dimen name="normal_margin">5dp</dimen> <dimen name="large_margin">15dp</dimen> <dimen name="normal_padding">10dp</dimen> <dimen name="radius">10dp</dimen> <dimen name="title_height">47dp</dimen> <dimen name="pt_title_height">27pt</dimen> <dimen name="title_size">16sp</dimen> <dimen name="txt_small_size">12sp</dimen> <dimen name="txt_size">12sp</dimen> <dimen name="tab_icon_width">22dp</dimen> <dimen name="tab_icon_height">22dp</dimen> <dimen name="edit_height">40dp</dimen> <dimen name="circle">1000dp</dimen> <dimen name="corner">10dp</dimen> <dimen name="edit_corner">3dp</dimen> <dimen name="pageLeftPadding">20dp</dimen> <dimen name="pic_size">150dp</dimen> <dimen name="sign_text_size">12sp</dimen> <dimen name="sign_text_margin">12dp</dimen> <dimen name="text_padding_left">15dp</dimen> <!-- 间距 --> <dimen name="default_margin_lr">27dp</dimen> <dimen name="default_margin_td">12dp</dimen> </resources> app/src/main/res/values/styles.xml
@@ -12,4 +12,55 @@ <attr name="rightTextSize" format="dimension" /> <attr name="rightTextColor" format="color" /> </declare-styleable> <declare-styleable name="LinearLayoutWithText"> <attr name="linbackgroundColor" format="color" /> <attr name="text_title" format="string" /> <attr name="text_titleColor" format="color"/> <attr name="text_right" format="string"/> <attr name="hint_right" format="string" /> <attr name="hint_title" format="string" /> <attr name="text_rightColor" format="color"/> <attr name="divider_visible"> <enum name="visible" value="0" /> <enum name="invisible" value="4" /> <enum name="gone" value="8" /> </attr> <attr name="img_visible"> <enum name="visible" value="0" /> <enum name="invisible" value="4" /> <enum name="gone" value="8" /> </attr> <attr name="text_rightSize" format="integer"/> <attr name="text_titleSize" format="integer"/> <attr name="red_poit_count" format="integer"/> <attr name="paddingLeft" format="dimension" /> <attr name="paddingRight" format="dimension" /> <attr name="paddingTop" format="dimension" /> <attr name="paddingBottom" format="dimension" /> <attr name="padding" format="dimension" /> <attr name="hint_titleColor" format="color"/> <attr name="hint_rightColor" format="color"/> <attr name="leftCompoundDrawable" format="reference" /> <attr name="leftCompoundDrawableSize" format="integer"/> <attr name="rightCompoundDrawable" format="reference" /> <attr name="enable" format="boolean" /> </declare-styleable> <declare-styleable name="CircleImageView"> <attr name="border_width" format="dimension" /> <attr name="border_color" format="color" /> </declare-styleable> <style name="txt_normal"> <item name="android:layout_width">wrap_content</item> <item name="android:layout_height">wrap_content</item> <item name="android:textSize">@dimen/normal_text_size</item> <item name="android:textColor">@color/txt_color</item> </style> <style name="TransparentDialog" parent="Theme.AppCompat.Dialog"> <item name="android:windowBackground">@color/transparent</item> </style> </resources> app/src/main/res/values/themes.xml
@@ -13,4 +13,6 @@ <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item> <!-- Customize your theme here. --> </style> </resources> settings.gradle
@@ -4,6 +4,8 @@ google() mavenCentral() jcenter() // Warning: this repository is going to shut down soon maven { url 'https://artifact.bytedance.com/repository/pangle' } maven { url "https://jitpack.io" } } } rootProject.name = "OpemMvvm"