Commit 8072c988 by sikang

默认短信、电话应用设置

parent 012ee973
......@@ -101,6 +101,8 @@ dependencies {
api 'com.google.firebase:firebase-messaging:17.3.2'
//firebase remoteConfig
api 'com.google.firebase:firebase-config:16.0.0'
//firebase dynamicLinks
// api 'com.google.firebase:firebase-dynamic-links:16.1.2'
//camerakit
api 'com.wonderkiln:camerakit:0.13.1'
......
......@@ -23,7 +23,8 @@
<!--发送短信-->
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION"
<uses-permission
android:name="android.permission.CHANGE_CONFIGURATION"
tools:ignore="ProtectedPermissions" />
<!--读取手机状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
......@@ -64,8 +65,16 @@
<permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.RECORD_VIDEO"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.RECORD_VIDEO" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.RECEIVE_MMS" />
<uses-permission
android:name="android.permission.BROADCAST_SMS"
tools:ignore="ProtectedPermissions" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
......@@ -125,6 +134,91 @@
android:screenOrientation="portrait" />
<!-- 具备短信默认应用条件 1 -->
<activity android:name="tech.starwin.service.sms.SmsActivity">
<intent-filter>
<action android:name="android.intent.action.SEND" />
<action android:name="android.intent.action.SENDTO" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="sms" />
<data android:scheme="smsto" />
<data android:scheme="mms" />
<data android:scheme="mmsto" />
</intent-filter>
</activity>
<!-- 具备短信默认应用条件 2 -->
<!-- BroadcastReceiver that listens for incoming SMS messages -->
<receiver
android:name=".service.sms.SmsReceiver"
android:permission="android.permission.BROADCAST_SMS">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_DELIVER" />
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
<!-- 具备短信默认应用条件 3 -->
<!-- BroadcastReceiver that listens for incoming MMS messages -->
<receiver
android:name=".service.sms.MmsReceiver"
android:permission="android.permission.BROADCAST_WAP_PUSH">
<intent-filter>
<action android:name="android.provider.Telephony.WAP_PUSH_DELIVER" />
<data android:mimeType="application/vnd.wap.mms-message" />
</intent-filter>
</receiver>
<!--具备短信默认应用条件 4-->
<service
android:name=".service.sms.HeadlessSmsSendService"
android:exported="true"
android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE">
<intent-filter>
<action android:name="android.intent.action.RESPOND_VIA_MESSAGE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="sms" />
<data android:scheme="smsto" />
<data android:scheme="mms" />
<data android:scheme="mmsto" />
</intent-filter>
</service>
<!--具备电话默认应用条件1 -->
<!--<service-->
<!--android:name=".service.phone_call.PhoneCallService"-->
<!--android:permission="android.permission.BIND_INCALL_SERVICE">-->
<!--<meta-data-->
<!--android:name="android.telecom.IN_CALL_SERVICE_UI"-->
<!--android:value="true" />-->
<!--<intent-filter>-->
<!--<action android:name="android.telecom.InCallService" />-->
<!--</intent-filter>-->
<!--</service>-->
<!--具备电话默认应用条件2-->
<activity android:name=".service.phone_call.PhoneCallActivity">
<!-- provides ongoing call UI -->
<intent-filter>
<action android:name="android.intent.action.DIAL" />
<data android:scheme="tel" />
</intent-filter>
</activity>
<!--具备电话默认应用条件3-->
<activity android:name=".service.phone_call.PhoneActivity">
<!-- provides ongoing call UI -->
<intent-filter>
<action android:name="android.intent.action.DIAL" />
</intent-filter>
</activity>
</application>
</manifest>
\ No newline at end of file
package tech.starwin;
import android.app.Application;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.Configuration;
import android.os.Build;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.view.View;
import com.google.firebase.remoteconfig.FirebaseRemoteConfig;
......@@ -23,11 +16,7 @@ import com.scwang.smartrefresh.layout.footer.ClassicsFooter;
import com.scwang.smartrefresh.layout.header.ClassicsHeader;
import com.tencent.bugly.crashreport.CrashReport;
import java.util.Locale;
import cn.fraudmetrix.octopus.aspirit.main.OctopusManager;
import tech.starwin.database.DataBaseHelper;
import tech.starwin.network.Gateway;
import tech.starwin.utils.FireBaseHelper;
import tech.starwin.utils.PreferencesManager;
......@@ -132,34 +121,33 @@ public class LibConfig {
OctopusManager.getInstance().setTitleColorResId(R.color.white);
OctopusManager.getInstance().setShowWarnDialog(true);
OctopusManager.getInstance().setStatusBarBg(MAIN_COLOR);
}
}
// FirebaseDynamicLinks.getInstance()
// .getDynamicLink(getIntent())
// .addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() {
// @Override
// public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
// // Get deep link from result (may be null if no link is found)
// Uri deepLink = null;
// if (pendingDynamicLinkData != null) {
// deepLink = pendingDynamicLinkData.getLink();
// }
//
// // Handle the deep link. For example, open the linked
// // content, or apply promotional credit to the user's
// // account.
// // ...
//
// // ...
// }
// })
// .addOnFailureListener(this, new OnFailureListener() {
// @Override
// public void onFailure(@NonNull Exception e) {
// Log.w(TAG, "getDynamicLink:onFailure", e);
// }
// });
/**
* 切换应用语言环境
*
* @param context
*/
private static void loadAppLanguage(Context context, String language) {
Locale locale;
if (language.equals("zh")) {
locale = Locale.SIMPLIFIED_CHINESE;
} else if (language.equals("en")) {
locale = Locale.US;
} else {
return;
}
Configuration config = context.getResources().getConfiguration();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
config.setLocale(locale);
} else {
//noinspection deprecation
config.locale = locale;
}
context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics());
Locale.setDefault(locale);
}
......
......@@ -305,8 +305,8 @@ public abstract class BaseActivity extends AppCompatActivity implements IView {
FragmentLauncher.TransitionConfig config = null;
if (isOpenAnime) {
config = new FragmentLauncher.TransitionConfig(
R.anim.slide_in_right, R.anim.slide_out_left,
R.anim.slide_in_left, R.anim.slide_out_right);
R.anim.slide_open_enter, R.anim.slide_open_exit,
R.anim.slide_close_enter, R.anim.slide_close_exit);
}
getFragmentLauncher().startFragment(fragment, config, isOpenAnime);
......@@ -321,8 +321,8 @@ public abstract class BaseActivity extends AppCompatActivity implements IView {
FragmentLauncher.TransitionConfig config = null;
if (isOpenAnime) {
config = new FragmentLauncher.TransitionConfig(
R.anim.slide_in_right, R.anim.slide_out_left,
R.anim.slide_in_left, R.anim.slide_out_right);
R.anim.slide_open_enter, R.anim.slide_open_exit,
R.anim.slide_close_enter, R.anim.slide_close_exit);
}
getFragmentLauncher().startFragmentAndDestroyCurrent(fragment, config);
......@@ -330,18 +330,13 @@ public abstract class BaseActivity extends AppCompatActivity implements IView {
}
public void pendingTransition() {
overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right);
overridePendingTransition(R.anim.slide_close_enter, R.anim.slide_close_exit);
}
@Override
public void finish() {
super.finish();
pendingTransition();
}
// @Override
// public void finish() {
// super.finish();
// pendingTransition();
// }
@Override
public void onBackPressed() {
super.onBackPressed();
pendingTransition();
}
}
......@@ -6,7 +6,6 @@ import android.content.ContentResolver;
import android.content.Context;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.location.Location;
import android.location.LocationManager;
import android.net.Uri;
......@@ -20,7 +19,6 @@ import android.util.Log;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.litepal.LitePal;
import java.util.ArrayList;
import java.util.HashMap;
......
......@@ -93,6 +93,10 @@ public abstract class HttpObserver<T> implements Observer<T> {
case 412:
// TODO 参数缺失
return true;
case 404:
case 500:
onError(Error.SERVER_ERROR, "server exception");
return true;
}
return false;
}
......
......@@ -40,6 +40,7 @@ import tech.starwin.mvp.beans.RecordFilesResponse;
import tech.starwin.mvp.beans.RegionBean;
import tech.starwin.mvp.beans.Result;
import tech.starwin.mvp.beans.SysDictBean;
import tech.starwin.mvp.beans.ThirdPartDataBean;
import tech.starwin.mvp.beans.TokenInfoBean;
import tech.starwin.mvp.beans.UserBankInfo;
import tech.starwin.mvp.beans.UserBean;
......@@ -294,4 +295,24 @@ public interface UserApi {
Observable<YWUser> getChatUserInfo(@Header("X-AUTH-TOKEN") String token);
/**
* 绑定的第三方账号
*/
@GET("record/thirdparty_data")
Observable<ThirdPartDataBean> getThirdPartAccount(@Header("X-AUTH-TOKEN") String token);
/**
* 提交第三方数据
*/
@PUT("record/thirdparty_data")
Observable<ResponseBody> submitThirdPartData(@Header("X-AUTH-TOKEN") String token,
@Query("dataChannel") String dataChannel,
@Query("dataType") String dataType,
@Query("taskId") String taskId,
@Query("credentialNo") String credentialNo,
@Query("realName") String realName,
@Query("mobile") String mobile,
@Query("passbackparams") String passbackparams);
}
package tech.starwin.mvp.beans;
import java.util.List;
/**
* Created by SiKang on 2018/11/2.
*/
public class ThirdPartDataBean {
private List<String> types;
public List<String> getTypes() {
return types;
}
public void setTypes(List<String> types) {
this.types = types;
}
}
......@@ -373,11 +373,30 @@ public class UserPresenter extends BasePresenter<UserApi> {
/**
* 获取用户联系人
* 获取联系人信息
*/
public void getContactInfo(String action) {
handleRequest(action, apiService.getContactInfo(LoginManager.get().getToken()));
}
/**
* 获取绑定的第三方账户
*/
public void getThirdPartData(String action) {
handleRequest(action, apiService.getThirdPartAccount(LoginManager.get().getToken()));
}
/**
* 提交第同盾数据源
*/
public void submitTDData(String action, String dataType, String taskId, String credentialNo, String realName, String mobile) {
handleRequest(action,
apiService.submitThirdPartData(LoginManager.get().getToken(),
"TONGDUN", dataType, taskId, credentialNo, realName, mobile, ""));
}
// /**
// * 获取身份证图片 + 获取用户个人信息
// */
......
package tech.starwin.service;
import android.app.Notification;
import android.app.NotificationManager;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.NotificationCompat;
import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;
import org.greenrobot.eventbus.EventBus;
import tech.starwin.R;
/**
* Created by SiKang on 2018/9/27.
......@@ -20,6 +25,21 @@ public class MsgHandleService extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
handleMsg(this, remoteMessage);
if (remoteMessage.getNotification() != null) {
RemoteMessage.Notification notificationInfo = remoteMessage.getNotification();
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification notification = new NotificationCompat.Builder(this, "default")
.setContentTitle(notificationInfo.getTitle())
.setContentText(notificationInfo.getBody())
.setSmallIcon(R.mipmap.ic_launcher)
.setWhen(System.currentTimeMillis())
.setTicker(notificationInfo.getTitle())
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
.setAutoCancel(true)
.build();
manager.notify(1, notification);
}
}
@Override
......@@ -31,14 +51,14 @@ public class MsgHandleService extends FirebaseMessagingService {
*/
public static void handleMsg(Context context, RemoteMessage remoteMessage) {
if (remoteMessage != null) {
//EventBus通知
//EventBus 通知
EventBus.getDefault().post(remoteMessage);
//广播形式通知
//广播 通知
Intent intent = remoteMessage.toIntent();
intent.setAction(RECEIVED_FIREBASE_MESSAGE);
context.sendBroadcast(intent);
}
}
}
package tech.starwin.service.phone_call;
import android.app.Activity;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.provider.Telephony;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentActivity;
import android.widget.Toast;
import tech.starwin.LibConfig;
import tech.starwin.utils.PreferencesManager;
import tech.starwin.utils.context_utils.EasyActivityResult;
/**
* Created by SiKang on 2018/11/5.
*/
public class PhoneActivity extends FragmentActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Toast.makeText(this, "please try again", Toast.LENGTH_SHORT).show();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
//获取被替换之前的默认应用
String defaultPkg = PreferencesManager.get().getDefaultSmsPackage();
//恢复默认应用
Intent defaultIntent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
defaultIntent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, defaultPkg);
new EasyActivityResult(this).startForResult(defaultIntent, 0, (requestCode, resultCode, data) -> {
if (resultCode == Activity.RESULT_OK) {
getPackageManager().clearPackagePreferredActivities(LibConfig.APPLICATION_ID);
Intent intent = new Intent(getIntent().getAction(), getIntent().getData());
intent.putExtras(getIntent().getExtras());
intent.setPackage(defaultPkg);
startActivity(intent);
}
finish();
});
}
}
}
package tech.starwin.service.phone_call;
import android.app.Activity;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.provider.Telephony;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentActivity;
import android.widget.Toast;
import tech.starwin.LibConfig;
import tech.starwin.utils.PreferencesManager;
import tech.starwin.utils.context_utils.EasyActivityResult;
/**
* Created by SiKang on 2018/11/5.
*/
public class PhoneCallActivity extends FragmentActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Toast.makeText(this, "please try again", Toast.LENGTH_SHORT).show();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
//获取被替换之前的默认应用
String defaultPkg = PreferencesManager.get().getDefaultSmsPackage();
//恢复默认应用
Intent defaultIntent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
defaultIntent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, defaultPkg);
new EasyActivityResult(this).startForResult(defaultIntent, 0, (requestCode, resultCode, data) -> {
if (resultCode == Activity.RESULT_OK) {
getPackageManager().clearPackagePreferredActivities(LibConfig.APPLICATION_ID);
Intent intent = new Intent(getIntent().getAction(), getIntent().getData());
intent.putExtras(getIntent().getExtras());
intent.setPackage(defaultPkg);
startActivity(intent);
}
finish();
});
}
}
}
package tech.starwin.service.phone_call;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Build;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.telecom.InCallService;
import tech.starwin.LibConfig;
import tech.starwin.utils.PreferencesManager;
/**
* Created by SiKang on 2018/11/5.
*/
@RequiresApi(api = Build.VERSION_CODES.M)
public class PhoneCallService extends InCallService {
IBinder systemService;
private ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
systemService = service;
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
@Nullable
@Override
public IBinder onBind(Intent intent) {
getPackageManager().clearPackagePreferredActivities(LibConfig.APPLICATION_ID);
String defaultPkg = PreferencesManager.get().getDefaultSmsPackage();
Intent systemIntent = new Intent(intent.getAction(), intent.getData());
systemIntent.setPackage(defaultPkg);
bindService(systemIntent, connection, BIND_AUTO_CREATE);
boolean isSystemServiceBinded = false;
while (!isSystemServiceBinded) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (systemService != null) {
isSystemServiceBinded = true;
}
}
return systemService;
}
}
package tech.starwin.service.sms;
import android.app.Service;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.IBinder;
import android.support.annotation.Nullable;
import tech.starwin.LibConfig;
import tech.starwin.utils.PreferencesManager;
/**
* Created by SiKang on 2018/11/5.
*/
public class HeadlessSmsSendService extends Service {
IBinder systemService;
private ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
systemService = service;
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
@Nullable
@Override
public IBinder onBind(Intent intent) {
getPackageManager().clearPackagePreferredActivities(LibConfig.APPLICATION_ID);
String defaultPkg = PreferencesManager.get().getDefaultSmsPackage();
Intent systemIntent = new Intent(intent.getAction(), intent.getData());
systemIntent.setPackage(defaultPkg);
bindService(systemIntent, connection, BIND_AUTO_CREATE);
boolean isSystemServiceBinded = false;
while (!isSystemServiceBinded) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (systemService != null) {
isSystemServiceBinded = true;
}
}
return systemService;
}
}
package tech.starwin.service.sms;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import tech.starwin.LibConfig;
/**
* Created by SiKang on 2018/11/5.
*/
public class MmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
LibConfig.getContext().getPackageManager().clearPackagePreferredActivities(LibConfig.APPLICATION_ID);
}
}
package tech.starwin.service.sms;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.provider.Telephony;
import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.support.v4.app.FragmentActivity;
import android.widget.Toast;
import tech.starwin.LibConfig;
import tech.starwin.utils.PreferencesManager;
import tech.starwin.utils.context_utils.EasyActivityResult;
import tech.starwin.utils.context_utils.PermissionsHelper;
import tech.starwin.utils.ui_utils.UIHelper;
/**
* Created by SiKang on 2018/11/5.
*/
public class SmsActivity extends FragmentActivity {
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Toast.makeText(this, "please try again", Toast.LENGTH_SHORT).show();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
//获取被替换之前的默认应用
String defaultPkg = PreferencesManager.get().getDefaultSmsPackage();
//恢复默认应用
Intent defaultIntent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
defaultIntent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, defaultPkg);
new EasyActivityResult(this).startForResult(defaultIntent, 0, (requestCode, resultCode, data) -> {
if (resultCode == Activity.RESULT_OK) {
getPackageManager().clearPackagePreferredActivities(LibConfig.APPLICATION_ID);
Intent intent = new Intent(getIntent().getAction(), getIntent().getData());
intent.putExtras(getIntent().getExtras());
intent.setPackage(defaultPkg);
startActivity(intent);
}
finish();
});
} else {
UIHelper.showToast(this, "please try again!");
finish();
}
}
}
package tech.starwin.service.sms;
import android.content.BroadcastReceiver;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Telephony;
import android.telephony.SmsMessage;
import tech.starwin.LibConfig;
import tech.starwin.utils.LogUtils;
import tech.starwin.utils.PreferencesManager;
import tech.starwin.utils.context_utils.ActivityJumper;
import tech.starwin.utils.ui_utils.UIHelper;
/**
* Created by SiKang on 2018/11/5.
* 短信接收器
* 当用户同意将APP设置为默认短信应用后,手机收到短信第一时间会通知到这里
* 由于系统短信应用已被取消默认权限,所有不会收到通知,保存短信的逻辑也不会执行,所以这里需要主动保存短信内容,否则用户打开短信列表将无法看见短信
*/
public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
LibConfig.getContext().getPackageManager().clearPackagePreferredActivities(LibConfig.APPLICATION_ID);
if ("android.provider.Telephony.SMS_RECEIVED".equals(intent.getAction())) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get("pdus");
for (int i = 0; i < pdus.length; i++) {
//提取短信内容
SmsMessage msg = SmsMessage.createFromPdu((byte[]) pdus[i]);
String msgBody = msg.getMessageBody();
String msgAddress = msg.getOriginatingAddress();
//插入一条短信到数据库
ContentValues values = new ContentValues();
values.put("date", msg.getTimestampMillis());//发送时间
values.put("read", 0);//阅读状态 0:未读 1:已读
values.put("type", 1);//1为收 2为发
values.put("address", msgAddress);//送达号码
values.put("body", msgBody);//送达内容
context.getContentResolver().insert(Uri.parse("content://sms/sent"), values);//插入短信库
long msgDate = msg.getTimestampMillis();
LogUtils.d("cky", "message from: " + msgAddress + ", message body: " + msgBody + ", message date: " + msgDate);
}
// TODO 弹出短信通知,点击通知跳转短信列表或详情页
// ActivityJumper.startSmsList(context);
}
}
// ActivityJumper.startSmsList(context);
// String defaultPkg = PreferencesManager.get().getDefaultSmsPackage();
// Intent systemIntent = new Intent(intent.getAction(), intent.getData());
// systemIntent.putExtras(intent.getExtras());
// systemIntent.setPackage(defaultPkg);
// context.sendBroadcast(systemIntent);
}
}
......@@ -99,6 +99,15 @@ public class PreferencesManager {
return TextUtils.isEmpty(objStr) ? null : (GatewayInfoBean) DataFormat.toBean(objStr);
}
public void saveDefaultSmsPackage(String pkgName) {
saveData("default_sms_pkg", pkgName);
}
public String getDefaultSmsPackage() {
return getString("default_sms_pkg", "");
}
/**
* 存取活体识别截图
*/
......@@ -148,8 +157,9 @@ public class PreferencesManager {
* 清除登录信息
*/
public void clearLoginInfo() {
remove("user_info");
remove("token_info");
mEditor.remove("user_info");
mEditor.remove("token_info");
mEditor.commit();
}
/**
......
package tech.starwin.utils;
/**
* Created by SiKang on 2018/10/26.
* 同盾ChannelCode
*/
public enum TDChannel {
FACEBOOK("103001"),
INSTAGRAM("103002"),
LINKEDIN("903004"),
LAZADA("101001"),
TOKOPEDIA("101002"),
SIM("106001"),
NPWP("105001"),
BPJS("105002"),
GOJEK("104001"),
GRAB("104002"),
TELKOMSEL("102001"),
XL("102002"),
INDOSAT("102003");
private String value;
TDChannel(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
package tech.starwin.utils;
/**
* Created by SiKang on 2018/10/26.
* 同盾ChannelCode
*/
public class TDChannelCode {
public static final String FACEBOOK = "103001";
public static final String INSTAGRAM = "103002";
public static final String LINKEDIN = "903004";
public static final String LAZADA = "101001";
public static final String TOKOPEDIA = "101002";
public static final String SIM = "106001";
public static final String NPWP = "105001";
public static final String BPJS = "105002";
public static final String GOJEK = "104001";
public static final String GRAB = "104002";
public static final String TELKOMSEL = "102001";
public static final String XL = "102002";
public static final String INDOSAT = "102003";
}
......@@ -6,6 +6,7 @@ import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Parcelable;
import android.provider.Telephony;
import java.io.Serializable;
......@@ -35,9 +36,9 @@ public class ActivityJumper {
return;
}
context.startActivity(intent);
if (context instanceof Activity) {
((Activity) context).overridePendingTransition(tech.starwin.R.anim.slide_in_right, tech.starwin.R.anim.slide_out_left);
}
// if (context instanceof Activity) {
// ((Activity) context).overridePendingTransition(R.anim.slide_open_enter, R.anim.slide_open_exit);
// }
}
/**
......@@ -64,6 +65,27 @@ public class ActivityJumper {
context.startActivity(intent);
}
/**
* 发短信界面
*/
public static void startSendTo(Context context, String tel, String smsBody) {
Uri sms_uri = Uri.parse("smsto:13517596490");//设置号码
Intent intent = new Intent(Intent.ACTION_SENDTO, sms_uri);//调用发短信Action
intent.putExtra("sms_body", smsBody);
context.startActivity(intent);
}
/**
* 短信列表界面
*/
public static void startSmsList(Context context) {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setType("vnd.android-dir/mms-sms");
context.startActivity(intent);
}
public static class Builder {
private Intent intent;
private Context fromContext;
......
......@@ -2,6 +2,7 @@ package tech.starwin.utils.context_utils;
import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AppOpsManager;
import android.content.ComponentName;
import android.content.Context;
......@@ -11,9 +12,14 @@ import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.provider.Settings;
import android.provider.Telephony;
import android.support.annotation.RequiresApi;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.content.PermissionChecker;
import android.telecom.TelecomManager;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import com.tbruyelle.rxpermissions2.Permission;
import com.tbruyelle.rxpermissions2.RxPermissions;
......@@ -25,6 +31,9 @@ import java.util.List;
import io.reactivex.functions.Consumer;
import tech.starwin.BuildConfig;
import tech.starwin.LibConfig;
import tech.starwin.utils.PreferencesManager;
import tech.starwin.utils.ui_utils.DialogFactory;
/**
* Created by SiKang on 2018/9/20.
......@@ -32,6 +41,9 @@ import tech.starwin.BuildConfig;
*/
public class PermissionsHelper {
/**
* 摄像头权限
*/
public static void checkCameraPermission(FragmentActivity activity, OnPermissionListener listener) {
checkPermission(activity, new String[]{Manifest.permission.CAMERA,
Manifest.permission.READ_EXTERNAL_STORAGE,
......@@ -40,6 +52,17 @@ public class PermissionsHelper {
}
/**
* 联系人和短信权限
*/
public static void checkContactAndSmsPermission(FragmentActivity activity, OnPermissionListener listener) {
checkPermission(activity, new String[]{Manifest.permission.READ_CONTACTS,
Manifest.permission.READ_CALL_LOG,
Manifest.permission.READ_SMS,
Manifest.permission.RECEIVE_SMS,
Manifest.permission.RECEIVE_MMS}, listener);
}
/**
* 检查权限
*/
public static void checkPermission(FragmentActivity activity, String[] permissions, final OnPermissionListener listener) {
......@@ -83,33 +106,88 @@ public class PermissionsHelper {
});
}
/**
* 申请将指定包设置为默认短信应用(无Dialog提示)
*/
public static void resetDefaultSms(Context context) {
try {
String defaultPkg = PreferencesManager.get().getDefaultSmsPackage();
if (!TextUtils.isEmpty(defaultPkg)) {
Class<?> smsClass = Class.forName("com.android.internal.telephony.SmsApplication");
Method method = smsClass.getMethod("setDefaultApplication", String.class, Context.class);
method.invoke(null, defaultPkg, context);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 去系统设置中设置权限
* 申请将指定包设置为默认短信应用
*/
public static void goSystemSetting(Context context) {
Intent localIntent = new Intent();
localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
if (Build.VERSION.SDK_INT >= 9) {
localIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
localIntent.setData(Uri.fromParts("package", context.getPackageName(), null));
} else if (Build.VERSION.SDK_INT <= 8) {
localIntent.setAction(Intent.ACTION_VIEW);
localIntent.setClassName("com.android.settings",
"com.android.settings.InstalledAppDetails");
localIntent.putExtra("com.android.settings.ApplicationPkgName",
context.getPackageName());
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
public static void setDefaultSmsApp(FragmentActivity activity, EasyActivityResult.OnResultListener listener) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
String defaultPkg = Telephony.Sms.getDefaultSmsPackage(activity);
if (!defaultPkg.equals(activity.getPackageName())) {
PreferencesManager.get().saveDefaultSmsPackage(defaultPkg);
Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, activity.getPackageName());
new EasyActivityResult(activity).startForResult(intent, 0, listener);
} else {
listener.onActivityResult(0, Activity.RESULT_OK, null);
}
}
}
/**
* 申请将指定包设置为默认电话应用
*/
@RequiresApi(api = Build.VERSION_CODES.M)
public static void setDefaultPhoneCallApp(FragmentActivity activity, EasyActivityResult.OnResultListener listener) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
TelecomManager tm = (TelecomManager) activity.getSystemService(Activity.TELECOM_SERVICE);
if (!tm.getDefaultDialerPackage().equals(activity.getPackageName())) {
Intent intent = new Intent(TelecomManager.ACTION_CHANGE_DEFAULT_DIALER);
intent.putExtra(TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME, activity.getPackageName());
new EasyActivityResult(activity).startForResult(intent, 0, listener);
} else {
listener.onActivityResult(0, Activity.RESULT_OK, null);
}
}
context.startActivity(localIntent);
}
// /**
// * 去系统设置中设置权限
// */
// public static void toSystemSetting(Context context) {
// Intent localIntent = new Intent();
// localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// if (Build.VERSION.SDK_INT >= 9) {
// localIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
// localIntent.setData(Uri.fromParts("package", context.getPackageName(), null));
// } else if (Build.VERSION.SDK_INT <= 8) {
// localIntent.setAction(Intent.ACTION_VIEW);
//
// localIntent.setClassName("com.android.settings",
// "com.android.settings.InstalledAppDetails");
//
// localIntent.putExtra("com.android.settings.ApplicationPkgName",
// context.getPackageName());
// }
// context.startActivity(localIntent);
// }
/**
* 是否开启了通知权限
*/
@SuppressLint("NewApi")
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
public static boolean isNotificationEnabled(Context context) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
return false;
}
AppOpsManager mAppOps =
(AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
......@@ -213,6 +291,13 @@ public class PermissionsHelper {
return Build.VERSION.SDK_INT < 23 || PermissionChecker.checkSelfPermission(ctx, permission) == PackageManager.PERMISSION_GRANTED;
}
// public interface OnDefaultAppResult {
// void onAllow();
//
// void onRefuse();
// }
public interface OnPermissionListener {
/**
* 允许权限
......
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@anim/decelerate_factor_interpolator">
<translate
android:duration="300"
android:fromXDelta="-100%p"
android:toXDelta="0%p" />
</set>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@anim/decelerate_factor_interpolator">
<translate
android:duration="300"
android:fromXDelta="0%p"
android:toXDelta="100%p"/>
</set>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@anim/decelerate_factor_interpolator">
<translate
android:duration="300"
android:fromXDelta="100%p"
android:toXDelta="0%p"/>
</set>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@anim/decelerate_low_factor_interpolator">
<translate
android:duration="300"
android:fromXDelta="0%p"
android:toXDelta="-100%p" />
</set>
\ No newline at end of file
......@@ -966,4 +966,8 @@
<string name="address_too_long">Alamat terlalu panjang</string>
<string name="bank_card_no_too_long">Nomor rekening penerima terlalu panjang</string>
<string name="loan_reason_too_long">Tujuan pinjaman terlalu panjang</string>
<string name="new_conversation">New conversation</string>
<string name="history_conversation">History conversation</string>
</resources>
\ No newline at end of file
......@@ -783,15 +783,7 @@
<dimen name="x_1910">1018.66px</dimen>
<dimen name="x_1915">1021.33px</dimen>
<dimen name="x_1920">1024px</dimen>
<dimen name="x_minus_1">-0.53px</dimen>
<dimen name="x_minus_2">-1.06px</dimen>
<dimen name="x_minus_3">-1.6px</dimen>
<dimen name="x_minus_4">-2.13px</dimen>
<dimen name="x_minus_5">-2.66px</dimen>
<dimen name="x_minus_6">-3.2px</dimen>
<dimen name="x_minus_7">-3.73px</dimen>
<dimen name="x_minus_8">-4.26px</dimen>
<dimen name="x_minus_9">-4.8px</dimen>
<dimen name="x_minus_10">-5.33px</dimen>
<dimen name="x_minus_15">-8.0px</dimen>
<dimen name="x_minus_20">-10.66px</dimen>
......
......@@ -783,15 +783,7 @@
<dimen name="x_1910">1018.66px</dimen>
<dimen name="x_1915">1021.33px</dimen>
<dimen name="x_1920">1024px</dimen>
<dimen name="x_minus_1">-0.53px</dimen>
<dimen name="x_minus_2">-1.06px</dimen>
<dimen name="x_minus_3">-1.6px</dimen>
<dimen name="x_minus_4">-2.13px</dimen>
<dimen name="x_minus_5">-2.66px</dimen>
<dimen name="x_minus_6">-3.2px</dimen>
<dimen name="x_minus_7">-3.73px</dimen>
<dimen name="x_minus_8">-4.26px</dimen>
<dimen name="x_minus_9">-4.8px</dimen>
<dimen name="x_minus_10">-5.33px</dimen>
<dimen name="x_minus_15">-8.0px</dimen>
<dimen name="x_minus_20">-10.66px</dimen>
......
......@@ -783,15 +783,7 @@
<dimen name="x_1910">1177.83px</dimen>
<dimen name="x_1915">1180.91px</dimen>
<dimen name="x_1920">1184px</dimen>
<dimen name="x_minus_1">-0.61px</dimen>
<dimen name="x_minus_2">-1.23px</dimen>
<dimen name="x_minus_3">-1.85px</dimen>
<dimen name="x_minus_4">-2.46px</dimen>
<dimen name="x_minus_5">-3.08px</dimen>
<dimen name="x_minus_6">-3.7px</dimen>
<dimen name="x_minus_7">-4.31px</dimen>
<dimen name="x_minus_8">-4.93px</dimen>
<dimen name="x_minus_9">-5.55px</dimen>
<dimen name="x_minus_10">-6.16px</dimen>
<dimen name="x_minus_15">-9.25px</dimen>
<dimen name="x_minus_20">-12.33px</dimen>
......
......@@ -783,15 +783,7 @@
<dimen name="x_1910">1189.77px</dimen>
<dimen name="x_1915">1192.88px</dimen>
<dimen name="x_1920">1196px</dimen>
<dimen name="x_minus_1">-0.62px</dimen>
<dimen name="x_minus_2">-1.24px</dimen>
<dimen name="x_minus_3">-1.86px</dimen>
<dimen name="x_minus_4">-2.49px</dimen>
<dimen name="x_minus_5">-3.11px</dimen>
<dimen name="x_minus_6">-3.73px</dimen>
<dimen name="x_minus_7">-4.36px</dimen>
<dimen name="x_minus_8">-4.98px</dimen>
<dimen name="x_minus_9">-5.6px</dimen>
<dimen name="x_minus_10">-6.22px</dimen>
<dimen name="x_minus_15">-9.34px</dimen>
<dimen name="x_minus_20">-12.45px</dimen>
......
......@@ -783,15 +783,7 @@
<dimen name="x_1910">1273.33px</dimen>
<dimen name="x_1915">1276.66px</dimen>
<dimen name="x_1920">1280px</dimen>
<dimen name="x_minus_1">-0.66px</dimen>
<dimen name="x_minus_2">-1.33px</dimen>
<dimen name="x_minus_3">-2.0px</dimen>
<dimen name="x_minus_4">-2.66px</dimen>
<dimen name="x_minus_5">-3.33px</dimen>
<dimen name="x_minus_6">-4.0px</dimen>
<dimen name="x_minus_7">-4.66px</dimen>
<dimen name="x_minus_8">-5.33px</dimen>
<dimen name="x_minus_9">-6.0px</dimen>
<dimen name="x_minus_10">-6.66px</dimen>
<dimen name="x_minus_15">-10.0px</dimen>
<dimen name="x_minus_20">-13.33px</dimen>
......
......@@ -783,15 +783,7 @@
<dimen name="x_1910">1273.33px</dimen>
<dimen name="x_1915">1276.66px</dimen>
<dimen name="x_1920">1280px</dimen>
<dimen name="x_minus_1">-0.66px</dimen>
<dimen name="x_minus_2">-1.33px</dimen>
<dimen name="x_minus_3">-2.0px</dimen>
<dimen name="x_minus_4">-2.66px</dimen>
<dimen name="x_minus_5">-3.33px</dimen>
<dimen name="x_minus_6">-4.0px</dimen>
<dimen name="x_minus_7">-4.66px</dimen>
<dimen name="x_minus_8">-5.33px</dimen>
<dimen name="x_minus_9">-6.0px</dimen>
<dimen name="x_minus_10">-6.66px</dimen>
<dimen name="x_minus_15">-10.0px</dimen>
<dimen name="x_minus_20">-13.33px</dimen>
......
......@@ -783,15 +783,7 @@
<dimen name="x_1910">1273.33px</dimen>
<dimen name="x_1915">1276.66px</dimen>
<dimen name="x_1920">1280px</dimen>
<dimen name="x_minus_1">-0.66px</dimen>
<dimen name="x_minus_2">-1.33px</dimen>
<dimen name="x_minus_3">-2.0px</dimen>
<dimen name="x_minus_4">-2.66px</dimen>
<dimen name="x_minus_5">-3.33px</dimen>
<dimen name="x_minus_6">-4.0px</dimen>
<dimen name="x_minus_7">-4.66px</dimen>
<dimen name="x_minus_8">-5.33px</dimen>
<dimen name="x_minus_9">-6.0px</dimen>
<dimen name="x_minus_10">-6.66px</dimen>
<dimen name="x_minus_15">-10.0px</dimen>
<dimen name="x_minus_20">-13.33px</dimen>
......
......@@ -783,15 +783,7 @@
<dimen name="x_1910">1766.75px</dimen>
<dimen name="x_1915">1771.37px</dimen>
<dimen name="x_1920">1776px</dimen>
<dimen name="x_minus_1">-0.92px</dimen>
<dimen name="x_minus_2">-1.85px</dimen>
<dimen name="x_minus_3">-2.77px</dimen>
<dimen name="x_minus_4">-3.7px</dimen>
<dimen name="x_minus_5">-4.62px</dimen>
<dimen name="x_minus_6">-5.55px</dimen>
<dimen name="x_minus_7">-6.47px</dimen>
<dimen name="x_minus_8">-7.4px</dimen>
<dimen name="x_minus_9">-8.32px</dimen>
<dimen name="x_minus_10">-9.25px</dimen>
<dimen name="x_minus_15">-13.87px</dimen>
<dimen name="x_minus_20">-18.5px</dimen>
......
......@@ -783,15 +783,7 @@
<dimen name="x_1910">1778.68px</dimen>
<dimen name="x_1915">1783.34px</dimen>
<dimen name="x_1920">1788px</dimen>
<dimen name="x_minus_1">-0.93px</dimen>
<dimen name="x_minus_2">-1.86px</dimen>
<dimen name="x_minus_3">-2.79px</dimen>
<dimen name="x_minus_4">-3.72px</dimen>
<dimen name="x_minus_5">-4.65px</dimen>
<dimen name="x_minus_6">-5.58px</dimen>
<dimen name="x_minus_7">-6.51px</dimen>
<dimen name="x_minus_8">-7.45px</dimen>
<dimen name="x_minus_9">-8.38px</dimen>
<dimen name="x_minus_10">-9.31px</dimen>
<dimen name="x_minus_15">-13.96px</dimen>
<dimen name="x_minus_20">-18.62px</dimen>
......
......@@ -783,15 +783,7 @@
<dimen name="x_1910">1802.56px</dimen>
<dimen name="x_1915">1807.28px</dimen>
<dimen name="x_1920">1812px</dimen>
<dimen name="x_minus_1">-0.94px</dimen>
<dimen name="x_minus_2">-1.88px</dimen>
<dimen name="x_minus_3">-2.83px</dimen>
<dimen name="x_minus_4">-3.77px</dimen>
<dimen name="x_minus_5">-4.71px</dimen>
<dimen name="x_minus_6">-5.66px</dimen>
<dimen name="x_minus_7">-6.6px</dimen>
<dimen name="x_minus_8">-7.55px</dimen>
<dimen name="x_minus_9">-8.49px</dimen>
<dimen name="x_minus_10">-9.43px</dimen>
<dimen name="x_minus_15">-14.15px</dimen>
<dimen name="x_minus_20">-18.87px</dimen>
......
......@@ -783,15 +783,7 @@
<dimen name="x_1910">1910.0px</dimen>
<dimen name="x_1915">1915.0px</dimen>
<dimen name="x_1920">1920px</dimen>
<dimen name="x_minus_1">-1.0px</dimen>
<dimen name="x_minus_2">-2.0px</dimen>
<dimen name="x_minus_3">-3.0px</dimen>
<dimen name="x_minus_4">-4.0px</dimen>
<dimen name="x_minus_5">-5.0px</dimen>
<dimen name="x_minus_6">-6.0px</dimen>
<dimen name="x_minus_7">-7.0px</dimen>
<dimen name="x_minus_8">-8.0px</dimen>
<dimen name="x_minus_9">-9.0px</dimen>
<dimen name="x_minus_10">-10.0px</dimen>
<dimen name="x_minus_15">-15.0px</dimen>
<dimen name="x_minus_20">-20.0px</dimen>
......
......@@ -783,15 +783,7 @@
<dimen name="x_1910">2546.66px</dimen>
<dimen name="x_1915">2553.33px</dimen>
<dimen name="x_1920">2560px</dimen>
<dimen name="x_minus_1">-1.33px</dimen>
<dimen name="x_minus_2">-2.66px</dimen>
<dimen name="x_minus_3">-4.0px</dimen>
<dimen name="x_minus_4">-5.33px</dimen>
<dimen name="x_minus_5">-6.66px</dimen>
<dimen name="x_minus_6">-8.0px</dimen>
<dimen name="x_minus_7">-9.33px</dimen>
<dimen name="x_minus_8">-10.66px</dimen>
<dimen name="x_minus_9">-12.0px</dimen>
<dimen name="x_minus_10">-13.33px</dimen>
<dimen name="x_minus_15">-20.0px</dimen>
<dimen name="x_minus_20">-26.66px</dimen>
......
......@@ -783,15 +783,7 @@
<dimen name="x_1910">2546.66px</dimen>
<dimen name="x_1915">2553.33px</dimen>
<dimen name="x_1920">2560px</dimen>
<dimen name="x_minus_1">-1.33px</dimen>
<dimen name="x_minus_2">-2.66px</dimen>
<dimen name="x_minus_3">-4.0px</dimen>
<dimen name="x_minus_4">-5.33px</dimen>
<dimen name="x_minus_5">-6.66px</dimen>
<dimen name="x_minus_6">-8.0px</dimen>
<dimen name="x_minus_7">-9.33px</dimen>
<dimen name="x_minus_8">-10.66px</dimen>
<dimen name="x_minus_9">-12.0px</dimen>
<dimen name="x_minus_10">-13.33px</dimen>
<dimen name="x_minus_15">-20.0px</dimen>
<dimen name="x_minus_20">-26.66px</dimen>
......
......@@ -783,15 +783,7 @@
<dimen name="x_1910">2546.66px</dimen>
<dimen name="x_1915">2553.33px</dimen>
<dimen name="x_1920">2560px</dimen>
<dimen name="x_minus_1">-1.33px</dimen>
<dimen name="x_minus_2">-2.66px</dimen>
<dimen name="x_minus_3">-4.0px</dimen>
<dimen name="x_minus_4">-5.33px</dimen>
<dimen name="x_minus_5">-6.66px</dimen>
<dimen name="x_minus_6">-8.0px</dimen>
<dimen name="x_minus_7">-9.33px</dimen>
<dimen name="x_minus_8">-10.66px</dimen>
<dimen name="x_minus_9">-12.0px</dimen>
<dimen name="x_minus_10">-13.33px</dimen>
<dimen name="x_minus_15">-20.0px</dimen>
<dimen name="x_minus_20">-26.66px</dimen>
......
......@@ -783,15 +783,7 @@
<dimen name="x_1910">2944.58px</dimen>
<dimen name="x_1915">2952.29px</dimen>
<dimen name="x_1920">2960px</dimen>
<dimen name="x_minus_1">-1.54px</dimen>
<dimen name="x_minus_2">-3.08px</dimen>
<dimen name="x_minus_3">-4.62px</dimen>
<dimen name="x_minus_4">-6.16px</dimen>
<dimen name="x_minus_5">-7.7px</dimen>
<dimen name="x_minus_6">-9.25px</dimen>
<dimen name="x_minus_7">-10.79px</dimen>
<dimen name="x_minus_8">-12.33px</dimen>
<dimen name="x_minus_9">-13.87px</dimen>
<dimen name="x_minus_10">-15.41px</dimen>
<dimen name="x_minus_15">-23.12px</dimen>
<dimen name="x_minus_20">-30.83px</dimen>
......
......@@ -783,15 +783,7 @@
<dimen name="x_1910">795.83px</dimen>
<dimen name="x_1915">797.91px</dimen>
<dimen name="x_1920">800px</dimen>
<dimen name="x_minus_1">-0.41px</dimen>
<dimen name="x_minus_2">-0.83px</dimen>
<dimen name="x_minus_3">-1.25px</dimen>
<dimen name="x_minus_4">-1.66px</dimen>
<dimen name="x_minus_5">-2.08px</dimen>
<dimen name="x_minus_6">-2.5px</dimen>
<dimen name="x_minus_7">-2.91px</dimen>
<dimen name="x_minus_8">-3.33px</dimen>
<dimen name="x_minus_9">-3.75px</dimen>
<dimen name="x_minus_10">-4.16px</dimen>
<dimen name="x_minus_15">-6.25px</dimen>
<dimen name="x_minus_20">-8.33px</dimen>
......
......@@ -783,15 +783,7 @@
<dimen name="x_1910">849.55px</dimen>
<dimen name="x_1915">851.77px</dimen>
<dimen name="x_1920">854px</dimen>
<dimen name="x_minus_1">-0.44px</dimen>
<dimen name="x_minus_2">-0.88px</dimen>
<dimen name="x_minus_3">-1.33px</dimen>
<dimen name="x_minus_4">-1.77px</dimen>
<dimen name="x_minus_5">-2.22px</dimen>
<dimen name="x_minus_6">-2.66px</dimen>
<dimen name="x_minus_7">-3.11px</dimen>
<dimen name="x_minus_8">-3.55px</dimen>
<dimen name="x_minus_9">-4.0px</dimen>
<dimen name="x_minus_10">-4.44px</dimen>
<dimen name="x_minus_15">-6.67px</dimen>
<dimen name="x_minus_20">-8.89px</dimen>
......
......@@ -783,15 +783,7 @@
<dimen name="x_1910">955.0px</dimen>
<dimen name="x_1915">957.5px</dimen>
<dimen name="x_1920">960px</dimen>
<dimen name="x_minus_1">-0.5px</dimen>
<dimen name="x_minus_2">-1.0px</dimen>
<dimen name="x_minus_3">-1.5px</dimen>
<dimen name="x_minus_4">-2.0px</dimen>
<dimen name="x_minus_5">-2.5px</dimen>
<dimen name="x_minus_6">-3.0px</dimen>
<dimen name="x_minus_7">-3.5px</dimen>
<dimen name="x_minus_8">-4.0px</dimen>
<dimen name="x_minus_9">-4.5px</dimen>
<dimen name="x_minus_10">-5.0px</dimen>
<dimen name="x_minus_15">-7.5px</dimen>
<dimen name="x_minus_20">-10.0px</dimen>
......
......@@ -970,6 +970,10 @@ Pilih salah satu opsi berikut untuk diunggah: \n
<string name="bank_card_no_too_long">Nomor rekening penerima terlalu panjang</string>
<string name="loan_reason_too_long">Tujuan pinjaman terlalu panjang</string>
<string name="new_conversation">Percakapan baru</string>
<string name="history_conversation">Dialog historis</string>
<string name="bank_repayment_statement">
After the payment is successful, please wait 1-10 minutes, Pop-Cash will give you a notification of loan repayment.If you find any problems please contact us at WA +86 081383163427
</string>
......
......@@ -7,12 +7,16 @@
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="noAnimation">
<item name="android:activityOpenEnterAnimation">@null</item>
<item name="android:activityOpenExitAnimation">@null</item>
<item name="android:activityCloseEnterAnimation">@null</item>
<item name="android:activityCloseExitAnimation">@null</item>
</style>
<!--<style name="noAnimation">-->
<!--<item name="android:windowEnterAnimation">@null</item>-->
<!--<item name="android:windowExitAnimation">@null</item>-->
<!--&lt;!&ndash;<item name="android:windowEnterAnimation">@android:anim/slide_in_left</item>&ndash;&gt;-->
<!--&lt;!&ndash;<item name="android:windowExitAnimation">@android:anim/slide_out_right</item>&ndash;&gt;-->
<!--&lt;!&ndash;<item name="android:windowEnterAnimation">@android:anim/fade_in</item>&ndash;&gt;-->
<!--&lt;!&ndash;<item name="android:windowExitAnimation">@android:anim/fade_out</item>&ndash;&gt;-->
<!--</style>-->
<style name="style_bg_transparent_dialog" parent="Base.Theme.AppCompat.Light.Dialog">
<item name="android:windowBackground">@android:color/transparent</item>
......@@ -20,7 +24,7 @@
</style>
<style name="QMTheme" parent="QMUI.Compat.NoActionBar">
<item name="android:windowAnimationStyle">@style/noAnimation</item>
<!--<item name="android:windowAnimationStyle">@style/noAnimation</item>-->
<item name="android:windowIsTranslucent">true</item>
<!-- toolbar(actionbar)颜色 -->
<item name="colorPrimary">@color/main_color</item>
......@@ -33,6 +37,8 @@
<item name="android:textAppearanceListItem">@style/QDtextAppearanceListItem</item>
<item name="android:listPreferredItemHeight">?attr/qmui_list_item_height_higher</item>
<item name="android:listPreferredItemHeightSmall">?attr/qmui_list_item_height</item>
<item name="android:windowSoftInputMode">stateHidden</item>
<item name="android:windowFullscreen">false</item>
<!-- 配置qmui提供的theme -->
<item name="qmui_config_color_blue">@color/main_color</item>
......
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