Commit 55cd72de authored by fengruiyu's avatar fengruiyu

Merge branch 'branche_zsf' of http://39.97.65.143:81/android/android_street

 Conflicts:
	app/src/main/AndroidManifest.xml
	app/src/main/java/com/mints/street/splash/SplashActivity.kt
	app/src/main/res/layout/activity_splash.xml
	library_base/version.properties
parents a66c5e3a b7526533
*.iml
.gradle
/local.properties
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/vcs.xml
/.idea/assetWizardSettings.xml
/.idea
.DS_Store
/build
/captures
.externalNativeBuild
.cxx
/.idea/shelf/
/library_ad/build/
/shareSdkLib/build/
3D_Street_view
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<bytecodeTargetLevel target="11" />
<bytecodeTargetLevel target="1.8" />
</component>
</project>
\ No newline at end of file
......@@ -15,9 +15,11 @@
<option value="$PROJECT_DIR$/app" />
<option value="$PROJECT_DIR$/library_base" />
<option value="$PROJECT_DIR$/mvvmhabit" />
<option value="$PROJECT_DIR$/shareSdkLib" />
</set>
</option>
<option name="resolveModulePerSourceSet" value="false" />
<option name="useQualifiedModuleNames" value="true" />
</GradleProjectSettings>
</option>
</component>
......
......@@ -5,7 +5,7 @@
<configuration PROFILE_NAME="Debug" CONFIG_NAME="Debug" />
</configurations>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
......
......@@ -3,7 +3,6 @@
<component name="RunConfigurationProducerService">
<option name="ignoredProducers">
<set>
<option value="com.android.tools.idea.compose.preview.runconfiguration.ComposePreviewRunConfigurationProducer" />
<option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />
......
......@@ -15,11 +15,20 @@ android {
versionCode rootProject.ext.android.versionCode
versionName rootProject.ext.android.versionName
//flavorDimensions "default"
flavorDimensions "default"
//多个dex
multiDexEnabled true
//配置so文件
ndk {
abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
}
manifestPlaceholders = [CHANNEL_NAME_VALUE: "street",
UMENG_KEY : RELEASE_UMENG_KEY,
SHARE_KEY : RELEASE_SHARESDK_KEY,
SHARE_SECRET : RELEASE_SHARESDK_SECRET]
}
buildFeatures{
......@@ -33,40 +42,102 @@ android {
targetCompatibility rootProject.ext.java_version["targetJavaVersion"]
}
// buildTypes {
// debug {
//
//
// //混淆
// minifyEnabled false
// zipAlignEnabled false
// shrinkResources false//打开
//
// proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
// }
// release {
//
// //混淆
// minifyEnabled true
// zipAlignEnabled true
// shrinkResources true
// //signingConfig signingConfigs.release
// proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
// }
// }
signingConfigs {
debug {
storeFile file(RELEASE_STORE_FILE)
storePassword RELEASE_STORE_PASSWORD
keyAlias RELEASE_KEY_ALIAS
keyPassword RELEASE_KEY_PASSWORD
}
release {
storeFile file(RELEASE_STORE_FILE)
storePassword RELEASE_STORE_PASSWORD
keyAlias RELEASE_KEY_ALIAS
keyPassword RELEASE_KEY_PASSWORD
}
}
buildTypes {
debug {
// 不显示Log
buildConfigField "boolean", "LOG_DEBUG", "true"
buildConfigField "String", "AppKeyPre", "\"abcd\""
buildConfigField "String", "MainIp", DEBUG_URL
//混淆
minifyEnabled false
zipAlignEnabled false
shrinkResources false//打开
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.debug
}
release {
// 不显示Log
buildConfigField "boolean", "LOG_DEBUG", "false"
buildConfigField "String", "AppKeyPre", "\"abcd\""
buildConfigField "String", "MainIp", RELEASE_URL
//混淆
minifyEnabled true
zipAlignEnabled true
shrinkResources true//打开
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
lintOptions {
//lint 遇到 error 时继续 构建
//abortOnError false
//build release 版本 时 开启lint 检测
checkReleaseBuilds false
// 防止在发布的时候出现因MissingTranslation导致Build Failed!
disable 'MissingTranslation'
}
productFlavors {
streetpkg {}
toutiao {}
}
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [CHANNEL_NAME_VALUE: name]
}
// 自定义输出配置
applicationVariants.all { variant ->
variant.outputs.all { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
outputFileName = "${variant.productFlavors[0].name}_${defaultConfig.versionName}.apk"
}
}
}
repositories {
flatDir {
dirs 'libs'
}
}
sourceSets {
main {
jniLibs.srcDir 'libs'
}
}
}
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation fileTree(include: ['*.jar'], dir: 'libs')
testImplementation rootProject.ext.support["junit"]
// implementation 'androidx.appcompat:appcompat:1.1.0'
// implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
// testImplementation 'junit:junit:4.12'
// androidTestImplementation 'androidx.test.ext:junit:1.1.1'
// androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
//下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-26'
implementation 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0-alpha-26'
......@@ -77,7 +148,31 @@ dependencies {
//util
implementation 'com.blankj:utilcodex:1.26.0'
api project(':library_base')
api project(':shareSdkLib')
// switchbutton
implementation 'com.github.iielse:switchbutton:1.0.4'
// 三方接入
// 移动安全联盟
implementation(name: 'oaid_sdk_1.0.23', ext: 'aar')
// shareSdk
implementation project(':shareSdkLib')
// 应用管理中心分包
implementation(name: 'humesdk-1.0.0', ext: 'aar')
// umeng
implementation(name: 'umeng-asms-armeabi-v1.2.2', ext: 'aar')
implementation(name: 'umeng-apm-armeabi-v1.2.0', ext: 'aar')
// 穿山甲 GroMore
// mediation_ad_sdk
implementation(name: 'mediation_ad_sdk_2.8.1.0', ext: 'aar')
implementation(name: 'gdt_adapter_4.362.1232.0', ext: 'aar')
implementation(name: 'ks_adapter_3.3.10.2.0', ext: 'aar')
// 快手
implementation(name: 'kssdk-ad-3.3.10.2', ext: 'aar')
// 穿山甲广告
implementation(name: 'open_ad_sdk_3.7.0.1', ext: 'aar')
// 广点通广告 腾讯
implementation(name: 'GDTSDK.unionNormal.4.362.1232', ext: 'aar')
}
\ No newline at end of file
This diff is collapsed.
<?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.mints.street">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<application
android:name="com.mints.street.AppApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:networkSecurityConfig="@xml/network_security_config"
android:requestLegacyExternalStorage="true"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true"
>
<activity android:name="com.mints.street.main.MainActivity">
android:usesCleartextTraffic="true">
</activity>
<activity android:name="com.mints.street.login.LoginActivity">
<uses-library
android:name="org.apache.http.legacy"
android:required="false" /> <!-- 适配小米(xiaomi)刘海屏 -->
<meta-data
android:name="android.max_aspect"
android:value="2.4"
tools:replace="android:value" />
<meta-data
android:name="android.notch_support"
android:value="true" />
<meta-data
android:name="notch.config"
android:value="portrait|landscape" /> <!-- 渠道名称 -->
<meta-data
android:name="CHANNEL_NAME"
android:value="${CHANNEL_NAME_VALUE}" /> <!-- 友盟 -->
<meta-data
android:name="UMENG_KEY"
android:value="${UMENG_KEY}" /> <!-- ShareSDK -->
<meta-data
android:name="Mob-AppKey"
android:value="${SHARE_KEY}" />
<meta-data
android:name="Mob-AppSecret"
android:value="${SHARE_SECRET}" />
</activity>
<activity android:name="com.mints.street.splash.SplashActivity">
<activity android:name="com.mints.street.splash.SplashActivity"
android:excludeFromRecents="true"
android:theme="@style/NormalSplash">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.mints.street.login.LoginActivity">
</activity>
<activity android:name="com.mints.street.main.MainActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:excludeFromRecents="true"
android:launchMode="singleTask"
android:theme="@style/AppTheme.NoneTranslucent">
</activity>
<!-- ShareSDK start -->
<activity
android:name="com.mob.tools.MobUIShell"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.mints.street.fileprovider"
android:exported="false"
android:grantUriPermissions="true"
tools:replace="android:authorities">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"
tools:replace="android:resource" />
</provider> <!-- 穿山甲广告 -->
<provider
android:name="com.bytedance.sdk.openadsdk.multipro.TTMultiProvider"
android:authorities="com.mints.street.TTMultiProvider"
android:exported="false" />
<provider
android:name="com.bytedance.sdk.openadsdk.TTFileProvider"
android:authorities="com.mints.street.TTFileProvider"
android:exported="false"
android:grantUriPermissions="true"
tools:replace="android:authorities">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"
tools:replace="android:resource" />
</provider>
<!-- 广点通广告 -->
<uses-library
android:name="org.apache.http.legacy"
android:required="false" />
<service
android:name="com.qq.e.comm.DownloadService"
android:exported="false" />
<activity
android:name="com.qq.e.ads.ADActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize" />
<activity
android:name="com.qq.e.ads.PortraitADActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:screenOrientation="portrait" />
<activity
android:name="com.qq.e.ads.LandscapeADActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:screenOrientation="landscape"
tools:replace="android:screenOrientation" />
</application>
</manifest>
\ No newline at end of file
package com.mints.street
import android.content.Context
import android.os.StrictMode
import android.os.StrictMode.VmPolicy
import android.util.Log
import com.fry.base.base.BaseApp
import com.mints.street.manager.CsjGroMoreManager
import com.mints.street.manager.UmengManager
import java.util.concurrent.TimeoutException
/**
* Created by 冯瑞雨 on 2021/7/1.
*/
class AppApplication :BaseApp() {
class AppApplication : BaseApp() {
override fun onCreate() {
super.onCreate()
mContext = this
thirdConfig()
val builder = VmPolicy.Builder()
StrictMode.setVmPolicy(builder.build())
builder.detectFileUriExposure()
......@@ -27,4 +35,23 @@ class AppApplication :BaseApp() {
}
}
/*
* 三方配置
*/
private fun thirdConfig() {
UmengManager.preInit()
// GroMore
CsjGroMoreManager.init(this)
}
companion object {
var mContext: AppApplication? = null
fun getContext(): AppApplication? {
return mContext
}
}
}
\ No newline at end of file
package com.mints.street.ad;
import android.app.Activity;
import android.content.Context;
import android.provider.Settings;
import com.bytedance.msdk.api.TTAdConfig;
import com.bytedance.msdk.api.TTAdConstant;
import com.bytedance.msdk.api.TTMediationAdSdk;
import com.bytedance.msdk.api.UserInfoForSegment;
import com.mints.street.common.Constant;
import com.mints.street.BuildConfig;
import com.mints.street.manager.CsjGroMoreManager;
import java.util.HashMap;
import java.util.Map;
/**
* 可以用一个单例来保存TTAdManager实例,在需要初始化sdk的时候调用
*/
public class TTGroMoreAdManagerHolder {
private static boolean sInit;
public static void init(Context context) {
doInit(context);
}
public static void initUnitySdkBanner(Activity activity) {
TTMediationAdSdk.initUnityForBanner(activity);
}
//step1:接入网盟广告sdk的初始化操作,详情见接入文档和穿山甲平台说明
private static void doInit(Context context) {
if (!sInit) {
TTMediationAdSdk.initialize(context, buildConfig(context));
sInit = true;
}
}
private static TTAdConfig buildConfig(Context context) {
UserInfoForSegment userInfo = new UserInfoForSegment();
Map<String, String> customInfos = new HashMap<>();
// customInfos.put("aaaa", "test111");
// customInfos.put("bbbb", "test222");
userInfo.setCustomInfos(customInfos);
return new TTAdConfig.Builder()
.appId(CsjGroMoreManager.TT_AD_APPID) //必填 ,不能为空
.appName(Constant.MINTS_APP_NAME) //必填,不能为空
.openAdnTest(false)//开启第三方ADN测试时需要设置为true,会每次重新拉去最新配置,release 包情况下必须关闭.默认false
.isPanglePaid(false)//是否为费用户
.setPublisherDid(getAndroidId(context)) //用户自定义device_id
.openDebugLog(BuildConfig.DEBUG) //测试阶段打开,可以通过日志排查问题,上线时去除该调用
.usePangleTextureView(true) //使用TextureView控件播放视频,默认为SurfaceView,当有SurfaceView冲突的场景,可以使用TextureView
.setPangleTitleBarTheme(TTAdConstant.TITLE_BAR_THEME_DARK)
.allowPangleShowNotify(true) //是否允许sdk展示通知栏提示
.allowPangleShowPageWhenScreenLock(true) //是否在锁屏场景支持展示广告落地页
.setPangleDirectDownloadNetworkType(TTAdConstant.NETWORK_STATE_WIFI, TTAdConstant.NETWORK_STATE_3G) //允许直接下载的网络状态集合
.needPangleClearTaskReset()//特殊机型过滤,部分机型出现包解析失败问题(大部分是三星)。参数取android.os.Build.MODEL
.setUserInfoForSegment(userInfo) // 设置流量分组的信息
.build();
}
public static String getAndroidId(Context context) {
String androidId = null;
try {
androidId = Settings.System.getString(context.getContentResolver(), Settings.System.ANDROID_ID);
} catch (Exception e) {
e.printStackTrace();
}
return androidId;
}
}
package com.mints.street.common
object Constant {
/**
* app名称
*/
const val MINTS_APP_NAME = "3D高清街景"
/**
* 应用包名
*/
const val MINTS_PKG_NAME = "com.mints.street"
}
This diff is collapsed.
package com.mints.street.main.my
import android.os.Bundle
import com.mints.street.databinding.ActivityAboutusBinding
import com.fry.base.base.BaseActivity
import com.mints.street.BR
import com.mints.street.R
class AboutusActivity :BaseActivity<ActivityAboutusBinding, AboutusViewModel>() {
override fun initVariableId() = BR.viewModel
override fun initContentView(savedInstanceState: Bundle?)= R.layout.activity_aboutus
}
package com.mints.street.main.my
import android.app.Application
import me.goldze.mvvmhabit.base.BaseViewModel
class AboutusViewModel(application: Application): BaseViewModel(application) {
}
\ No newline at end of file
package com.mints.street.main.my
import android.os.Bundle
import com.fry.base.base.BaseActivity
import com.mints.street.BR
import com.mints.street.R
import com.mints.street.databinding.ActivityMoresettingsBinding
class MoresettingsActivity: BaseActivity<ActivityMoresettingsBinding, MoresettingsViewModel>() {
override fun initVariableId() = BR.viewModel
override fun initContentView(savedInstanceState: Bundle?)= R.layout.activity_moresettings
}
package com.mints.street.main.my
import android.app.Application
import me.goldze.mvvmhabit.base.BaseViewModel
class MoresettingsViewModel(application: Application): BaseViewModel(application) {
}
package com.mints.street.main.my
import android.graphics.drawable.BitmapDrawable
import android.os.Bundle
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.PopupWindow
import androidx.activity.OnBackPressedCallback
import com.fry.base.base.BaseFragment
import com.mints.street.BR
import com.mints.street.R
import com.mints.street.databinding.FragmentMyBinding
import kotlinx.android.synthetic.main.fragment_my.*
/**
* Created by 冯瑞雨 on 2021/7/2.
* 个人中心页面
*/
class MyFragment : BaseFragment<FragmentMyBinding, MyViewModel>() {
class MyFragment : BaseFragment<FragmentMyBinding, MyViewModel>(), View.OnClickListener {
private var popupWindow: PopupWindow? = null
private var contentView: View? = null
override fun initContentView(inflater: LayoutInflater?,
container: ViewGroup?,
savedInstanceState: Bundle?) = R.layout.fragment_my
override fun initVariableId() = BR.viewModel
}
override fun initData() {
super.initData()
ly_aboutus.setOnClickListener(this)
ly_moresettings.setOnClickListener(this)
requireActivity().onBackPressedDispatcher.addCallback(
this,
object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
//监听到后要执行的逻辑
if (popupWindow != null && popupWindow!!.isShowing()) {
popupWindow?.dismiss();
}
}
})
}
override fun onClick(v: View?) {
when (v?.id) {
R.id.ly_aboutus -> {
startActivity(AboutusActivity::class.java)
}
R.id.ly_moresettings -> {
startActivity(MoresettingsActivity::class.java)
}
R.id.ll_my_login -> {
//这里需要加判断
showPopwindow();
}
}
}
private fun showPopwindow() {
//加载弹出框的布局
contentView = LayoutInflater.from(context).inflate(
R.layout.layout_popupwindow, null);
// 设置按钮的点击事件
popupWindow = PopupWindow(contentView,
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT)
popupWindow!!.isFocusable = true // 取得焦点
//注意 要是点击外部空白处弹框消息 那么必须给弹框设置一个背景色 不然是不起作用的
//注意 要是点击外部空白处弹框消息 那么必须给弹框设置一个背景色 不然是不起作用的
popupWindow!!.setBackgroundDrawable(BitmapDrawable())
//点击外部消失
//点击外部消失
popupWindow!!.isOutsideTouchable = true
//设置可以点击
//设置可以点击
popupWindow!!.isTouchable = true
//进入退出的动画,指定刚才定义的style
//进入退出的动画,指定刚才定义的style
popupWindow!!.animationStyle = R.style.ipopwindow_anim_style
}
fun openPopWindow(v: View?) {
//从底部显示
popupWindow!!.showAtLocation(contentView, Gravity.BOTTOM, 0, 0)
}
}
\ No newline at end of file
package com.mints.street.manager
import com.mints.street.AppApplication
import com.mints.street.ad.TTGroMoreAdManagerHolder
/**
* 穿山甲GroMore
*/
object CsjGroMoreManager {
const val TT_AD_APPID = "12345"
var AD_UNIT_SPLASH_ID = "" // 开屏
// 穿山甲id
var AD_CSJ_SPLASH_ID = "" // 开屏
fun init(application: AppApplication) {
TTGroMoreAdManagerHolder.init(application)
}
}
\ No newline at end of file
package com.mints.street.manager
import com.umeng.analytics.MobclickAgent
import com.umeng.commonsdk.UMConfigure
import com.mints.street.BuildConfig
import com.mints.street.AppApplication
import com.mints.street.utils.CommonUtils
object UmengManager {
fun preInit(){
UMConfigure.preInit(AppApplication.getContext(), CommonUtils.getAppMetaData(AppApplication.getContext(), "UMENG_KEY"),
CommonUtils.getAppMetaData(AppApplication.getContext(), "CHANNEL_NAME"))
}
/**
* 友盟初始化
*/
fun initUm() {
try {
/*
* 参数4:设备类型,必须参数,传参数为UMConfigure.DEVICE_TYPE_PHONE则表示手机;传参数为UMConfigure.DEVICE_TYPE_BOX则表示盒子;默认为手机。
* 参数5:Push推送业务的secret,需要集成Push功能时必须传入Push的secret,否则传空。
*/
UMConfigure.init(
AppApplication.getContext(),
CommonUtils.getAppMetaData(AppApplication.getContext(), "UMENG_KEY"),
CommonUtils.getAppMetaData(AppApplication.getContext(), "CHANNEL_NAME"),
UMConfigure.DEVICE_TYPE_PHONE,
""
)
UMConfigure.setLogEnabled(BuildConfig.DEBUG)
MobclickAgent.setPageCollectionMode(MobclickAgent.PageMode.LEGACY_MANUAL)
} catch (e: java.lang.Exception) {
e.printStackTrace()
}
}
}
\ No newline at end of file
package com.mints.street.splash
import android.os.Bundle
import android.widget.FrameLayout
import com.bytedance.msdk.adapter.pangle.PangleNetworkRequestInfo
import com.bytedance.msdk.api.AdError
import com.bytedance.msdk.api.AdSlot
import com.bytedance.msdk.api.TTNetworkRequestInfo
import com.bytedance.msdk.api.splash.TTSplashAd
import com.bytedance.msdk.api.splash.TTSplashAdListener
import com.bytedance.msdk.api.splash.TTSplashAdLoadCallback
import com.fry.base.base.BaseActivity
import com.mints.street.BR
import com.mints.street.R
import com.mints.street.common.DeviceInfo
import com.mints.street.databinding.ActivitySplashBinding
import com.mints.street.main.MainActivity
import com.mints.street.manager.CsjGroMoreManager
/**
* Created by 冯瑞雨 on 2021/7/5.
* 优量汇开屏页
* 描述:gromore开屏页
* 作者:孟崔广
* 时间:2021/7/9 13:39
*/
class SplashActivity:BaseActivity<ActivitySplashBinding,SplashViewModel>() {
private var mSplashContainer: FrameLayout? = null
private var mTTSplashAd: TTSplashAd? = null
private val AD_TIME_OUT = 3000
private var onPaused = false
//是否强制跳转到主页面
private var mForceGoMain = false
override fun initContentView(savedInstanceState: Bundle?) = R.layout.activity_splash
override fun initVariableId() = BR.viewModel
......@@ -24,15 +43,127 @@ class SplashActivity:BaseActivity<ActivitySplashBinding,SplashViewModel>() {
finish()
return
}
binding.bu.setOnClickListener {
startActivity(MainActivity::class.java)
}
checkAppSign()
}
override fun onResume() {
//判断是否该跳转到主页面
if (mForceGoMain) {
goToMainActivity()
}
if (onPaused ) {
// 这种情况下,百度开屏广告不能在onAdDismiss中跳转,需要自己在onResume中跳转主页。
goToMainActivity()
}
super.onResume()
}
override fun onPause() {
super.onPause()
onPaused = true
}
override fun onStop() {
super.onStop()
mForceGoMain = true
}
override fun onDestroy() {
super.onDestroy()
mTTSplashAd?.destroy()
mTTSplashAd=null
mSplashContainer?.removeAllViews()
mSplashContainer=null
}
/**
* 校验App签名
*/
private fun checkAppSign() {
val deviceInfo: DeviceInfo = DeviceInfo.instance
if (!deviceInfo.signInfo) {
finish()
} else {
try {
mSplashContainer = findViewById(R.id.splash_container)
//加载开屏广告
loadSplashAd()
} catch (e: Exception) {
goToMainActivity()
}
}
}
/**
* 加载开屏广告
*/
private fun loadSplashAd() {
/**
* 注:每次加载开屏广告的时候需要新建一个TTSplashAd,否则可能会出现广告填充问题
* ( 例如:mTTSplashAd = new TTSplashAd(this, mAdUnitId);)
*/
mTTSplashAd = TTSplashAd(this, CsjGroMoreManager.AD_UNIT_SPLASH_ID)
mTTSplashAd?.setTTAdSplashListener(mSplashAdListener)
//step3:创建开屏广告请求参数AdSlot,具体参数含义参考文档
val adSlot = AdSlot.Builder()
.setImageAdSize(1080, 1920) // 既适用于原生类型,也适用于模版类型。
.build()
//自定义兜底方案 选择使用
val ttNetworkRequestInfo: TTNetworkRequestInfo
//穿山甲兜底
ttNetworkRequestInfo = PangleNetworkRequestInfo(CsjGroMoreManager.TT_AD_APPID,CsjGroMoreManager.AD_CSJ_SPLASH_ID)
//step4:请求广告,调用开屏广告异步请求接口,对请求回调的广告作渲染处理
mTTSplashAd?.loadAd(adSlot, ttNetworkRequestInfo, object : TTSplashAdLoadCallback {
// mTTSplashAd.loadAd(adSlot, new TTSplashAdLoadCallback() {
override fun onSplashAdLoadFail(adError: AdError) {
goToMainActivity()
}
override fun onSplashAdLoadSuccess() {
if (mTTSplashAd != null) {
mTTSplashAd!!.showAd(mSplashContainer)
}
}
override fun onAdLoadTimeout() {
goToMainActivity()
}
}, AD_TIME_OUT)
}
var mSplashAdListener: TTSplashAdListener = object : TTSplashAdListener {
override fun onAdClicked() {
}
override fun onAdShow() {
}
override fun onAdSkip() {
goToMainActivity()
}
override fun onAdDismiss() {
if (onPaused) {
// 这种情况下,百度开屏广告不能在onAdDismiss中跳转,需要在onResume中跳转主页。
return
}
goToMainActivity()
}
}
/**
* 跳转到主页面
*/
private fun goToMainActivity() {
startActivityThenKill(MainActivity::class.java)
}
}
\ No newline at end of file
/*
* Copyright (c) 2015 [1076559197@qq.com | tchen0707@gmail.com]
*
* Licensed under the Apache License, Version 2.0 (the "License”);
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.mints.street.utils;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.res.TypedArray;
import android.text.InputFilter;
import android.text.Spanned;
import android.text.TextUtils;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 描述:CommonUtils
* 作者:孟崔广
* 时间:2018/1/10 17:51
* 邮箱:mengcga@163.com
*/
public class CommonUtils {
/**
* return if str is empty
*
* @param str
* @return
*/
public static boolean isEmpty(String str) {
if (str == null || str.length() == 0 || str.equalsIgnoreCase("null") || str.isEmpty() || str.equals("")) {
return true;
} else {
return false;
}
}
/**
* decode Unicode string
*
* @param s
* @return
*/
public static String decodeUnicodeStr(String s) {
StringBuilder sb = new StringBuilder(s.length());
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i++) {
char c = chars[i];
if (c == '\\' && chars[i + 1] == 'u') {
char cc = 0;
for (int j = 0; j < 4; j++) {
char ch = Character.toLowerCase(chars[i + 2 + j]);
if ('0' <= ch && ch <= '9' || 'a' <= ch && ch <= 'f') {
cc |= (Character.digit(ch, 16) << (3 - j) * 4);
} else {
cc = 0;
break;
}
}
if (cc > 0) {
i += 5;
sb.append(cc);
continue;
}
}
sb.append(c);
}
return sb.toString();
}
/**
* encode Unicode string
*
* @param s
* @return
*/
public static String encodeUnicodeStr(String s) {
StringBuilder sb = new StringBuilder(s.length() * 3);
for (char c : s.toCharArray()) {
if (c < 256) {
sb.append(c);
} else {
sb.append("\\u");
sb.append(Character.forDigit((c >>> 12) & 0xf, 16));
sb.append(Character.forDigit((c >>> 8) & 0xf, 16));
sb.append(Character.forDigit((c >>> 4) & 0xf, 16));
sb.append(Character.forDigit((c) & 0xf, 16));
}
}
return sb.toString();
}
/**
* convert time str
*
* @param time
* @return
*/
public static String convertTime(int time) {
time /= 1000;
int minute = time / 60;
int second = time % 60;
minute %= 60;
return String.format("%02d:%02d", minute, second);
}
/**
* url is usable
*
* @param url
* @return
*/
public static boolean isUrlUsable(String url) {
URL urlTemp = null;
HttpURLConnection connt = null;
try {
urlTemp = new URL(url);
connt = (HttpURLConnection) urlTemp.openConnection();
connt.setRequestMethod("HEAD");
int returnCode = connt.getResponseCode();
if (returnCode == HttpURLConnection.HTTP_OK) {
return true;
}
} catch (Exception e) {
return false;
} finally {
if (connt != null) {
connt.disconnect();
}
}
return false;
}
/**
* is url
*
* @param url
* @return
*/
public static boolean isUrl(String url) {
Pattern pattern = Pattern.compile("^([hH][tT]{2}[pP]://|[hH][tT]{2}[pP][sS]://)(([A-Za-z0-9-~]+).)+([A-Za-z0-9-~\\/])+$");
return pattern.matcher(url).matches();
}
/**
* get toolbar height
*
* @param context
* @return
*/
public static int getToolbarHeight(Context context) {
final TypedArray styledAttributes = context.getTheme().obtainStyledAttributes(
new int[]{android.R.attr.actionBarSize});
int toolbarHeight = (int) styledAttributes.getDimension(0, 0);
styledAttributes.recycle();
return toolbarHeight;
}
/**
* Using regular expressions
*
* @param regular
* @param value
* @return
*/
public static boolean getConformToRegular(String regular, String value) {
boolean flag = false;
if (!TextUtils.isEmpty(regular) && !TextUtils.isEmpty(value)) {
Pattern p = Pattern.compile(regular);
Matcher m = p.matcher(value);
flag = m.matches();
}
return flag;
}
/**
* 禁止输入emoji
*/
public static InputFilter emojiFilter = new InputFilter() {
Pattern emoji = Pattern.compile(
"[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]",
Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE);
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest,
int dstart,
int dend) {
Matcher emojiMatcher = emoji.matcher(source);
if (emojiMatcher.find()) {
return "";
}
return null;
}
};
/**
* 获取application中指定的meta-data
*
* @return 如果没有获取成功(没有对应值 , 或者异常),则返回值为空
*/
public static String getAppMetaData(Context ctx, String key) {
if (ctx == null || TextUtils.isEmpty(key)) {
return null;
}
String resultData = null;
try {
PackageManager packageManager = ctx.getPackageManager();
if (packageManager != null) {
ApplicationInfo applicationInfo = packageManager.getApplicationInfo(ctx.getPackageName(), PackageManager.GET_META_DATA);
if (applicationInfo != null) {
if (applicationInfo.metaData != null) {
resultData = applicationInfo.metaData.getString(key);
}
}
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
return "";
}
return resultData;
}
public static String formatString(String str) {
if (str.contains(".")) {
String[] array = str.split("\\.");
String str0 = array[0];
String str1 = array[1];
if (str0.length() <= 3) {
return str0 + "." + str1;
} else {
return formatString(str0.substring(0, str0.length() - 3)) + ',' + str0.substring(str0.length() - 3) + "." + str1;
}
} else {
if (str.length() <= 3) {
return str;
} else {
return formatString(str.substring(0, str.length() - 3)) + ',' + str.substring(str.length() - 3);
}
}
}
}
package com.mints.street.utils;
import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.provider.Settings;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.core.app.ActivityCompat;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
/**
* Desction:授权工具类
* Author:孟崔广
*/
public class PermissionUtils {
public static final int CODE_PERMISSIONS = 123;
public interface PermissionGrant {
/**
* 处理结果
*
* @param requestCode 请求码
* @param permissions 本次授权权限列表
* @param grantResults 本次授权结果,0:授权成功 -1:拒绝授权
* @param requestPermissions 请求所有权限
*/
void onPermissionGranted(final int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults, String[] requestPermissions);
}
private static void showMessageOKCancel(final Activity context, String message, DialogInterface.OnClickListener okListener, DialogInterface.OnClickListener cancelListener) {
new AlertDialog.Builder(context)
.setMessage(message)
.setPositiveButton("是", okListener)
.setNegativeButton("否", cancelListener)
.create()
.show();
}
/**
* 跳转到系统设置界面去开启权限
*
* @param activity
* @param message
*/
private static void openSettingActivity(final Activity activity, String message) {
showMessageOKCancel(activity, message, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", activity.getPackageName(), null);
intent.setData(uri);
activity.startActivity(intent);
}
}, null);
}
/////////////////////////////////执行授权/////////////////////////////////////
/**
* 一次申请多个权限
*
* @param activity
* @param grant
*/
public static void requestMultiPermissions(final Activity activity, final String[] requestPermissions, final PermissionGrant grant) {
//获取没有授权的权限
final List<String> permissionsList = getNoGrantedPermission(activity, requestPermissions, false);
//获取上次被拒权限列表
final List<String> shouldRationalePermissionsList = getNoGrantedPermission(activity, requestPermissions, true);
if (permissionsList == null || shouldRationalePermissionsList == null) {
return;
}
final int[] grantResults = new int[requestPermissions.length];
if (permissionsList.size() > 0) {//去授权
ActivityCompat.requestPermissions(activity, permissionsList.toArray(new String[permissionsList.size()]), CODE_PERMISSIONS);
} else if (shouldRationalePermissionsList.size() > 0) {
showMessageOKCancel(activity, "应用缺少权限,是否重新去授权?",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ActivityCompat.requestPermissions(activity, shouldRationalePermissionsList.toArray(new String[shouldRationalePermissionsList.size()]),
CODE_PERMISSIONS);
}
}, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
grant.onPermissionGranted(CODE_PERMISSIONS, requestPermissions, grantResults, requestPermissions);
}
});
} else {
grant.onPermissionGranted(CODE_PERMISSIONS, requestPermissions, grantResults, requestPermissions);
}
}
private static ArrayList<String> getNoGrantedPermission(Activity activity, String[] requestPermissions, boolean isShouldRationale) {
ArrayList<String> permissions = new ArrayList<>();
for (int i = 0; i < requestPermissions.length; i++) {
String requestPermission = requestPermissions[i];
int checkSelfPermission = -1;
try {
checkSelfPermission = ActivityCompat.checkSelfPermission(activity, requestPermission);
} catch (RuntimeException e) {
return null;
}
if (checkSelfPermission != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(activity, requestPermission)) {
if (isShouldRationale) {
permissions.add(requestPermission);
}
} else {
if (!isShouldRationale) {
permissions.add(requestPermission);
}
}
}
}
return permissions;
}
/////////////////////////////////处理授权结果/////////////////////////////////////
/**
* 处理授权
*
* @param requestCode Need consistent with requestPermission
* @param permissions
* @param grantResults
*/
public static void requestPermissionsResult(final int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults, String[] requestPermissions, PermissionGrant permissionGrant) {
if (requestCode == CODE_PERMISSIONS) {
permissionGrant.onPermissionGranted(requestCode, permissions, grantResults, requestPermissions);
return;
}
}
/////////////////////////////////处理授权结果/////////////////////////////////////
public static boolean checkPermission(Context paramContext, String paramString) {
boolean bool = false;
if (paramContext == null) {
return false;
} else {
if (Build.VERSION.SDK_INT >= 23) {
try {
Class localClass = Class.forName("android.content.Context");
Method localMethod = localClass.getMethod("checkSelfPermission", String.class);
int i = (Integer)localMethod.invoke(paramContext, paramString);
bool = i == 0;
} catch (Throwable var6) {
bool = false;
}
} else {
PackageManager localPackageManager = paramContext.getPackageManager();
if (localPackageManager.checkPermission(paramString, paramContext.getPackageName()) == 0) {
bool = true;
}
}
return bool;
}
}
}
This diff is collapsed.
This diff is collapsed.
package com.mints.street.utils
import android.app.ActivityManager
import android.content.Context
import android.os.Environment
import android.os.StatFs
import java.io.BufferedReader
import java.io.File
import java.io.FileReader
import java.io.IOException
import kotlin.math.ceil
object SystemUtils {
/**
* 该方法必须在Activity或Service类内调用,一般情况下,可以在Activity的onCreate()方法中调用。
* 由于应用每启动一个新的进程,就会调用一次Application的onCreate()方法,而个推SDK是一个独立的进程
* ,因此如果在Application的onCreate()中调用intialize接口,会导致SDK初始化在一个应用中多次调用,
* 所以不建议在Application继承类中调用个推SDK初始化接口。
* 解释一下,每个[Android](http://lib.csdn.net/base/android "Android知识库")应用都要运行在一个虚拟机上,
* ”个推“采用Service和后台服务器通信进行通信,于是和原本的Activity就形成了多进程。
* 一个前台的应用进程,一个service后台进程,每个进程对应一个application对象,所以当应用配置了多个进程的时候,
* application对象的onCreate方法就会执行多次,所以为了保证只初始化一次,
* 就必须做出区分的处理的(“个推”中提到的在Activity或Service中初始,这种做法个人认为也是存在多次初始化的风险的);
* 进程名是通过Manifest.xml中的"android:process"属性设置的,因此可以在application的onCreate方法中通过pid获取processName,
* 再做进一步的判断(跟android:process的值进行判断)使得相关初始化代码仅执行一次。
*/
fun getProcessName(cxt: Context, pid: Int): String? {
val am: ActivityManager = cxt.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
val runningApps: List<ActivityManager.RunningAppProcessInfo> =
am.runningAppProcesses
?: return null
for (procInfo in runningApps) {
if (procInfo.pid == pid) {
return procInfo.processName
}
}
return null
}
/**
* ram
*/
fun getTotalMemory(): String {
// 系统内存信息文件
val file = "/proc/meminfo"
val memInfo: String
val strs: Array<String>
var memory: Long = 0
try {
val fileReader = FileReader(file)
val bufferedReader = BufferedReader(
fileReader,
8192
)
// 读取meminfo第一行,系统内存大小
memInfo = bufferedReader.readLine()
strs = memInfo.split("\\s+".toRegex()).toTypedArray()
// 获得系统总内存,单位KB
memory = Integer.valueOf(strs[1]).toLong()
bufferedReader.close()
} catch (e: Exception) {
e.printStackTrace()
}
return "" + ceil((memory.toFloat() / (1024 * 1024).toDouble())).toInt() + "GB"
}
/**
* 获取手机内部空间总大小
*
* @return 大小,字节为单位
*/
fun getTotalInternalMemorySize(): String {
//获取内部存储根目录
val path: File = Environment.getExternalStorageDirectory()
//系统的空间描述类
val stat = StatFs(path.absolutePath)
//每个区块占字节数
val totalSize = stat.totalBytes
return "" + ceil((totalSize.toFloat() / (1024 * 1024 * 1024).toDouble())).toInt() + "GB"
}
/**
* 描述:获取内存占用率.
*/
fun getUsedPercentValue(context: Context?): Int {
val dir = "/proc/meminfo"
try {
val fr = FileReader(dir)
val br = BufferedReader(fr, 8192)
val memoryTotalLine = br.readLine()
val subMemoryLine = memoryTotalLine.substring(memoryTotalLine.indexOf("MemTotal:"))
/** KB 计量单位 */
br.close()
val totalMemorySize = subMemoryLine.replace("\\D+".toRegex(), "").toLong() * 1024
val availableSize: Long = getAvailMemory(context)
return (((totalMemorySize - availableSize) / totalMemorySize.toFloat()) * 100).toInt()
} catch (e: IOException) {
e.printStackTrace()
}
return -1
}
/**
* 描述:获取可用内存.
*/
fun getAvailMemory(context: Context?): Long {
// 获取android当前可用内存大小
val activityManager = context?.getSystemService(
Context.ACTIVITY_SERVICE
) as ActivityManager
val memoryInfo =
ActivityManager.MemoryInfo()
activityManager.getMemoryInfo(memoryInfo)
// 当前系统可用内存 ,将获得的内存大小规格化
return memoryInfo.availMem
}
}
\ No newline at end of file
package com.mints.street.utils.json;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* 描述:FooAnnotation
* 作者:孟崔广
* 时间:2018/1/10 17:51
* 邮箱:mengcga@163.com
*/
@Retention(RetentionPolicy.RUNTIME)
public @interface FooAnnotation {
}
package com.mints.street.utils.json;
import com.google.gson.ExclusionStrategy;
import com.google.gson.FieldAttributes;
/**
* 描述:FooAnnotationExclusionStrategy
* 作者:孟崔广
*/
public class FooAnnotationExclusionStrategy implements ExclusionStrategy {
@Override
public boolean shouldSkipField(FieldAttributes f) {
return f.getAnnotation(FooAnnotation.class) != null;
}
@Override
public boolean shouldSkipClass(Class<?> clazz) {
return false;
// return clazz.getAnnotation(FooAnnotation.class) != null;
}
}
package com.mints.street.utils.json;
import android.util.Log;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import java.lang.reflect.Type;
public class JsonUtil {
private static Gson gson = new GsonBuilder()
.addSerializationExclusionStrategy(new FooAnnotationExclusionStrategy())
.create();
@SuppressWarnings("hiding")
public static <T> T parseJson(String response, Class<T> clazz) {
try {
return gson.fromJson(response, clazz);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static <T> T parseJson(JsonObject response, Class<T> clazz) {
try {
return gson.fromJson(response, clazz);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 把json字符串转换为JavaBean。如果json的根节点就是一个集合,则使用此方法<p>
* type参数的获取方式为:Type type = new TypeToken<集合泛型>(){}.getType();
*
* @param json json字符串
* @return type 指定要解析成的数据类型
*/
public static <T> T json2Bean(String json, Type type) {
T bean = null;
try {
bean = gson.fromJson(json, type);
} catch (Exception e) {
Log.i("JsonUtil", "解析json数据时出现异常\njson = " + json, e);
}
return bean;
}
/**
* 把JsonElement转换为JavaBean。如果json的根节点就是一个集合,则使用此方法<p>
* type参数的获取方式为:Type type = new TypeToken<集合泛型>(){}.getType();
*
* @param json json字符串
* @return type 指定要解析成的数据类型
*/
public static <T> T json2Bean(JsonElement json, Type type) {
T bean = null;
try {
bean = gson.fromJson(json, type);
} catch (Exception e) {
Log.i("JsonUtil", "解析json数据时出现异常\njson = " + json, e);
}
return bean;
}
public static String toJson(Object object) {
try {
return gson.toJson(object);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="800"
android:fromYDelta="0"
android:toYDelta="50%p" />
<alpha
android:duration="1000"
android:fromAlpha="1.0"
android:toAlpha="0.0" />
</set>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="800"
android:fromYDelta="100%p"
android:toYDelta="0" />
<alpha
android:duration="500"
android:fromAlpha="0.0"
android:toAlpha="1.0" />
</set>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="@color/white" />
</shape>
</item>
<item >
<bitmap
android:src="@drawable/bg_splash" />
</item>
</layer-list>
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<FrameLayout
android:id="@+id/splash_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:src="@drawable/bg_splash"
/>
<data>
<variable
name="ViewModel"
type="com.mints.street.main.my.AboutusViewModel" />
</data>
</layout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<FrameLayout
android:id="@+id/splash_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:src="@drawable/bg_splash"
/>
<data>
<variable
name="ViewModel"
type="com.mints.street.main.my.MoresettingsViewModel" />
</data>
</layout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:text="butt"
android:id="@+id/bu"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<FrameLayout
android:id="@+id/fl_splash"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white">
<!--这里模拟一张oneshot单的焦点图展示-->
<ImageView
android:id="@+id/oneshot_image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="400px" />
<RelativeLayout
android:id="@+id/splash_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white">
<!-- 广点通开屏广告支持“半屏/全屏”展示,开发者可以把Logo区域放在屏幕底部,然后在Logo上方提供一个容器来放置半开屏广告,请注意此容器高度不得小于400dp -->
<!-- 1.Logo区域:展示半开屏广告时使用,如果想展示全开屏广告,可以不需要这个Logo区域 -->
<!-- 注意:如需要这个Logo区域,建议开发者使用自己的Logo资源,而不是联盟的Logo资源@drawable/gdt_splash_logo,资源规格可参照@drawable/gdt_splash_logo -->
<FrameLayout
android:id="@+id/splash_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/app_logo" />
<!-- 2.预设开屏图片区域: -->
<!-- 开发者可以把自家App设计开屏图片摆放在这里,本示例中放置了一张静态图片。!-->
<!-- 注意1:直接将此图放在广告容器的下面即可,始终不要将广告容器splash_container的设为invisible,否则将不会展示广告无法计费,返回错误码600。-->
<!-- 注意2:建议开发者使用自己的开屏图片资源,而不是联盟的@drawable/splash_holder,资源规格可参照@drawable/splash_holder -->
<ImageView
android:id="@+id/splash_holder"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/app_logo"
android:scaleType="fitXY" />
<!-- 3.开屏广告容器区域:-->
<!-- 注意:该区域高度不得小于400dp。在本示例中没有写死splash_container的高度值,是因为第1部分的app_logo区域是一个高度很小的图片。 -->
<ImageView
android:id="@+id/app_logo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="10dp"
/>
<!-- 4.自定义跳过按钮区域:开发者可以根据需要自己实现不同样式的跳过按钮 -->
<!-- 注意1:根据广告法规定,跳过按钮必须在屏幕当中出现。因此广告展示的时候,必须让将SkipView显示出来,即visible,否则将SDK将不展示广告,返回错误码608。。 -->
<!-- 注意2:SDK除了会检查跳过按钮的可见性,还将检测它的尺寸,其尺寸不得小于3dp*3dp,否则将SDK将不展示广告,返回错误码608。 -->
<TextView
android:id="@+id/skip_view"
android:layout_width="96dp"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentTop="true"
android:layout_marginBottom="16dp"
android:layout_marginEnd="16dp"
android:layout_marginTop="16dp"
android:background="@drawable/shape_bg_circle"
android:gravity="center"
android:text="点击跳过"
android:textColor="@android:color/white"
android:textSize="14sp"
android:visibility="gone" />
<!-- 本示例省略了自定义的倒计时,和跳过按钮放在一起实现了。开发者也可以实现自己的倒计时View,方法是在onADTick回调中获得广告剩余的展示时间,并自由决定倒计时View的样式,SDK对倒计时的View没有要求。 -->
<!-- 自定义wifi预加载按钮,需设置状态为不显示,当素材为视频且视频开始播放时,SDK内部会处理为显示状态-->
<TextView
android:id="@+id/preload_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_margin="16dp"
android:background="@drawable/shape_bg_circle"
android:gravity="center"
android:text="已Wi-Fi预加载"
android:textColor="@android:color/white"
android:textSize="14sp"
android:visibility="gone" />
</RelativeLayout>
</FrameLayout>
<data>
......
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto">
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="viewModel"
type="com.mints.street.main.my.MyViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
<LinearLayout
android:id="@+id/llMyRoot"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<include layout="@layout/item_fragment_main_my_title" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:text="个人中心"
android:textColor="@color/black"
android:textSize="39dp"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
android:layout_marginStart="15dp"
android:layout_marginTop="19dp"
android:layout_marginEnd="15dp"
android:background="@drawable/shape_gold_card"
android:elevation="10dp"
android:orientation="vertical">
<LinearLayout
android:id="@+id/ly_aboutus"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_alignParentLeft="true"
android:layout_marginStart="15dp"
android:layout_marginTop="20dp"
android:src="@mipmap/iv_about_us" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginTop="18dp"
android:layout_weight="1"
android:text="关于我们"
android:textColor="@color/black"
android:textSize="18sp" />
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_alignParentEnd="true"
android:layout_marginTop="20dp"
android:layout_marginEnd="11dp"
android:src="@mipmap/bg_right" />
</LinearLayout>
<View
android:layout_width="328pt"
android:layout_height="1dp"
android:layout_marginStart="13dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="14dp"
android:background="#979797" />
<LinearLayout
android:id="@+id/ly_moresettings"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_alignParentLeft="true"
android:layout_marginStart="15dp"
android:layout_marginTop="20dp"
android:src="@mipmap/iv_more_settings" />
<TextView
android:id="@+id/tv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginTop="18dp"
android:layout_weight="1"
android:text="更多设置"
android:textColor="@color/black"
android:textSize="18sp" />
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_alignParentEnd="true"
android:layout_marginTop="20dp"
android:layout_marginEnd="11dp"
android:layout_marginBottom="20dp"
android:src="@mipmap/bg_right" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</layout>
\ No newline at end of file
This diff is collapsed.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#553b3a3a">
<LinearLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@android:color/white"
android:orientation="vertical">
<TextView
android:id="@+id/open_from_camera"
android:layout_width="match_parent"
android:layout_height="40dp"
android:gravity="center"
android:padding="8dp"
android:text="相机"
android:textColor="#333"
android:textSize="15sp" />
<TextView
android:id="@+id/open_album"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginTop="1dp"
android:gravity="center"
android:padding="8dp"
android:text="打开图库"
android:textColor="#333"
android:textSize="15sp" />
<TextView
android:id="@+id/cancel"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginTop="1dp"
android:gravity="center"
android:padding="8dp"
android:text="取消"
android:textColor="#333"
android:textSize="15sp" />
</LinearLayout>
</RelativeLayout>
\ No newline at end of file
......@@ -139,7 +139,12 @@
<item name="android:layout_height">1px</item>
<item name="android:background">#d3d3d3</item>
</style>
<style name="ipopwindow_anim_style">
<item name="android:windowEnterAnimation">@anim/popshow_anim</item>
<!-- 指定显示的动画xml -->
<item name="android:windowExitAnimation">@anim/pophidden</item>
<!-- 指定消失的动画xml -->
</style>
</resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<!--为了适配所有路径可以设置 path = "." -->
<external-path
name="tt_external_root"
path="." />
<external-path
name="tt_external_download"
path="Download" />
<external-files-path
name="tt_external_files_download"
path="Download" />
<files-path
name="tt_internal_file_download"
path="Download" />
<cache-path
name="tt_internal_cache_download"
path="Download" />
</paths>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
<!-- <domain-config>-->
<!-- <domain includeSubdomains="true">i.snssdk.com</domain>-->
<!-- <domain includeSubdomains="true">is.snssdk.com</domain>-->
<!-- <domain includeSubdomains="true">pangolin.snssdk.com</domain>-->
<!-- <domain includeSubdomains="true">extlog.snssdk.com</domain>-->
<!-- <domain includeSubdomains="true">sf3-ttcdn-tos.pstatp.com</domain>-->
<!-- <domain includeSubdomains="true">bds.snssdk.com</domain>-->
<!-- <domain includeSubdomains="true">dig.bdurl.net</domain>-->
<!-- <domain includeSubdomains="true">api-access.pangolin-sdk-toutiao.com</domain>-->
<!-- <domain includeSubdomains="true">sf1-fe-tos.pglstatp-toutiao.com</domain>-->
<!-- <domain includeSubdomains="true">sf1-be-pack.pglstatp-toutiao.com</domain>-->
<!-- <domain includeSubdomains="true">sf3-fe-tos.pglstatp-toutiao.com</domain>-->
<!-- <domain includeSubdomains="true">log-api.pangolin-sdk-toutiao.com</domain>-->
<!-- <domain includeSubdomains="true">s3-fe-scm.pglstatp-toutiao.com</domain>-->
<!-- <domain includeSubdomains="true">s3a.pstatp.com</domain>-->
<!-- <domain includeSubdomains="true">api-access.pangolin-sdk-toutiao-b.com</domain>-->
<!-- <domain includeSubdomains="true">log-api.pangolin-sdk-toutiao-b.com</domain>-->
<!-- <domain includeSubdomains="true">dm.pstatp.com</domain>-->
<!-- <domain includeSubdomains="true">toblog.ctobsnssdk.com</domain>-->
<!-- <domain includeSubdomains="true">sdfp.snssdk.com</domain>-->
<!-- <domain includeSubdomains="true">tosv.byted.org</domain>-->
<!-- <domain includeSubdomains="true">sf1-ttcdn-tos.pstatp.com</domain>-->
<!-- <domain includeSubdomains="true">sf6-fe-tos.pglstatp-toutiao.com</domain>-->
<!-- <domain includeSubdomains="true">log.snssdk.com</domain>-->
<!-- <domain includeSubdomains="true">tosv.boe.byted.org</domain>-->
<!-- <domain includeSubdomains="true">dm.toutiao.com</domain>-->
<!-- <domain includeSubdomains="true">dm.bytedance.com</domain>-->
<!-- <trust-anchors>-->
<!-- <certificates src="user" />//信任用户自己安装的证书-->
<!-- <certificates src="system" />-->
<!-- </trust-anchors>-->
<!-- </domain-config>-->
</network-security-config>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources>
<paths>
<root-path
name="root"
path="" />
<files-path
name="files"
path="" />
<external-path
name="sdcard"
path="" />
<cache-path
name="cache"
path="" />
<external-files-path
name="exFiles"
path="" />
<external-cache-path
name="exCache"
path="" />
</paths>
</resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path
name="external"
path="." />
<files-path
name="files"
path="." />
<cache-path
name="cache"
path="." />
<!-- 优量汇 这个下载路径也不可以修改,必须为GDTDOWNLOAD -->
<external-cache-path
name="gdt_sdk_download_path1"
path="com_qq_e_download" />
<cache-path
name="gdt_sdk_download_path2"
path="com_qq_e_download" />
</paths>
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<!--为了适配所有路径可以设置 path = "." -->
<external-path name="download" path="." />
<external-files-path name="external_file" path="." />
<external-cache-path name="external_cache" path="." />
<files-path name="files" path="." />
<cache-path name="cache" path="。" />
</paths>
......@@ -23,17 +23,14 @@ isBuildModule=false
DEBUG_URL="http://test.mints-id.com/camera-api/"
RELEASE_URL="https://api.mints-id.com/gc-api/"
RELEASE_KEY_PASSWORD=mints.goodnews
RELEASE_KEY_ALIAS=mints_goodnews
RELEASE_STORE_PASSWORD=mints.goodnews
RELEASE_STORE_FILE=mints_goodnews.jks
RELEASE_KEY_PASSWORD=mints.street
RELEASE_KEY_ALIAS=mints_street
RELEASE_STORE_PASSWORD=mints.street
RELEASE_STORE_FILE=mints_street.jks
#ShareSDK
RELEASE_SHARESDK_KEY=
RELEASE_SHARESDK_SECRET=
#友盟
RELEASE_UMENG_KEY=
#JPush
RELEASE_JPUSH_KEY=
\ No newline at end of file
RELEASE_UMENG_KEY=
\ No newline at end of file
......@@ -10,7 +10,7 @@
<string name="bottom_name_task">任务中心</string>
<string name="bottom_name_my">个人中心</string>
<string name="app_sign">5932d26a</string>
<string name="app_sign">61117d7a</string>
<string name="dot">--</string>
......
......@@ -61,4 +61,24 @@
<style name="TabLayoutFavoriteTextStyle">
<item name="android:textSize">15sp</item>
</style>
<style name="NormalSplash" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowBackground">@drawable/splash_bg</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>
<style name="AppTheme.NoneTranslucent" parent="AppTheme.Base">
<item name="android:windowIsTranslucent">false</item>
<item name="android:windowAnimationStyle">@null</item>
</style>
<style name="CustomerTransparentTheme" parent="AppTheme.Base">
<!-- 为窗体的Enter和Exit设置动画 -->
<item name="android:windowAnimationStyle">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@color/transparent</item>
</style>
<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
</resources>
\ No newline at end of file
......@@ -9,7 +9,7 @@
public *;
}
# for DexGuard only
-keepresourcexmlelements manifest/application/meta-data@value=GlideModule
#-keepresourcexmlelements manifest/application/meta-data@value=GlideModule
#glide-transformations
-keep class jp.wasabeef.glide.transformations.** {*;}
......
......@@ -247,6 +247,17 @@ public abstract class HabitBaseActivity<V extends ViewDataBinding, VM extends Ba
startContainerActivity(canonicalName, null);
}
/**
* startActivity then finish
*
* @param clazz
*/
protected void startActivityThenKill(Class<?> clazz) {
Intent intent = new Intent(this, clazz);
startActivity(intent);
finish();
}
/**
* 跳转容器页面
*
......
......@@ -109,7 +109,7 @@ public class ViewAdapter {
});
}
@BindingAdapter(value = {"viewZ",/*"outline",*/"shadowColor"},requireAll = false)
@BindingAdapter(value = {"viewZ",/*"outline",*/"shadowColor2"},requireAll = false)
public static void setViewZ(View view,int z,int color){
ViewCompat.setElevation(view,AppUtils.dp2Px(view.getContext(),z));
......
......@@ -37,7 +37,7 @@
<attr name="isThrottleFirst" />
<attr name="currentView" />
<attr name="viewZ" format="integer" />
<attr name="shadowColor" format="integer" />
<attr name="shadowColor2" format="integer" />
<attr name="selected" format="boolean" />
</declare-styleable>
......
include ':library_base'
include ':mvvmhabit'
include ':shareSdkLib'
include ':app'
rootProject.name = "3D_Street_view"
\ No newline at end of file
apply plugin: 'com.android.library'
android {
compileSdkVersion rootProject.ext.android.compileSdkVersion
buildToolsVersion rootProject.ext.android.buildToolsVersion
defaultConfig {
minSdkVersion rootProject.ext.android.minSdkVersion
targetSdkVersion rootProject.ext.android.targetSdkVersion
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
buildToolsVersion '29.0.2'
}
dependencies {
api files('libs/MobCommons-2018.0523.1925.jar')
api files('libs/MobTools-2018.0523.1923.jar')
api files('libs/ShareSDK-Core-3.2.0.jar')
api files('libs/ShareSDK-Wechat-3.2.0.jar')
api files('libs/ShareSDK-Wechat-Core-3.2.0.jar')
api files('libs/ShareSDK-Wechat-Favorite-3.2.0.jar')
api files('libs/ShareSDK-Wechat-Moments-3.2.0.jar')
}
/**
* Automatically generated file. DO NOT MODIFY
*/
package cn.sharesdk.lib;
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String LIBRARY_PACKAGE_NAME = "cn.sharesdk.lib";
public static final String BUILD_TYPE = "debug";
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.sharesdk.lib" > <!-- <uses-sdk -->
<!-- android:minSdkVersion="14" -->
<!-- android:targetSdkVersion="21" /> -->
<uses-sdk
android:minSdkVersion="21"
android:targetSdkVersion="30" />
</manifest>
\ No newline at end of file
{
"version": 2,
"artifactType": {
"type": "AAPT_FRIENDLY_MERGED_MANIFESTS",
"kind": "Directory"
},
"applicationId": "cn.sharesdk.lib",
"variantName": "debug",
"elements": [
{
"type": "SINGLE",
"filters": [],
"outputFile": "AndroidManifest.xml"
}
]
}
\ No newline at end of file
int array smssdk_country_group_a 0x0
int array smssdk_country_group_b 0x0
int array smssdk_country_group_c 0x0
int array smssdk_country_group_d 0x0
int array smssdk_country_group_e 0x0
int array smssdk_country_group_f 0x0
int array smssdk_country_group_g 0x0
int array smssdk_country_group_h 0x0
int array smssdk_country_group_i 0x0
int array smssdk_country_group_j 0x0
int array smssdk_country_group_k 0x0
int array smssdk_country_group_l 0x0
int array smssdk_country_group_m 0x0
int array smssdk_country_group_n 0x0
int array smssdk_country_group_o 0x0
int array smssdk_country_group_p 0x0
int array smssdk_country_group_q 0x0
int array smssdk_country_group_r 0x0
int array smssdk_country_group_s 0x0
int array smssdk_country_group_t 0x0
int array smssdk_country_group_u 0x0
int array smssdk_country_group_v 0x0
int array smssdk_country_group_w 0x0
int array smssdk_country_group_x 0x0
int array smssdk_country_group_y 0x0
int array smssdk_country_group_z 0x0
int drawable ssdk_auth_title_back 0x0
int drawable ssdk_back_arr 0x0
int drawable ssdk_country_back_arrow 0x0
int drawable ssdk_country_cl_divider 0x0
int drawable ssdk_country_clear_search 0x0
int drawable ssdk_country_search_icon 0x0
int drawable ssdk_country_sharesdk_icon 0x0
int drawable ssdk_input_bg_focus 0x0
int drawable ssdk_logo 0x0
int drawable ssdk_oks_classic_alipay 0x0
int drawable ssdk_oks_classic_alipaymoments 0x0
int drawable ssdk_oks_classic_bluetooth 0x0
int drawable ssdk_oks_classic_check_checked 0x0
int drawable ssdk_oks_classic_check_default 0x0
int drawable ssdk_oks_classic_dingding 0x0
int drawable ssdk_oks_classic_douban 0x0
int drawable ssdk_oks_classic_dropbox 0x0
int drawable ssdk_oks_classic_email 0x0
int drawable ssdk_oks_classic_evernote 0x0
int drawable ssdk_oks_classic_facebook 0x0
int drawable ssdk_oks_classic_facebookmessenger 0x0
int drawable ssdk_oks_classic_flickr 0x0
int drawable ssdk_oks_classic_foursquare 0x0
int drawable ssdk_oks_classic_googleplus 0x0
int drawable ssdk_oks_classic_instagram 0x0
int drawable ssdk_oks_classic_instapaper 0x0
int drawable ssdk_oks_classic_kaixin 0x0
int drawable ssdk_oks_classic_kakaostory 0x0
int drawable ssdk_oks_classic_kakaotalk 0x0
int drawable ssdk_oks_classic_laiwang 0x0
int drawable ssdk_oks_classic_laiwangmoments 0x0
int drawable ssdk_oks_classic_line 0x0
int drawable ssdk_oks_classic_linkedin 0x0
int drawable ssdk_oks_classic_meipai 0x0
int drawable ssdk_oks_classic_mingdao 0x0
int drawable ssdk_oks_classic_pinterest 0x0
int drawable ssdk_oks_classic_platform_cell_back 0x0
int drawable ssdk_oks_classic_platfrom_cell_back_nor 0x0
int drawable ssdk_oks_classic_platfrom_cell_back_sel 0x0
int drawable ssdk_oks_classic_pocket 0x0
int drawable ssdk_oks_classic_progressbar 0x0
int drawable ssdk_oks_classic_qq 0x0
int drawable ssdk_oks_classic_qzone 0x0
int drawable ssdk_oks_classic_renren 0x0
int drawable ssdk_oks_classic_shortmessage 0x0
int drawable ssdk_oks_classic_sinaweibo 0x0
int drawable ssdk_oks_classic_telegram 0x0
int drawable ssdk_oks_classic_tencentweibo 0x0
int drawable ssdk_oks_classic_tumblr 0x0
int drawable ssdk_oks_classic_twitter 0x0
int drawable ssdk_oks_classic_vkontakte 0x0
int drawable ssdk_oks_classic_wechat 0x0
int drawable ssdk_oks_classic_wechatfavorite 0x0
int drawable ssdk_oks_classic_wechatmoments 0x0
int drawable ssdk_oks_classic_whatsapp 0x0
int drawable ssdk_oks_classic_yixin 0x0
int drawable ssdk_oks_classic_yixinmoments 0x0
int drawable ssdk_oks_classic_youdao 0x0
int drawable ssdk_oks_classic_youtube 0x0
int drawable ssdk_oks_ptr_ptr 0x0
int drawable ssdk_title_div 0x0
int drawable ssdk_weibo_common_shadow_top 0x0
int drawable ssdk_weibo_empty_failed 0x0
int id ssdk_sina_web_title_id 0x0
int id ssdk_sms_id_clCountry 0x0
int id ssdk_sms_id_et_put_identify 0x0
int id ssdk_sms_id_ivSearch 0x0
int id ssdk_sms_id_iv_clear 0x0
int id ssdk_sms_id_llSearch 0x0
int id ssdk_sms_id_llTitle 0x0
int id ssdk_sms_id_ll_back 0x0
int id ssdk_sms_id_tv_title 0x0
int string ssdk_alipay 0x0
int string ssdk_alipay_client_inavailable 0x0
int string ssdk_alipaymoments 0x0
int string ssdk_bluetooth 0x0
int string ssdk_dingding 0x0
int string ssdk_dont_keep_activitys_client 0x0
int string ssdk_douban 0x0
int string ssdk_dropbox 0x0
int string ssdk_email 0x0
int string ssdk_evernote 0x0
int string ssdk_facebook 0x0
int string ssdk_facebookmessenger 0x0
int string ssdk_facebookmessenger_client_inavailable 0x0
int string ssdk_flickr 0x0
int string ssdk_foursquare 0x0
int string ssdk_gender_female 0x0
int string ssdk_gender_male 0x0
int string ssdk_google_plus_client_inavailable 0x0
int string ssdk_googleplus 0x0
int string ssdk_instagram 0x0
int string ssdk_instagram_client_inavailable 0x0
int string ssdk_instapager_email_or_password_incorrect 0x0
int string ssdk_instapager_login_html 0x0
int string ssdk_instapaper 0x0
int string ssdk_instapaper_email 0x0
int string ssdk_instapaper_login 0x0
int string ssdk_instapaper_logining 0x0
int string ssdk_instapaper_pwd 0x0
int string ssdk_kaixin 0x0
int string ssdk_kakaostory 0x0
int string ssdk_kakaostory_client_inavailable 0x0
int string ssdk_kakaotalk 0x0
int string ssdk_kakaotalk_client_inavailable 0x0
int string ssdk_laiwang 0x0
int string ssdk_laiwang_client_inavailable 0x0
int string ssdk_laiwangmoments 0x0
int string ssdk_line 0x0
int string ssdk_line_client_inavailable 0x0
int string ssdk_linkedin 0x0
int string ssdk_meipai 0x0
int string ssdk_mingdao 0x0
int string ssdk_mingdao_share_content 0x0
int string ssdk_neteasemicroblog 0x0
int string ssdk_oks_cancel 0x0
int string ssdk_oks_confirm 0x0
int string ssdk_oks_contacts 0x0
int string ssdk_oks_multi_share 0x0
int string ssdk_oks_pull_to_refresh 0x0
int string ssdk_oks_refreshing 0x0
int string ssdk_oks_release_to_refresh 0x0
int string ssdk_oks_share 0x0
int string ssdk_oks_share_canceled 0x0
int string ssdk_oks_share_completed 0x0
int string ssdk_oks_share_failed 0x0
int string ssdk_oks_sharing 0x0
int string ssdk_pinterest 0x0
int string ssdk_pinterest_client_inavailable 0x0
int string ssdk_plurk 0x0
int string ssdk_pocket 0x0
int string ssdk_qq 0x0
int string ssdk_qq_client_inavailable 0x0
int string ssdk_qzone 0x0
int string ssdk_renren 0x0
int string ssdk_share_to_facebook 0x0
int string ssdk_share_to_googleplus 0x0
int string ssdk_share_to_mingdao 0x0
int string ssdk_share_to_qq 0x0
int string ssdk_share_to_qzone 0x0
int string ssdk_share_to_qzone_default 0x0
int string ssdk_share_to_youtube 0x0
int string ssdk_shortmessage 0x0
int string ssdk_sina_web_close 0x0
int string ssdk_sina_web_login_title 0x0
int string ssdk_sina_web_net_error 0x0
int string ssdk_sina_web_refresh 0x0
int string ssdk_sina_web_title 0x0
int string ssdk_sinaweibo 0x0
int string ssdk_sms_btn_next 0x0
int string ssdk_sms_btn_sende_voice 0x0
int string ssdk_sms_btn_submit 0x0
int string ssdk_sms_china 0x0
int string ssdk_sms_choose_country 0x0
int string ssdk_sms_code 0x0
int string ssdk_sms_country_search 0x0
int string ssdk_sms_dialog_btn_back 0x0
int string ssdk_sms_dialog_btn_cancel 0x0
int string ssdk_sms_dialog_btn_login 0x0
int string ssdk_sms_dialog_btn_ok 0x0
int string ssdk_sms_dialog_btn_sure 0x0
int string ssdk_sms_dialog_btn_wait 0x0
int string ssdk_sms_dialog_close_identify_page 0x0
int string ssdk_sms_dialog_confirm_des 0x0
int string ssdk_sms_dialog_confirm_title 0x0
int string ssdk_sms_dialog_error_code 0x0
int string ssdk_sms_dialog_error_des 0x0
int string ssdk_sms_dialog_error_desc_100 0x0
int string ssdk_sms_dialog_error_desc_101 0x0
int string ssdk_sms_dialog_error_desc_102 0x0
int string ssdk_sms_dialog_error_desc_103 0x0
int string ssdk_sms_dialog_error_desc_104 0x0
int string ssdk_sms_dialog_error_desc_105 0x0
int string ssdk_sms_dialog_error_desc_106 0x0
int string ssdk_sms_dialog_error_desc_107 0x0
int string ssdk_sms_dialog_error_desc_108 0x0
int string ssdk_sms_dialog_error_desc_109 0x0
int string ssdk_sms_dialog_error_title 0x0
int string ssdk_sms_dialog_login_success 0x0
int string ssdk_sms_dialog_net_error 0x0
int string ssdk_sms_dialog_send_success 0x0
int string ssdk_sms_dialog_smart_dec 0x0
int string ssdk_sms_dialog_smart_title 0x0
int string ssdk_sms_dialog_system_error 0x0
int string ssdk_sms_dialog_voice_text 0x0
int string ssdk_sms_input_code_hint 0x0
int string ssdk_sms_input_phone_hint 0x0
int string ssdk_sms_input_voice_code 0x0
int string ssdk_sms_login 0x0
int string ssdk_sms_phone 0x0
int string ssdk_sms_send_again 0x0
int string ssdk_sms_top_identify_text 0x0
int string ssdk_sms_top_text 0x0
int string ssdk_sms_zone 0x0
int string ssdk_sohumicroblog 0x0
int string ssdk_sohusuishenkan 0x0
int string ssdk_symbol_ellipsis 0x0
int string ssdk_telegram 0x0
int string ssdk_telegram_client_inavailable 0x0
int string ssdk_tencentweibo 0x0
int string ssdk_tumblr 0x0
int string ssdk_twitter 0x0
int string ssdk_use_login_button 0x0
int string ssdk_vkontakte 0x0
int string ssdk_website 0x0
int string ssdk_wechat 0x0
int string ssdk_wechat_client_inavailable 0x0
int string ssdk_wechatfavorite 0x0
int string ssdk_wechatmoments 0x0
int string ssdk_weibo_oauth_regiseter 0x0
int string ssdk_weibo_upload_content 0x0
int string ssdk_whatsapp 0x0
int string ssdk_whatsapp_client_inavailable 0x0
int string ssdk_yixin 0x0
int string ssdk_yixin_client_inavailable 0x0
int string ssdk_yixinmoments 0x0
int string ssdk_youdao 0x0
int string ssdk_youtube 0x0
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet config="main" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="D:\Androidproject\android_street\shareSdkLib\src\main\jniLibs"/></dataSet><dataSet config="debug" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="D:\Androidproject\android_street\shareSdkLib\src\debug\jniLibs"/></dataSet></merger>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet config="main" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="D:\Androidproject\android_street\shareSdkLib\src\main\shaders"/></dataSet><dataSet config="debug" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="D:\Androidproject\android_street\shareSdkLib\src\debug\shaders"/></dataSet></merger>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet config="main" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="D:\Androidproject\android_street\shareSdkLib\src\main\assets"><file name="ShareSDK.xml" path="D:\Androidproject\android_street\shareSdkLib\src\main\assets\ShareSDK.xml"/></source><source path="D:\Androidproject\android_street\shareSdkLib\build\intermediates\shader_assets\debug\out"/></dataSet><dataSet config="debug" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="D:\Androidproject\android_street\shareSdkLib\src\debug\assets"/></dataSet></merger>
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment