增加一些奥乐云手动测试的管控
This commit is contained in:
@@ -249,6 +249,13 @@ dependencies {
|
||||
implementation 'androidx.multidex:multidex:2.0.1'
|
||||
implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'
|
||||
|
||||
// implementation "androidx.datastore:datastore:1.0.0"
|
||||
// // optional - RxJava2 support
|
||||
//// implementation "androidx.datastore:datastore-rxjava2:1.0.0"
|
||||
// // optional - RxJava3 support
|
||||
// implementation "androidx.datastore:datastore-rxjava3:1.0.0"
|
||||
// implementation "androidx.datastore:datastore-core:1.0.0"
|
||||
|
||||
testImplementation 'junit:junit:4.12'
|
||||
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
|
||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
|
||||
@@ -284,17 +291,18 @@ dependencies {
|
||||
implementation 'com.google.code.gson:gson:2.8.6'
|
||||
implementation 'com.google.zxing:core:3.3.0'
|
||||
implementation 'com.google.android.material:material:1.4.0'
|
||||
|
||||
//Jackson
|
||||
implementation 'org.codehaus.jackson:jackson-mapper-asl:1.9.13'
|
||||
implementation 'org.codehaus.jackson:jackson-core-asl:1.9.13'
|
||||
//view绑定
|
||||
implementation 'com.jakewharton:butterknife:10.2.1'
|
||||
implementation 'com.jakewharton:butterknife:10.2.3'
|
||||
// If you are using Kotlin, replace annotationProcessor with kapt.
|
||||
// annotationProcessor rootProject.ext.dependencies["butterknife-compiler"]
|
||||
annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.1'
|
||||
annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.3'
|
||||
|
||||
//MMKV
|
||||
implementation 'com.tencent:mmkv-static:1.2.10'
|
||||
implementation 'com.tencent:mmkv-static:1.2.13'
|
||||
//腾讯移动推送 TPNS
|
||||
implementation 'com.tencent.tpns:tpns:1.2.2.0-release'
|
||||
|
||||
@@ -331,7 +339,7 @@ dependencies {
|
||||
//动态权限框架
|
||||
implementation 'com.yanzhenjie:permission:2.0.3'
|
||||
//沉浸状态栏
|
||||
implementation 'com.gitee.zackratos:UltimateBarX:0.7.1'
|
||||
implementation 'com.gitee.zackratos:UltimateBarX:0.8.0'
|
||||
|
||||
// implementation 'com.gyf.barlibrary:barlibrary:2.2.8'
|
||||
// 基础依赖包,必须要依赖
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.tt.ttutils.activity;
|
||||
|
||||
import android.app.StatusBarManager;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.media.AudioManager;
|
||||
@@ -7,6 +8,7 @@ import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.provider.Settings;
|
||||
import android.util.Log;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.View;
|
||||
import android.view.inputmethod.InputMethodInfo;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
@@ -18,7 +20,10 @@ import androidx.appcompat.app.AppCompatActivity;
|
||||
import com.tt.ttutils.BuildConfig;
|
||||
import com.tt.ttutils.R;
|
||||
import com.tt.ttutils.base.BaseActivity;
|
||||
import com.tt.ttutils.utils.java.JGYUtils;
|
||||
import com.tt.ttutils.utils.java.ToastUtil;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -87,6 +92,15 @@ public class AoleyunTestActivity extends BaseActivity {
|
||||
@BindView(R.id.bt_status_off)
|
||||
Button bt_status_off;
|
||||
|
||||
@BindView(R.id.bt_statusbar_collapse)
|
||||
Button bt_statusbar_collapse;
|
||||
@BindView(R.id.bt_collapse_statu)
|
||||
Button bt_collapse_statu;
|
||||
@BindView(R.id.bt_collapse_on)
|
||||
Button bt_collapse_on;
|
||||
@BindView(R.id.bt_collapse_off)
|
||||
Button bt_collapse_off;
|
||||
|
||||
@BindView(R.id.bt_hotspot)
|
||||
Button bt_hotspot;
|
||||
@BindView(R.id.bt_hotspot_statu)
|
||||
@@ -205,6 +219,10 @@ public class AoleyunTestActivity extends BaseActivity {
|
||||
sendBroadcast(intent);
|
||||
});
|
||||
|
||||
bt_sd_statu.setOnClickListener(view -> {
|
||||
int aole_sdcard_forbid_on = Settings.System.getInt(getContentResolver(), "aole_sdcard_forbid_on", 0);
|
||||
bt_sd_statu.setText("状态:" + aole_sdcard_forbid_on);
|
||||
});
|
||||
bt_sd_on.setOnClickListener(view -> Settings.System.putInt(getContentResolver(), "aole_sdcard_forbid_on", 0));
|
||||
bt_sd_off.setOnClickListener(view -> Settings.System.putInt(getContentResolver(), "aole_sdcard_forbid_on", 1));
|
||||
|
||||
@@ -216,8 +234,8 @@ public class AoleyunTestActivity extends BaseActivity {
|
||||
bt_developer_statu.setText("状态:" + aole_Developeroptions);
|
||||
}
|
||||
});
|
||||
bt_developer_on.setOnClickListener(view -> Settings.System.putInt(getContentResolver(), "aole_Developeroptions", 0));
|
||||
bt_developer_off.setOnClickListener(view -> Settings.System.putInt(getContentResolver(), "aole_Developeroptions", 1));
|
||||
bt_developer_on.setOnClickListener(view -> setDeveloperOptions(0));
|
||||
bt_developer_off.setOnClickListener(view -> setDeveloperOptions(1));
|
||||
|
||||
bt_navigation_on.setOnClickListener(view -> {
|
||||
Intent navIntent = new Intent("aole_show_NavigationBar").setPackage("com.android.systemui");
|
||||
@@ -237,6 +255,24 @@ public class AoleyunTestActivity extends BaseActivity {
|
||||
sendBroadcast(navIntent);
|
||||
});
|
||||
|
||||
bt_collapse_on.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
StatusBarManager mStatusBarManager = (StatusBarManager) getApplicationContext().getSystemService(Context.STATUS_BAR_SERVICE);
|
||||
mStatusBarManager.disable(StatusBarManager.DISABLE_EXPAND);
|
||||
// mStatusBarManager.disable(StatusBarManager.DISABLE2_NOTIFICATION_SHADE);
|
||||
}
|
||||
});
|
||||
|
||||
bt_collapse_off.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
StatusBarManager mStatusBarManager = (StatusBarManager) getApplicationContext().getSystemService(Context.STATUS_BAR_SERVICE);
|
||||
mStatusBarManager.disable(StatusBarManager.DISABLE_NONE);
|
||||
// mStatusBarManager.disable(StatusBarManager.DISABLE2_NONE);
|
||||
}
|
||||
});
|
||||
|
||||
bt_hotspot_on.setOnClickListener(view -> {
|
||||
Settings.System.putInt(getContentResolver(), "aole_hotspot_forbid_on", 0);
|
||||
});
|
||||
@@ -304,6 +340,26 @@ public class AoleyunTestActivity extends BaseActivity {
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
||||
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
|
||||
lazyExit();
|
||||
return true;
|
||||
}
|
||||
return super.onKeyDown(keyCode, event);
|
||||
}
|
||||
|
||||
private long mPreClickTime;
|
||||
|
||||
private void lazyExit() {
|
||||
if (System.currentTimeMillis() - mPreClickTime > 5000) {
|
||||
ToastUtil.show("再按一次,退出");
|
||||
mPreClickTime = System.currentTimeMillis();
|
||||
} else {
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
||||
private void gotoLauncher() {
|
||||
Intent i = new Intent(Intent.ACTION_MAIN);
|
||||
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //android123提示如果是服务里调用,必须加入new task标识
|
||||
@@ -322,4 +378,26 @@ public class AoleyunTestActivity extends BaseActivity {
|
||||
Log.e(TAG, "getInputMethodId: " + id);
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setDeveloperOptions(int state) {
|
||||
Log.e(TAG, "setDeveloperOptions: " + state);
|
||||
Settings.System.putInt(getContentResolver(), "aole_Developeroptions", state);
|
||||
int old_dev_enabled = Settings.Global.getInt(getContentResolver(), Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0);
|
||||
Log.e(TAG, "setDeveloperOptions: old_dev_enabled = " + old_dev_enabled);
|
||||
int new_state = (state == 1 ? 0 : 1);
|
||||
if (old_dev_enabled != new_state) {
|
||||
Settings.Global.putInt(getContentResolver(), Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, new_state);
|
||||
Settings.Global.putInt(getContentResolver(), Settings.Global.ADB_ENABLED, new_state);
|
||||
}
|
||||
if (state == 1) {
|
||||
// Intent intent = new Intent();
|
||||
// intent.setAction("qch_developeroptions_close");
|
||||
// intent.setPackage(JGYActions.ANDROID_SETTINGS_PACKAGE_NAME);
|
||||
// sendBroadcast(intent);
|
||||
Log.e(TAG, "setDeveloperOptions: " + "关闭开发者模式");
|
||||
} else {
|
||||
Log.e(TAG, "setDeveloperOptions: " + "打开开发者模式");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -455,7 +455,13 @@ public class CacheHelper {
|
||||
String cachePath;
|
||||
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())
|
||||
|| !Environment.isExternalStorageRemovable()) {
|
||||
cachePath = context.getExternalCacheDir().getPath();
|
||||
if (context.getExternalCacheDir() != null) {
|
||||
cachePath = context.getExternalCacheDir().getPath();
|
||||
} else if (context.getExternalFilesDir("cache") != null) {
|
||||
cachePath = context.getExternalFilesDir("cache").getPath();
|
||||
} else {
|
||||
cachePath = context.getCacheDir().getPath();
|
||||
}
|
||||
} else {
|
||||
cachePath = context.getCacheDir().getPath();
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.tt.ttutils.network.interceptor;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
import com.tt.ttutils.BuildConfig;
|
||||
import com.tt.ttutils.utils.java.MD5Util;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -12,9 +13,14 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||
import okhttp3.Interceptor;
|
||||
import okhttp3.Protocol;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.RequestBody;
|
||||
import okhttp3.Response;
|
||||
import okhttp3.ResponseBody;
|
||||
import okio.Buffer;
|
||||
|
||||
/**
|
||||
* v1.0 2022-07-15 16:16:52
|
||||
*/
|
||||
public class RepeatRequestInterceptor implements Interceptor {
|
||||
private static final String TAG = RepeatRequestInterceptor.class.getSimpleName();
|
||||
|
||||
@@ -25,17 +31,22 @@ public class RepeatRequestInterceptor implements Interceptor {
|
||||
@Override
|
||||
public Response intercept(@NotNull Chain chain) throws IOException {
|
||||
Request request = chain.request();
|
||||
Response response = chain.proceed(request);
|
||||
ResponseBody responseBody = response.body();
|
||||
|
||||
Response response = chain.proceed(chain.request());
|
||||
String content = response.body().string();
|
||||
// Log.e(TAG, "请求体返回:| Response:" + content);
|
||||
//会消费请求,导致请求多次
|
||||
String content = responseBody.string();
|
||||
// Response copy = response.newBuilder().body(responseBody).build();
|
||||
ResponseBody copy = ResponseBody.create(responseBody.contentType(), content);
|
||||
if (BuildConfig.DEBUG) {
|
||||
Log.e(TAG, "请求体返回:| Response: " + request.url().encodedPath() + "\t body: " + content);
|
||||
}
|
||||
//相同的请求
|
||||
String requestKey = MD5Util.getUpperMD5Str(request.method() + request.url().toString() + request.body());
|
||||
String requestKey = MD5Util.getUpperMD5Str(request.method() + request.url().toString() + requestBodyToString(request.body()));
|
||||
long time = System.currentTimeMillis();//请求时间
|
||||
try {
|
||||
if (requestIdsMap.size() > 0 && requestIdsMap.containsKey(requestKey)) {
|
||||
// Log.e("REPEAT-REQUEST", "重复请求:" + requestKey + " Method @" + request.method() + " --- " + " URL = " + request.url() + "\t" + bodyToString(request));
|
||||
Log.e("REPEAT-REQUEST", "重复请求:" + requestKey + " Method @" + request.method() + " --- " + " URL = " + request.url());
|
||||
log("重复请求:", requestKey, request);
|
||||
//下面这行写了不会抛出onerror
|
||||
// chain.call().cancel();
|
||||
return new Response.Builder()
|
||||
@@ -44,32 +55,53 @@ public class RepeatRequestInterceptor implements Interceptor {
|
||||
.build();
|
||||
}
|
||||
requestIdsMap.put(requestKey, time);
|
||||
// Log.e("REPEAT-REQUEST", "注册请求:" + requestKey + " Method @" + request.method() + " --- " + " URL = " + request.url() + "\t" + bodyToString(request));
|
||||
Log.e("REPEAT-REQUEST", "注册请求:" + requestKey + " Method @" + request.method() + " --- " + " URL = " + request.url());
|
||||
log("注册请求:", requestKey, request);
|
||||
// RepeatRequestInterceptor.Builder builder = request.newBuilder();
|
||||
// builder.addHeader("header", jsonObject.toString());
|
||||
return chain.proceed(request);
|
||||
return response.newBuilder().body(copy).build();
|
||||
} catch (IOException e) {
|
||||
Log.e(TAG, "intercept: " + e.getMessage());
|
||||
throw e;
|
||||
} finally {
|
||||
if (requestIdsMap.containsKey(requestKey) && requestIdsMap.containsValue(time)) {//请求任务完成删除map中的数据
|
||||
requestIdsMap.remove(requestKey);
|
||||
Log.e("REPEAT-REQUEST", "移除请求:" + requestKey + " Method @" + request.method() + " --- " + " URL = " + request.url() + "\t" + bodyToString(request));
|
||||
// Log.e("REPEAT-REQUEST", "移除请求:" + requestKey + " Method @" + request.method() + " --- " + " URL = " + request.url());
|
||||
log("移除请求:", requestKey, request);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void log(String action, String requestKey, Request request) {
|
||||
if (BuildConfig.DEBUG) {
|
||||
Log.e("REPEAT-REQUEST", action + requestKey + " Method @" + request.method() + " --- " + " URL = " + request.url().encodedPath() + "\t" + bodyToString(request));
|
||||
} else {
|
||||
Log.e("REPEAT-REQUEST", action + requestKey + " Method @" + request.method());
|
||||
}
|
||||
}
|
||||
|
||||
private static String bodyToString(final Request request) {
|
||||
try {
|
||||
final Request copy = request.newBuilder().build();
|
||||
final Buffer buffer = new Buffer();
|
||||
copy.body().writeTo(buffer);
|
||||
if (buffer.size() > 4096) {
|
||||
return "-too long";
|
||||
}
|
||||
return buffer.readUtf8();
|
||||
} catch (Exception e) {
|
||||
return "-";
|
||||
}
|
||||
}
|
||||
|
||||
private static String requestBodyToString(RequestBody body) {
|
||||
try {
|
||||
final Buffer buffer = new Buffer();
|
||||
body.writeTo(buffer);
|
||||
if (buffer.size() > 4096) {
|
||||
return "-too long";
|
||||
}
|
||||
return buffer.readUtf8();
|
||||
} catch (Exception e) {
|
||||
return "-";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.provider.Settings;
|
||||
import android.util.Log;
|
||||
|
||||
import com.tt.ttutils.BuildConfig;
|
||||
@@ -203,4 +204,5 @@ public class JGYUtils {
|
||||
bootIntent.setComponent(new ComponentName(PACKAGE_NOTIFY, CLASS_NOTIFY));
|
||||
mContext.sendBroadcast(bootIntent);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -250,6 +250,43 @@
|
||||
android:text="off" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:visibility="visible">
|
||||
|
||||
<Button
|
||||
android:id="@+id/bt_statusbar_collapse"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="状态栏下拉" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/bt_collapse_statu"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="状态:" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/bt_collapse_on"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:maxLines="1"
|
||||
android:singleLine="true"
|
||||
android:text="on" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/bt_collapse_off"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="off" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
Reference in New Issue
Block a user