mirror of
http://gitea.winboll.cc/Studio/WinBoLL.git
synced 2026-06-29 20:12:24 +08:00
Merge branch 'aes' into merge
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
#Created by .winboll/winboll_app_build.gradle
|
||||
#Wed May 27 20:22:45 HKT 2026
|
||||
#Mon Jun 01 16:38:02 GMT 2026
|
||||
stageCount=11
|
||||
libraryProject=libaes
|
||||
baseVersion=15.20
|
||||
publishVersion=15.20.10
|
||||
buildCount=0
|
||||
buildCount=4
|
||||
baseBetaVersion=15.20.11
|
||||
|
||||
@@ -5,10 +5,11 @@ package cc.winboll.studio.aes;
|
||||
* @Date 2024/06/13 19:03:58
|
||||
* @Describe AES应用类
|
||||
*/
|
||||
import android.view.Gravity;
|
||||
import cc.winboll.studio.libaes.utils.AESThemeUtil;
|
||||
import cc.winboll.studio.libaes.utils.WinBoLLActivityManager;
|
||||
import cc.winboll.studio.libappbase.GlobalApplication;
|
||||
import cc.winboll.studio.libappbase.ToastUtils;
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
||||
public class App extends GlobalApplication {
|
||||
@@ -18,6 +19,7 @@ public class App extends GlobalApplication {
|
||||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
AESThemeUtil.init(null);
|
||||
WinBoLLActivityManager.init(this);
|
||||
|
||||
// 初始化 Toast 框架
|
||||
|
||||
@@ -66,9 +66,9 @@ dependencies {
|
||||
//annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
|
||||
|
||||
// WinBoLL库 nexus.winboll.cc 地址
|
||||
api 'cc.winboll.studio:libappbase:15.20.22'
|
||||
//api 'cc.winboll.studio:libappbase:15.20.22'
|
||||
// 备用库 jitpack.io 地址
|
||||
//api 'com.github.ZhanGSKen:libappbase:appbase-v15.15.21'
|
||||
api 'com.github.ZhanGSKen:libappbase:appbase-v15.20.22'
|
||||
|
||||
api fileTree(dir: 'libs', include: ['*.jar'])
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
#Created by .winboll/winboll_app_build.gradle
|
||||
#Wed May 27 20:22:45 HKT 2026
|
||||
#Mon Jun 01 16:38:02 GMT 2026
|
||||
stageCount=11
|
||||
libraryProject=libaes
|
||||
baseVersion=15.20
|
||||
publishVersion=15.20.10
|
||||
buildCount=0
|
||||
buildCount=4
|
||||
baseBetaVersion=15.20.11
|
||||
|
||||
@@ -15,6 +15,7 @@ import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.AdapterView;
|
||||
|
||||
import androidx.appcompat.app.ActionBarDrawerToggle;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
@@ -22,8 +23,10 @@ import androidx.drawerlayout.widget.DrawerLayout;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
import androidx.fragment.app.FragmentTransaction;
|
||||
|
||||
import cc.winboll.studio.libaes.DrawerMenuDataAdapter;
|
||||
import cc.winboll.studio.libaes.R;
|
||||
import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity;
|
||||
import cc.winboll.studio.libaes.models.AESThemeBean;
|
||||
import cc.winboll.studio.libaes.models.DrawerMenuBean;
|
||||
import cc.winboll.studio.libaes.utils.AESThemeUtil;
|
||||
@@ -34,8 +37,8 @@ import cc.winboll.studio.libaes.views.ADsBannerView;
|
||||
import cc.winboll.studio.libappbase.GlobalApplication;
|
||||
import cc.winboll.studio.libappbase.LogUtils;
|
||||
import com.baoyz.widget.PullRefreshLayout;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity;
|
||||
|
||||
public abstract class DrawerFragmentActivity extends AppCompatActivity implements IWinBoLLActivity, AdapterView.OnItemClickListener {
|
||||
|
||||
@@ -44,7 +47,6 @@ public abstract class DrawerFragmentActivity extends AppCompatActivity implement
|
||||
static final String SHAREDPREFERENCES_NAME = "SHAREDPREFERENCES_NAME";
|
||||
static final String DRAWER_THEME_TYPE = "DRAWER_THEME_TYPE";
|
||||
|
||||
//protected Context mContext;
|
||||
ActivityType mActivityType;
|
||||
ActionBarDrawerToggle mActionBarDrawerToggle;
|
||||
DrawerLayout mDrawerLayout;
|
||||
@@ -59,13 +61,14 @@ public abstract class DrawerFragmentActivity extends AppCompatActivity implement
|
||||
public enum ActivityType { Main, Secondary }
|
||||
protected volatile AESThemeBean.ThemeType mThemeType;
|
||||
protected ArrayList<DrawerMenuBean> malDrawerMenuItem;
|
||||
|
||||
abstract protected ActivityType initActivityType();
|
||||
//abstract protected View initContentView(LayoutInflater inflater, ViewGroup rootView);
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
// 替换:使用工具类统一应用主题
|
||||
AESThemeUtil.applyAppCompatTheme(this);
|
||||
mThemeType = AESThemeBean.getThemeStyleType(AESThemeUtil.getThemeTypeID(getApplicationContext()));
|
||||
setTheme(AESThemeUtil.getThemeTypeID(getApplicationContext()));
|
||||
super.onCreate(savedInstanceState);
|
||||
WinBoLLActivityManager.getInstance().add(this);
|
||||
mActivityType = initActivityType();
|
||||
@@ -78,53 +81,32 @@ public abstract class DrawerFragmentActivity extends AppCompatActivity implement
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTag() {
|
||||
return TAG;
|
||||
}
|
||||
@Override
|
||||
public String getTag() {
|
||||
return TAG;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
WinBoLLActivityManager.getInstance().registeRemove(this);
|
||||
WinBoLLActivityManager.getInstance().registeRemove(this);
|
||||
super.onDestroy();
|
||||
// 修复:释放广告资源,避免内存泄漏
|
||||
ADsBannerView adsBannerView = findViewById(R.id.adsbanner);
|
||||
if (adsBannerView != null) {
|
||||
adsBannerView.releaseAdResources();
|
||||
}
|
||||
// 修复:释放广告资源,避免内存泄漏
|
||||
ADsBannerView adsBannerView = findViewById(R.id.adsbanner);
|
||||
if (adsBannerView != null) {
|
||||
adsBannerView.releaseAdResources();
|
||||
}
|
||||
}
|
||||
|
||||
/*@Override
|
||||
public Intent getIntent() {
|
||||
// TODO: Implement this method
|
||||
return super.getIntent();
|
||||
}
|
||||
|
||||
public Context getContext() {
|
||||
return this.mContext;
|
||||
}*/
|
||||
|
||||
@Override
|
||||
public MenuInflater getMenuInflater() {
|
||||
// TODO: Implement this method
|
||||
return super.getMenuInflater();
|
||||
}
|
||||
|
||||
/*public void setSubtitle(CharSequence context) {
|
||||
// TODO: Implement this method
|
||||
getSupportActionBar().setSubtitle(context);
|
||||
}*/
|
||||
|
||||
@Override
|
||||
public void recreate() {
|
||||
super.recreate();
|
||||
}
|
||||
|
||||
/*@Override
|
||||
public boolean moveTaskToBack(boolean nonRoot) {
|
||||
return super.moveTaskToBack(nonRoot);
|
||||
}*/
|
||||
|
||||
@Override
|
||||
public void startActivity(Intent intent) {
|
||||
super.startActivity(intent);
|
||||
@@ -135,26 +117,6 @@ public abstract class DrawerFragmentActivity extends AppCompatActivity implement
|
||||
super.startActivityForResult(intent, requestCode, options);
|
||||
}
|
||||
|
||||
/*@Override
|
||||
public FragmentManager getSupportFragmentManager() {
|
||||
return super.getSupportFragmentManager();
|
||||
}
|
||||
|
||||
public void setSubtitle(int resId) {
|
||||
// TODO: Implement this method
|
||||
getSupportActionBar().setSubtitle(resId);
|
||||
}
|
||||
|
||||
public void setTitle(CharSequence context) {
|
||||
// TODO: Implement this method
|
||||
getSupportActionBar().setTitle(context);
|
||||
}
|
||||
|
||||
public void setTitle(int resId) {
|
||||
// TODO: Implement this method
|
||||
getSupportActionBar().setTitle(resId);
|
||||
}*/
|
||||
|
||||
@Override
|
||||
public SharedPreferences getSharedPreferences(String name, int mode) {
|
||||
return super.getSharedPreferences(name, mode);
|
||||
@@ -162,7 +124,6 @@ public abstract class DrawerFragmentActivity extends AppCompatActivity implement
|
||||
|
||||
@Override
|
||||
public Context getApplicationContext() {
|
||||
// TODO: Implement this method
|
||||
return super.getApplicationContext();
|
||||
}
|
||||
|
||||
@@ -173,25 +134,27 @@ public abstract class DrawerFragmentActivity extends AppCompatActivity implement
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
if (AESThemeUtil.onAppThemeItemSelected(this, item)) {
|
||||
// 替换为 DrawerFragmentActivity 专属点击处理方法
|
||||
if (AESThemeUtil.onWinBoLLThemeItemSelected(this, item)) {
|
||||
recreate();
|
||||
} if (DevelopUtils.onDevelopItemSelected(this, item)) {
|
||||
LogUtils.d(TAG, String.format("onOptionsItemSelected item.getItemId() %d ", item.getItemId()));
|
||||
} else {
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
}
|
||||
if (DevelopUtils.onDevelopItemSelected(this, item)) {
|
||||
LogUtils.d(TAG, String.format("onOptionsItemSelected item.getItemId() %d ", item.getItemId()));
|
||||
} else {
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
|
||||
ADsBannerView adsBannerView = findViewById(R.id.adsbanner);
|
||||
if (adsBannerView != null) {
|
||||
adsBannerView.resumeADs(DrawerFragmentActivity.this);
|
||||
}
|
||||
ADsBannerView adsBannerView = findViewById(R.id.adsbanner);
|
||||
if (adsBannerView != null) {
|
||||
adsBannerView.resumeADs(DrawerFragmentActivity.this);
|
||||
}
|
||||
}
|
||||
|
||||
void initRootView() {
|
||||
@@ -213,14 +176,13 @@ public abstract class DrawerFragmentActivity extends AppCompatActivity implement
|
||||
mPullRefreshLayout = findViewById(R.id.activitydrawerfragmentPullRefreshLayout1);
|
||||
|
||||
mPullRefreshLayout.setOnRefreshListener(new PullRefreshLayout.OnRefreshListener() {
|
||||
@Override
|
||||
public void onRefresh() {
|
||||
//LogUtils.d(TAG, "onRefresh");
|
||||
reinitDrawerMenuItemList(malDrawerMenuItem);
|
||||
mDrawerMenuDataAdapter.notifyDataSetChanged();
|
||||
mPullRefreshLayout.setRefreshing(false);
|
||||
}
|
||||
});
|
||||
@Override
|
||||
public void onRefresh() {
|
||||
reinitDrawerMenuItemList(malDrawerMenuItem);
|
||||
mDrawerMenuDataAdapter.notifyDataSetChanged();
|
||||
mPullRefreshLayout.setRefreshing(false);
|
||||
}
|
||||
});
|
||||
|
||||
malDrawerMenuItem = new ArrayList<DrawerMenuBean>();
|
||||
|
||||
@@ -236,68 +198,51 @@ public abstract class DrawerFragmentActivity extends AppCompatActivity implement
|
||||
|
||||
mActionBarDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, mToolbar, R.string.lib_name, R.string.lib_name) {
|
||||
@Override
|
||||
public void onDrawerOpened(View drawerView) {//完全打开时触发
|
||||
public void onDrawerOpened(View drawerView) {
|
||||
super.onDrawerOpened(drawerView);
|
||||
mIsDrawerOpened = true;
|
||||
mIsDrawerOpening = false;
|
||||
//Toast.makeText(MainActivity.this,"onDrawerOpened",Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDrawerClosed(View drawerView) {//完全关闭时触发
|
||||
public void onDrawerClosed(View drawerView) {
|
||||
super.onDrawerClosed(drawerView);
|
||||
mIsDrawerOpened = false;
|
||||
mIsDrawerClosing = false;
|
||||
//Toast.makeText(MainActivity.this,"onDrawerClosed",Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
/**
|
||||
* 当抽屉被滑动的时候调用此方法
|
||||
* slideOffset表示 滑动的幅度(0-1)
|
||||
*/
|
||||
@Override
|
||||
public void onDrawerSlide(View drawerView, float slideOffset) {
|
||||
super.onDrawerSlide(drawerView, slideOffset);
|
||||
}
|
||||
|
||||
/**
|
||||
* 当抽屉滑动状态改变的时候被调用
|
||||
* 状态值是STATE_IDLE(闲置--0), STATE_DRAGGING(拖拽的--1), STATE_SETTLING(固定--2)中之一。
|
||||
*具体状态可以慢慢调试
|
||||
*/
|
||||
@Override
|
||||
public void onDrawerStateChanged(int newState) {
|
||||
super.onDrawerStateChanged(newState);
|
||||
}
|
||||
};
|
||||
|
||||
//设置显示旋转菜单
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
//通过下面这句实现toolbar和Drawer的联动:如果没有这行代码,箭头是不会随着侧滑菜单的开关而变换的(或者没有箭头),
|
||||
// 可以尝试一下,不影响正常侧滑
|
||||
mActionBarDrawerToggle.syncState();
|
||||
mDrawerLayout.setDrawerListener(mActionBarDrawerToggle);
|
||||
|
||||
//去掉侧滑的默认图标(动画箭头图标),也可以选择不去,
|
||||
//不去的话把这一行注释掉或者改成true,然后把toolbar.setNavigationIcon注释掉就行了
|
||||
//mActionBarDrawerToggle.setDrawerIndicatorEnabled(false);
|
||||
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (mIsDrawerOpened || mIsDrawerOpening) {
|
||||
mIsDrawerClosing = true;
|
||||
mIsDrawerOpening = false;
|
||||
mDrawerLayout.closeDrawer(mPullRefreshLayout);
|
||||
return;
|
||||
}
|
||||
if (!mIsDrawerOpened || mIsDrawerClosing) {
|
||||
mIsDrawerOpening = true;
|
||||
mIsDrawerClosing = false;
|
||||
mDrawerLayout.openDrawer(mPullRefreshLayout);
|
||||
return;
|
||||
}
|
||||
}
|
||||
});
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (mIsDrawerOpened || mIsDrawerOpening) {
|
||||
mIsDrawerClosing = true;
|
||||
mIsDrawerOpening = false;
|
||||
mDrawerLayout.closeDrawer(mPullRefreshLayout);
|
||||
return;
|
||||
}
|
||||
if (!mIsDrawerOpened || mIsDrawerClosing) {
|
||||
mIsDrawerOpening = true;
|
||||
mIsDrawerClosing = false;
|
||||
mDrawerLayout.openDrawer(mPullRefreshLayout);
|
||||
return;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
initDrawerMenuItemList(malDrawerMenuItem);
|
||||
}
|
||||
@@ -305,12 +250,11 @@ public abstract class DrawerFragmentActivity extends AppCompatActivity implement
|
||||
void initSecondaryRootView() {
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
//LogUtils.d(TAG, "onClick " + Integer.toString(v.getId()));
|
||||
finish();
|
||||
}
|
||||
});
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
finish();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public <T extends Fragment> int removeFragment(T fragment) {
|
||||
@@ -375,13 +319,13 @@ public abstract class DrawerFragmentActivity extends AppCompatActivity implement
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
if (mActivityType == ActivityType.Main) {
|
||||
// 主题菜单
|
||||
AESThemeUtil.inflateMenu(this, menu);
|
||||
// 调试工具菜单
|
||||
if (GlobalApplication.isDebugging()) {
|
||||
DevelopUtils.inflateMenu(this, menu);
|
||||
}
|
||||
// 应用信息菜单
|
||||
// 替换为兼容版菜单加载方法
|
||||
AESThemeUtil.inflateCompatThemeMenu(this, menu);
|
||||
// 调试工具菜单
|
||||
if (GlobalApplication.isDebugging()) {
|
||||
DevelopUtils.inflateMenu(this, menu);
|
||||
}
|
||||
// 应用信息菜单
|
||||
getMenuInflater().inflate(R.menu.toolbar_drawerbase, menu);
|
||||
}
|
||||
return super.onCreateOptionsMenu(menu);
|
||||
@@ -392,3 +336,4 @@ public abstract class DrawerFragmentActivity extends AppCompatActivity implement
|
||||
super.onActivityResult(who, targetFragment, requestCode);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ import android.util.JsonWriter;
|
||||
import cc.winboll.studio.libaes.R;
|
||||
import cc.winboll.studio.libappbase.models.libs1520000.BaseBean;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class AESThemeBean extends BaseBean {
|
||||
|
||||
@@ -41,13 +42,28 @@ public class AESThemeBean extends BaseBean {
|
||||
return name;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static void fillThemeStyleIDList(ArrayList<Integer> themeStyleIDList) {
|
||||
if (themeStyleIDList == null) {
|
||||
themeStyleIDList = new ArrayList<Integer>();
|
||||
|
||||
}
|
||||
themeStyleIDList.clear();
|
||||
themeStyleIDList.add(cc.winboll.studio.libaes.R.style.AESTheme);
|
||||
themeStyleIDList.add(cc.winboll.studio.libaes.R.style.DepthAESTheme);
|
||||
themeStyleIDList.add(cc.winboll.studio.libaes.R.style.SkyAESTheme);
|
||||
themeStyleIDList.add(cc.winboll.studio.libaes.R.style.GoldenAESTheme);
|
||||
themeStyleIDList.add(cc.winboll.studio.libaes.R.style.BearingAESTheme);
|
||||
themeStyleIDList.add(cc.winboll.studio.libaes.R.style.MemorAESTheme);
|
||||
themeStyleIDList.add(cc.winboll.studio.libaes.R.style.TaoAESTheme);
|
||||
}
|
||||
|
||||
// 保存当前主题
|
||||
int currentThemeStyleID = getThemeStyleID(ThemeType.AES);
|
||||
|
||||
|
||||
public AESThemeBean() {
|
||||
}
|
||||
|
||||
|
||||
public AESThemeBean(int currentThemeStyleID) {
|
||||
this.currentThemeStyleID = currentThemeStyleID;
|
||||
}
|
||||
@@ -59,7 +75,7 @@ public class AESThemeBean extends BaseBean {
|
||||
public int getCurrentThemeTypeID() {
|
||||
return this.currentThemeStyleID;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return AESThemeBean.class.getName();
|
||||
@@ -74,8 +90,7 @@ public class AESThemeBean extends BaseBean {
|
||||
|
||||
@Override
|
||||
public boolean initObjectsFromJsonReader(JsonReader jsonReader, String name) throws IOException {
|
||||
if(super.initObjectsFromJsonReader(jsonReader, name)) { return true; }
|
||||
else{
|
||||
if (super.initObjectsFromJsonReader(jsonReader, name)) { return true; } else {
|
||||
if (name.equals("currentThemeTypeID")) {
|
||||
setCurrentThemeTypeID(jsonReader.nextInt());
|
||||
} else {
|
||||
@@ -90,7 +105,7 @@ public class AESThemeBean extends BaseBean {
|
||||
jsonReader.beginObject();
|
||||
while (jsonReader.hasNext()) {
|
||||
String name = jsonReader.nextName();
|
||||
if(!initObjectsFromJsonReader(jsonReader, name)) {
|
||||
if (!initObjectsFromJsonReader(jsonReader, name)) {
|
||||
jsonReader.skipValue();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,6 @@ import androidx.appcompat.widget.Toolbar;
|
||||
import cc.winboll.studio.libaes.R;
|
||||
import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity;
|
||||
import cc.winboll.studio.libaes.utils.AESThemeUtil;
|
||||
import cc.winboll.studio.libaes.views.ASupportToolbar;
|
||||
import cc.winboll.studio.libappbase.LogUtils;
|
||||
|
||||
public class TestASupportToolbarActivity extends AppCompatActivity implements IWinBoLLActivity {
|
||||
@@ -28,11 +27,12 @@ public class TestASupportToolbarActivity extends AppCompatActivity implements IW
|
||||
public String getTag() {
|
||||
return TAG;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
LogUtils.d(TAG, "onCreate() start");
|
||||
AESThemeUtil.applyAppTheme(this);
|
||||
// 替换此处:原 applyAppTheme -> 新方法 applyAppCompatTheme
|
||||
AESThemeUtil.applyAppCompatTheme(this);
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_testasupporttoolbar);
|
||||
LogUtils.d(TAG, "setContentView() done");
|
||||
@@ -45,3 +45,4 @@ public class TestASupportToolbarActivity extends AppCompatActivity implements IW
|
||||
LogUtils.d(TAG, "onCreate() end");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -14,10 +14,11 @@ import cc.winboll.studio.libaes.utils.AESThemeUtil;
|
||||
public class TestAToolbarActivity extends Activity {
|
||||
|
||||
public static final String TAG = "TestAToolbarActivity";
|
||||
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
AESThemeUtil.applyAppTheme(this);
|
||||
// 原生Activity 使用 applyTheme
|
||||
AESThemeUtil.applyTheme(this);
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_testatoolbar);
|
||||
Toolbar toolbar = findViewById(R.id.activitytestatoolbarAToolbar1);
|
||||
@@ -26,3 +27,4 @@ public class TestAToolbarActivity extends Activity {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -9,203 +9,164 @@ import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
import cc.winboll.studio.libaes.R;
|
||||
import cc.winboll.studio.libaes.activitys.DrawerFragmentActivity;
|
||||
import cc.winboll.studio.libaes.models.AESThemeBean;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class AESThemeUtil {
|
||||
|
||||
public static final String TAG = "AESThemeUtil";
|
||||
private static final String SHAREDPREFERENCES_NAME = "SHAREDPREFERENCES_NAME";
|
||||
private static final String DRAWER_THEME_TYPE = "DRAWER_THEME_TYPE";
|
||||
|
||||
static final String SHAREDPREFERENCES_NAME = "SHAREDPREFERENCES_NAME";
|
||||
static final String DRAWER_THEME_TYPE = "DRAWER_THEME_TYPE";
|
||||
// 私有静态集合,外部不可直接修改
|
||||
private static ArrayList<Integer> themeStyleIDList = new ArrayList<>();
|
||||
|
||||
protected volatile AESThemeBean.ThemeType mThemeType;
|
||||
// 移除无用实例成员 mThemeType,工具类不保留实例字段
|
||||
|
||||
public static <T extends Context> int getThemeTypeID(T context) {
|
||||
AESThemeBean bean = AESThemeBean.loadBean(context, AESThemeBean.class);
|
||||
return bean == null ? AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.AES): bean.getCurrentThemeTypeID();
|
||||
/**
|
||||
* 初始化主题样式ID集合
|
||||
*/
|
||||
public static void init(ArrayList<Integer> themeStyleIDList) {
|
||||
if(themeStyleIDList == null) {
|
||||
AESThemeBean.fillThemeStyleIDList(themeStyleIDList);
|
||||
}
|
||||
AESThemeUtil.themeStyleIDList.clear();
|
||||
AESThemeUtil.themeStyleIDList.addAll(themeStyleIDList);
|
||||
}
|
||||
|
||||
public static <T extends Context> void saveThemeStyleID(T context, int nThemeTypeID) {
|
||||
AESThemeBean bean = new AESThemeBean(nThemeTypeID);
|
||||
/**
|
||||
* 获取当前主题样式ID
|
||||
*/
|
||||
public static int getThemeTypeID(Context context) {
|
||||
AESThemeBean bean = AESThemeBean.loadBean(context, AESThemeBean.class);
|
||||
return bean == null ? getThemeStyleID(AESThemeBean.ThemeType.AES) : bean.getCurrentThemeTypeID();
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存主题样式ID
|
||||
*/
|
||||
public static void saveThemeStyleID(Context context, int themeTypeID) {
|
||||
AESThemeBean bean = new AESThemeBean(themeTypeID);
|
||||
AESThemeBean.saveBean(context, bean);
|
||||
}
|
||||
|
||||
public static <T extends Activity> void applyAppTheme(T activity) {
|
||||
// ====================== 应用主题 - 规范重载 ======================
|
||||
/**
|
||||
* 应用当前持久化主题(通用 Activity)
|
||||
*/
|
||||
public static void applyTheme(Activity activity) {
|
||||
activity.setTheme(getThemeTypeID(activity));
|
||||
}
|
||||
|
||||
public static <T extends AppCompatActivity> void applyAppCompatTheme(T activity) {
|
||||
/**
|
||||
* 应用指定主题(通用 Activity)
|
||||
*/
|
||||
public static void applyTheme(Activity activity, AESThemeBean.ThemeType themeType) {
|
||||
activity.setTheme(getThemeStyleID(themeType));
|
||||
}
|
||||
|
||||
/**
|
||||
* 应用当前持久化主题(AppCompat 兼容 Activity)
|
||||
*/
|
||||
public static void applyAppCompatTheme(AppCompatActivity activity) {
|
||||
activity.setTheme(getThemeTypeID(activity));
|
||||
}
|
||||
|
||||
/*public static <T extends WinBoLLActivity> void applyWinBoLLTheme(T activity) {
|
||||
activity.setTheme(getThemeTypeID(activity.getApplicationContext()));
|
||||
}*/
|
||||
|
||||
public static <T extends Activity> void applyAppTheme(Activity activity, AESThemeBean.ThemeType themeType) {
|
||||
activity.setTheme(AESThemeBean.getThemeStyleID(themeType));
|
||||
/**
|
||||
* 应用指定主题(AppCompat 兼容 Activity)
|
||||
*/
|
||||
public static void applyAppCompatTheme(AppCompatActivity activity, AESThemeBean.ThemeType themeType) {
|
||||
activity.setTheme(getThemeStyleID(themeType));
|
||||
}
|
||||
|
||||
public static <T extends AppCompatActivity> void applyAppCompatTheme(Activity activity, AESThemeBean.ThemeType themeType) {
|
||||
activity.setTheme(AESThemeBean.getThemeStyleID(themeType));
|
||||
}
|
||||
|
||||
/*public static <T extends WinBoLLActivity> void applyWinBoLLTheme(Activity activity, AESThemeBean.ThemeType themeType) {
|
||||
activity.setTheme(AESThemeBean.getThemeStyleID(themeType));
|
||||
}*/
|
||||
|
||||
public static <T extends Activity> void inflateMenu(T activity, Menu menu) {
|
||||
// ====================== 加载菜单 ======================
|
||||
/**
|
||||
* 加载主题菜单(通用 Activity)
|
||||
*/
|
||||
public static void inflateThemeMenu(Activity activity, Menu menu) {
|
||||
activity.getMenuInflater().inflate(R.menu.toolbar_apptheme, menu);
|
||||
}
|
||||
|
||||
public static <T extends AppCompatActivity> void inflateCompatMenu(T activity, Menu menu) {
|
||||
/**
|
||||
* 加载主题菜单(AppCompat Activity)
|
||||
*/
|
||||
public static void inflateCompatThemeMenu(AppCompatActivity activity, Menu menu) {
|
||||
activity.getMenuInflater().inflate(R.menu.toolbar_apptheme, menu);
|
||||
}
|
||||
|
||||
/*public static <T extends WinBoLLActivity> void inflateWinBoLLMenu(T activity, Menu menu) {
|
||||
activity.getMenuInflater().inflate(R.menu.toolbar_apptheme, menu);
|
||||
}*/
|
||||
|
||||
public static <T extends Activity> boolean onAppThemeItemSelected(T activity, MenuItem item) {
|
||||
int nThemeStyleID;
|
||||
if (R.id.item_depththeme == item.getItemId()) {
|
||||
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.DEPTH);
|
||||
saveThemeStyleID(activity, nThemeStyleID);
|
||||
return true;
|
||||
} else if (R.id.item_skytheme == item.getItemId()) {
|
||||
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.SKY);
|
||||
saveThemeStyleID(activity, nThemeStyleID);
|
||||
return true;
|
||||
} else if (R.id.item_goldentheme == item.getItemId()) {
|
||||
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.GOLDEN);
|
||||
saveThemeStyleID(activity, nThemeStyleID);
|
||||
return true;
|
||||
} else if (R.id.item_bearingtheme == item.getItemId()) {
|
||||
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.BEARING);
|
||||
saveThemeStyleID(activity, nThemeStyleID);
|
||||
return true;
|
||||
} else if (R.id.item_memortheme == item.getItemId()) {
|
||||
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.MEMOR);
|
||||
saveThemeStyleID(activity, nThemeStyleID);
|
||||
return true;
|
||||
} else if (R.id.item_taotheme == item.getItemId()) {
|
||||
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.TAO);
|
||||
saveThemeStyleID(activity, nThemeStyleID);
|
||||
return true;
|
||||
} else if (R.id.item_defaulttheme == item.getItemId()) {
|
||||
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.AES);
|
||||
saveThemeStyleID(activity, nThemeStyleID);
|
||||
return true;
|
||||
// ====================== 菜单点击统一核心逻辑(消除重复代码) ======================
|
||||
/**
|
||||
* 主题菜单项点击统一处理
|
||||
* @param context 上下文(用于持久化)
|
||||
* @param item 点击的菜单项
|
||||
* @return 是否消费点击事件
|
||||
*/
|
||||
public static boolean handleThemeMenuClick(Context context, MenuItem item) {
|
||||
int themeStyleId;
|
||||
int itemId = item.getItemId();
|
||||
if (R.id.item_depththeme == itemId) {
|
||||
themeStyleId = getThemeStyleID(AESThemeBean.ThemeType.DEPTH);
|
||||
} else if (R.id.item_skytheme == itemId) {
|
||||
themeStyleId = getThemeStyleID(AESThemeBean.ThemeType.SKY);
|
||||
} else if (R.id.item_goldentheme == itemId) {
|
||||
themeStyleId = getThemeStyleID(AESThemeBean.ThemeType.GOLDEN);
|
||||
} else if (R.id.item_bearingtheme == itemId) {
|
||||
themeStyleId = getThemeStyleID(AESThemeBean.ThemeType.BEARING);
|
||||
} else if (R.id.item_memortheme == itemId) {
|
||||
themeStyleId = getThemeStyleID(AESThemeBean.ThemeType.MEMOR);
|
||||
} else if (R.id.item_taotheme == itemId) {
|
||||
themeStyleId = getThemeStyleID(AESThemeBean.ThemeType.TAO);
|
||||
} else if (R.id.item_defaulttheme == itemId) {
|
||||
themeStyleId = getThemeStyleID(AESThemeBean.ThemeType.AES);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
saveThemeStyleID(context, themeStyleId);
|
||||
return true;
|
||||
}
|
||||
|
||||
public static <T extends AppCompatActivity> boolean onAppCompatThemeItemSelected(T activity, MenuItem item) {
|
||||
int nThemeStyleID;
|
||||
if (R.id.item_depththeme == item.getItemId()) {
|
||||
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.DEPTH);
|
||||
saveThemeStyleID(activity, nThemeStyleID);
|
||||
return true;
|
||||
} else if (R.id.item_skytheme == item.getItemId()) {
|
||||
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.SKY);
|
||||
saveThemeStyleID(activity, nThemeStyleID);
|
||||
return true;
|
||||
} else if (R.id.item_goldentheme == item.getItemId()) {
|
||||
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.GOLDEN);
|
||||
saveThemeStyleID(activity, nThemeStyleID);
|
||||
return true;
|
||||
} else if (R.id.item_bearingtheme == item.getItemId()) {
|
||||
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.BEARING);
|
||||
saveThemeStyleID(activity, nThemeStyleID);
|
||||
return true;
|
||||
} else if (R.id.item_memortheme == item.getItemId()) {
|
||||
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.MEMOR);
|
||||
saveThemeStyleID(activity, nThemeStyleID);
|
||||
return true;
|
||||
} else if (R.id.item_taotheme == item.getItemId()) {
|
||||
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.TAO);
|
||||
saveThemeStyleID(activity, nThemeStyleID);
|
||||
return true;
|
||||
} else if (R.id.item_defaulttheme == item.getItemId()) {
|
||||
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.AES);
|
||||
saveThemeStyleID(activity, nThemeStyleID);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
// 对外暴露不同 Activity 类型的入口,内部调用统一核心方法
|
||||
public static boolean onThemeItemSelected(Activity activity, MenuItem item) {
|
||||
return handleThemeMenuClick(activity, item);
|
||||
}
|
||||
|
||||
public static <T extends AppCompatActivity> boolean onWinBoLLThemeItemSelected(T activity, MenuItem item) {
|
||||
int nThemeStyleID;
|
||||
if (R.id.item_depththeme == item.getItemId()) {
|
||||
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.DEPTH);
|
||||
saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID);
|
||||
return true;
|
||||
} else if (R.id.item_skytheme == item.getItemId()) {
|
||||
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.SKY);
|
||||
saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID);
|
||||
return true;
|
||||
} else if (R.id.item_goldentheme == item.getItemId()) {
|
||||
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.GOLDEN);
|
||||
saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID);
|
||||
return true;
|
||||
} else if (R.id.item_bearingtheme == item.getItemId()) {
|
||||
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.BEARING);
|
||||
saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID);
|
||||
return true;
|
||||
} else if (R.id.item_memortheme == item.getItemId()) {
|
||||
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.MEMOR);
|
||||
saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID);
|
||||
return true;
|
||||
} else if (R.id.item_taotheme == item.getItemId()) {
|
||||
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.TAO);
|
||||
saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID);
|
||||
return true;
|
||||
} else if (R.id.item_defaulttheme == item.getItemId()) {
|
||||
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.AES);
|
||||
saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
public static boolean onAppCompatThemeItemSelected(AppCompatActivity activity, MenuItem item) {
|
||||
return handleThemeMenuClick(activity, item);
|
||||
}
|
||||
|
||||
public static <T extends DrawerFragmentActivity> boolean onWinBoLLThemeItemSelected(T activity, MenuItem item) {
|
||||
int nThemeStyleID;
|
||||
if (R.id.item_depththeme == item.getItemId()) {
|
||||
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.DEPTH);
|
||||
saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID);
|
||||
return true;
|
||||
} else if (R.id.item_skytheme == item.getItemId()) {
|
||||
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.SKY);
|
||||
saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID);
|
||||
return true;
|
||||
} else if (R.id.item_goldentheme == item.getItemId()) {
|
||||
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.GOLDEN);
|
||||
saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID);
|
||||
return true;
|
||||
} else if (R.id.item_bearingtheme == item.getItemId()) {
|
||||
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.BEARING);
|
||||
saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID);
|
||||
return true;
|
||||
} else if (R.id.item_memortheme == item.getItemId()) {
|
||||
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.MEMOR);
|
||||
saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID);
|
||||
return true;
|
||||
} else if (R.id.item_taotheme == item.getItemId()) {
|
||||
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.TAO);
|
||||
saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID);
|
||||
return true;
|
||||
} else if (R.id.item_defaulttheme == item.getItemId()) {
|
||||
nThemeStyleID = AESThemeBean.getThemeStyleID(AESThemeBean.ThemeType.AES);
|
||||
saveThemeStyleID(activity.getApplicationContext(), nThemeStyleID);
|
||||
return true;
|
||||
}
|
||||
public static boolean onWinBoLLThemeItemSelected(AppCompatActivity activity, MenuItem item) {
|
||||
// 使用 Application 上下文保存,避免 Activity 泄漏
|
||||
return handleThemeMenuClick(activity.getApplicationContext(), item);
|
||||
}
|
||||
|
||||
return false;
|
||||
public static boolean onWinBoLLThemeItemSelected(DrawerFragmentActivity activity, MenuItem item) {
|
||||
return handleThemeMenuClick(activity.getApplicationContext(), item);
|
||||
}
|
||||
|
||||
// ====================== 主题类型转换工具 ======================
|
||||
/**
|
||||
* 根据枚举获取对应样式ID
|
||||
*/
|
||||
public static int getThemeStyleID(AESThemeBean.ThemeType themeType) {
|
||||
return themeStyleIDList.get(themeType.ordinal());
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据样式ID反向获取主题枚举
|
||||
*/
|
||||
public static AESThemeBean.ThemeType getThemeStyleType(int themeStyleID) {
|
||||
for (int i = 0; i < themeStyleIDList.size(); i++) {
|
||||
if (themeStyleIDList.get(i) == themeStyleID) {
|
||||
return AESThemeBean.ThemeType.values()[i];
|
||||
}
|
||||
}
|
||||
return AESThemeBean.ThemeType.values()[0];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user