20251129_161627_420整体函数重构完成,待调试。。。
This commit is contained in:
@@ -1,8 +1,8 @@
|
|||||||
#Created by .winboll/winboll_app_build.gradle
|
#Created by .winboll/winboll_app_build.gradle
|
||||||
#Sat Nov 29 02:59:10 GMT 2025
|
#Sat Nov 29 08:15:05 GMT 2025
|
||||||
stageCount=11
|
stageCount=11
|
||||||
libraryProject=
|
libraryProject=
|
||||||
baseVersion=15.11
|
baseVersion=15.11
|
||||||
publishVersion=15.11.10
|
publishVersion=15.11.10
|
||||||
buildCount=32
|
buildCount=35
|
||||||
baseBetaVersion=15.11.11
|
baseBetaVersion=15.11.11
|
||||||
|
|||||||
@@ -150,7 +150,7 @@
|
|||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name="cc.winboll.studio.powerbell.activities.BackgroundPictureActivity"
|
android:name="cc.winboll.studio.powerbell.activities.BackgroundSettingsActivity"
|
||||||
android:parentActivityName="cc.winboll.studio.powerbell.MainActivity"
|
android:parentActivityName="cc.winboll.studio.powerbell.MainActivity"
|
||||||
android:exported="true"
|
android:exported="true"
|
||||||
android:launchMode="singleTask">
|
android:launchMode="singleTask">
|
||||||
@@ -234,4 +234,4 @@
|
|||||||
|
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
</manifest>
|
</manifest>
|
||||||
|
|||||||
@@ -17,12 +17,12 @@ import cc.winboll.studio.libaes.views.ADsBannerView;
|
|||||||
import cc.winboll.studio.libappbase.LogActivity;
|
import cc.winboll.studio.libappbase.LogActivity;
|
||||||
import cc.winboll.studio.libappbase.LogUtils;
|
import cc.winboll.studio.libappbase.LogUtils;
|
||||||
import cc.winboll.studio.powerbell.activities.AboutActivity;
|
import cc.winboll.studio.powerbell.activities.AboutActivity;
|
||||||
import cc.winboll.studio.powerbell.activities.BackgroundPictureActivity;
|
import cc.winboll.studio.powerbell.activities.BackgroundSettingsActivity;
|
||||||
import cc.winboll.studio.powerbell.activities.BatteryReportActivity;
|
import cc.winboll.studio.powerbell.activities.BatteryReportActivity;
|
||||||
import cc.winboll.studio.powerbell.activities.ClearRecordActivity;
|
import cc.winboll.studio.powerbell.activities.ClearRecordActivity;
|
||||||
import cc.winboll.studio.powerbell.activities.SettingsActivity;
|
import cc.winboll.studio.powerbell.activities.SettingsActivity;
|
||||||
import cc.winboll.studio.powerbell.activities.WinBoLLActivity;
|
import cc.winboll.studio.powerbell.activities.WinBoLLActivity;
|
||||||
import cc.winboll.studio.powerbell.beans.BackgroundPictureBean;
|
import cc.winboll.studio.powerbell.model.BackgroundBean;
|
||||||
import cc.winboll.studio.powerbell.fragments.MainViewFragment;
|
import cc.winboll.studio.powerbell.fragments.MainViewFragment;
|
||||||
import cc.winboll.studio.powerbell.unittest.MainUnitTestActivity;
|
import cc.winboll.studio.powerbell.unittest.MainUnitTestActivity;
|
||||||
import cc.winboll.studio.powerbell.utils.BackgroundSourceUtils;
|
import cc.winboll.studio.powerbell.utils.BackgroundSourceUtils;
|
||||||
@@ -244,7 +244,7 @@ public class MainActivity extends WinBoLLActivity {
|
|||||||
} else if (menuItemId == R.id.action_clearrecord) {
|
} else if (menuItemId == R.id.action_clearrecord) {
|
||||||
startActivity(new Intent(this, ClearRecordActivity.class));
|
startActivity(new Intent(this, ClearRecordActivity.class));
|
||||||
} else if (menuItemId == R.id.action_changepicture) {
|
} else if (menuItemId == R.id.action_changepicture) {
|
||||||
startActivity(new Intent(this, BackgroundPictureActivity.class));
|
startActivity(new Intent(this, BackgroundSettingsActivity.class));
|
||||||
} else if (menuItemId == R.id.action_log) {
|
} else if (menuItemId == R.id.action_log) {
|
||||||
LogActivity.startLogActivity(this);
|
LogActivity.startLogActivity(this);
|
||||||
} else if (menuItemId == R.id.action_unittestactivity) {
|
} else if (menuItemId == R.id.action_unittestactivity) {
|
||||||
@@ -282,7 +282,7 @@ public class MainActivity extends WinBoLLActivity {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(this);
|
BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(this);
|
||||||
BackgroundPictureBean bean = utils.getBackgroundPictureBean();
|
BackgroundBean bean = utils.getCurrentBackgroundBean();
|
||||||
int nPixelColor = bean.getPixelColor();
|
int nPixelColor = bean.getPixelColor();
|
||||||
RelativeLayout mainLayout = findViewById(R.id.activitymainRelativeLayout1);
|
RelativeLayout mainLayout = findViewById(R.id.activitymainRelativeLayout1);
|
||||||
if (mainLayout != null) {
|
if (mainLayout != null) {
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ import cc.winboll.studio.libappbase.LogUtils;
|
|||||||
import cc.winboll.studio.libappbase.ToastUtils;
|
import cc.winboll.studio.libappbase.ToastUtils;
|
||||||
import cc.winboll.studio.powerbell.App;
|
import cc.winboll.studio.powerbell.App;
|
||||||
import cc.winboll.studio.powerbell.R;
|
import cc.winboll.studio.powerbell.R;
|
||||||
import cc.winboll.studio.powerbell.beans.BackgroundPictureBean;
|
import cc.winboll.studio.powerbell.model.BackgroundBean;
|
||||||
import cc.winboll.studio.powerbell.dialogs.BackgroundPicturePreviewDialog;
|
import cc.winboll.studio.powerbell.dialogs.BackgroundPicturePreviewDialog;
|
||||||
import cc.winboll.studio.powerbell.dialogs.NetworkBackgroundDialog;
|
import cc.winboll.studio.powerbell.dialogs.NetworkBackgroundDialog;
|
||||||
import cc.winboll.studio.powerbell.utils.BackgroundSourceUtils;
|
import cc.winboll.studio.powerbell.utils.BackgroundSourceUtils;
|
||||||
@@ -37,10 +37,10 @@ import java.io.IOException;
|
|||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import androidx.core.util.Preconditions;
|
import androidx.core.util.Preconditions;
|
||||||
|
|
||||||
public class BackgroundPictureActivity extends WinBoLLActivity implements BackgroundPicturePreviewDialog.IOnRecivedPictureListener {
|
public class BackgroundSettingsActivity extends WinBoLLActivity implements BackgroundPicturePreviewDialog.IOnRecivedPictureListener {
|
||||||
|
|
||||||
public static final String TAG = "BackgroundPictureActivity";
|
public static final String TAG = "BackgroundSettingsActivity";
|
||||||
public BackgroundSourceUtils mBackgroundPictureUtils;
|
public BackgroundSourceUtils mBackgroundSourceUtils;
|
||||||
|
|
||||||
// 图片选择请求码
|
// 图片选择请求码
|
||||||
public static final int REQUEST_SELECT_PICTURE = 0;
|
public static final int REQUEST_SELECT_PICTURE = 0;
|
||||||
@@ -52,8 +52,8 @@ public class BackgroundPictureActivity extends WinBoLLActivity implements Backgr
|
|||||||
private File mfBackgroundDir; // 背景图片存储文件夹
|
private File mfBackgroundDir; // 背景图片存储文件夹
|
||||||
private File mfPictureDir; // 拍照与剪裁临时文件夹
|
private File mfPictureDir; // 拍照与剪裁临时文件夹
|
||||||
private File mfTakePhoto; // 拍照文件
|
private File mfTakePhoto; // 拍照文件
|
||||||
private File mfRecivedPicture; // 接收的图片文件
|
//private File mfRecivedPicture; // 接收的图片文件
|
||||||
|
|
||||||
// 背景视图预览图片的文件名
|
// 背景视图预览图片的文件名
|
||||||
private String preViewFilePath = "";
|
private String preViewFilePath = "";
|
||||||
private String preViewFileUrl = "";
|
private String preViewFileUrl = "";
|
||||||
@@ -73,7 +73,7 @@ public class BackgroundPictureActivity extends WinBoLLActivity implements Backgr
|
|||||||
private static String _mSourceCroppedFilePath;
|
private static String _mSourceCroppedFilePath;
|
||||||
private static String _mszCommonFileType = "jpeg";
|
private static String _mszCommonFileType = "jpeg";
|
||||||
private int mnPictureCompress = 100;
|
private int mnPictureCompress = 100;
|
||||||
private static String _RecivedBackgroundFileName;
|
//private static String _RecivedBackgroundFileName;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Activity getActivity() {
|
public Activity getActivity() {
|
||||||
@@ -89,11 +89,13 @@ public class BackgroundPictureActivity extends WinBoLLActivity implements Backgr
|
|||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setContentView(R.layout.activity_backgroundpicture);
|
setContentView(R.layout.activity_backgroundpicture);
|
||||||
initEnv();
|
bvPreviewBackground = (BackgroundView) findViewById(R.id.activitybackgroundpictureBackgroundView1);
|
||||||
|
|
||||||
|
//initEnv();
|
||||||
|
|
||||||
// 初始化工具类和文件夹
|
// 初始化工具类和文件夹
|
||||||
mBackgroundPictureUtils = BackgroundSourceUtils.getInstance(this);
|
mBackgroundSourceUtils = BackgroundSourceUtils.getInstance(this);
|
||||||
mfBackgroundDir = new File(mBackgroundPictureUtils.getBackgroundDir());
|
mfBackgroundDir = new File(mBackgroundSourceUtils.getBackgroundSourceDirPath());
|
||||||
if (!mfBackgroundDir.exists()) {
|
if (!mfBackgroundDir.exists()) {
|
||||||
mfBackgroundDir.mkdirs();
|
mfBackgroundDir.mkdirs();
|
||||||
}
|
}
|
||||||
@@ -107,7 +109,7 @@ public class BackgroundPictureActivity extends WinBoLLActivity implements Backgr
|
|||||||
mfTakePhoto = new File(mfPictureDir, "TakePhoto.jpg");
|
mfTakePhoto = new File(mfPictureDir, "TakePhoto.jpg");
|
||||||
//mfTempCropPicture = new File(mfPictureDir, "TempCrop.jpg");
|
//mfTempCropPicture = new File(mfPictureDir, "TempCrop.jpg");
|
||||||
|
|
||||||
mfRecivedPicture = getRecivedPictureFile();
|
//mfRecivedPicture = getRecivedPictureFile();
|
||||||
_mSourceCropTempFile = new File(mfBackgroundDir, _mSourceCropTempFileName);
|
_mSourceCropTempFile = new File(mfBackgroundDir, _mSourceCropTempFileName);
|
||||||
_mSourceCroppedFile = new File(mfBackgroundDir, _mSourceCroppedFileName);
|
_mSourceCroppedFile = new File(mfBackgroundDir, _mSourceCroppedFileName);
|
||||||
_mSourceCroppedFilePath = _mSourceCroppedFile.getAbsolutePath().toString();
|
_mSourceCroppedFilePath = _mSourceCroppedFile.getAbsolutePath().toString();
|
||||||
@@ -135,7 +137,9 @@ public class BackgroundPictureActivity extends WinBoLLActivity implements Backgr
|
|||||||
findViewById(R.id.activitybackgroundpictureAButton7).setOnClickListener(onPixelPickerClickListener);
|
findViewById(R.id.activitybackgroundpictureAButton7).setOnClickListener(onPixelPickerClickListener);
|
||||||
findViewById(R.id.activitybackgroundpictureAButton8).setOnClickListener(onCleanPixelClickListener);
|
findViewById(R.id.activitybackgroundpictureAButton8).setOnClickListener(onCleanPixelClickListener);
|
||||||
|
|
||||||
updatePreviewBackground();
|
BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(BackgroundSettingsActivity.this);
|
||||||
|
utils.setCurrentSourceToPreview();
|
||||||
|
bvPreviewBackground.reloadPreviewBackground();
|
||||||
|
|
||||||
// 处理分享的图片
|
// 处理分享的图片
|
||||||
Intent intent = getIntent();
|
Intent intent = getIntent();
|
||||||
@@ -148,10 +152,10 @@ public class BackgroundPictureActivity extends WinBoLLActivity implements Backgr
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initEnv() {
|
// private void initEnv() {
|
||||||
LogUtils.d(TAG, "initEnv()");
|
// LogUtils.d(TAG, "initEnv()");
|
||||||
_RecivedBackgroundFileName = "SourcePicture.data";
|
// _RecivedBackgroundFileName = "SourcePicture.data";
|
||||||
}
|
// }
|
||||||
|
|
||||||
public static String getBackgroundFileName() {
|
public static String getBackgroundFileName() {
|
||||||
return _mSourceCroppedFileName;
|
return _mSourceCroppedFileName;
|
||||||
@@ -159,72 +163,74 @@ public class BackgroundPictureActivity extends WinBoLLActivity implements Backgr
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onAcceptRecivedPicture(String szPreRecivedPictureName) {
|
public void onAcceptRecivedPicture(String szPreRecivedPictureName) {
|
||||||
BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(this);
|
ToastUtils.show("onAcceptRecivedPicture not yet.");
|
||||||
utils.getBackgroundPictureBean().setIsUseBackgroundFile(true);
|
// BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(this);
|
||||||
utils.saveData();
|
// utils.getCurrentBackgroundBean().setIsUseBackgroundFile(true);
|
||||||
|
// utils.saveSettings();
|
||||||
File sourceFile = new File(utils.getBackgroundDir(), szPreRecivedPictureName);
|
//
|
||||||
if (FileUtils.copyFile(sourceFile, mfRecivedPicture)) {
|
// File sourceFile = new File(utils.getBackgroundSourceDirPath(), szPreRecivedPictureName);
|
||||||
startCropImageActivity(false);
|
// if (FileUtils.copyFile(sourceFile, mfRecivedPicture)) {
|
||||||
} else {
|
// startCropImageActivity(false);
|
||||||
ToastUtils.show("图片复制失败,请重试");
|
// } else {
|
||||||
}
|
// ToastUtils.show("图片复制失败,请重试");
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新背景图片预览
|
* 更新背景图片预览,
|
||||||
|
* 如果sourceFile参数为空,则加载旧的背景图片资源
|
||||||
*/
|
*/
|
||||||
public void updatePreviewBackground() {
|
public void updateBackgroundView(File sourceFile, String sourceFileInfo) {
|
||||||
LogUtils.d(TAG, "updatePreviewBackground");
|
LogUtils.d(TAG, "updatePreviewBackground");
|
||||||
LogUtils.d(TAG, String.format("_mSourceCroppedFilePath : %s", _mSourceCroppedFilePath));
|
BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(this);
|
||||||
//ImageView ivPreviewBackground = (ImageView) findViewById(R.id.activitybackgroundpictureImageView1);
|
if (sourceFile == null) {
|
||||||
bvPreviewBackground = (BackgroundView) findViewById(R.id.activitybackgroundpictureBackgroundView1);
|
bvPreviewBackground.reloadCurrentBackground();
|
||||||
BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(this);
|
} else {
|
||||||
utils.loadBackgroundPictureBean();
|
utils.saveFileToPreviewBean(sourceFile, sourceFileInfo);
|
||||||
|
bvPreviewBackground.reloadPreviewBackground();
|
||||||
|
}
|
||||||
|
|
||||||
boolean isUseBackgroundFile = utils.getBackgroundPictureBean().isUseBackgroundFile();
|
// boolean isUseBackgroundFile = utils.getCurrentBackgroundBean().isUseBackgroundFile();
|
||||||
LogUtils.d(TAG, String.format("isUseBackgroundFile is %s, _mSourceCroppedFile.exists() is %s ", isUseBackgroundFile, _mSourceCroppedFile.exists()));
|
// LogUtils.d(TAG, String.format("isUseBackgroundFile is %s, _mSourceCroppedFile.exists() is %s ", isUseBackgroundFile, _mSourceCroppedFile.exists()));
|
||||||
|
//
|
||||||
//if (isUseBackgroundFile && _mSourceCroppedFile.exists()) {
|
// //if (isUseBackgroundFile && _mSourceCroppedFile.exists()) {
|
||||||
if (_mSourceCroppedFile.exists()) {
|
// if (_mSourceCroppedFile.exists()) {
|
||||||
//try {
|
// //try {
|
||||||
//String filePath = utils.getBackgroundDir() + getBackgroundFileName();
|
// //String filePath = utils.getBackgroundDir() + getBackgroundFileName();
|
||||||
preViewFilePath = _mSourceCroppedFilePath;
|
// preViewFilePath = _mSourceCroppedFilePath;
|
||||||
LogUtils.d(TAG, String.format("preViewFilePathBackgroundView : %s", preViewFilePath));
|
// LogUtils.d(TAG, String.format("preViewFilePathBackgroundView : %s", preViewFilePath));
|
||||||
bvPreviewBackground.previewBackgroundImage(preViewFilePath);
|
// bvPreviewBackground.previewBackgroundImage(preViewFilePath);
|
||||||
/*Drawable drawable = FileUtils.getImageDrawable(filePath);
|
// /*Drawable drawable = FileUtils.getImageDrawable(filePath);
|
||||||
if (drawable != null) {
|
// if (drawable != null) {
|
||||||
//drawable.setAlpha(120);
|
// //drawable.setAlpha(120);
|
||||||
//bvPreviewBackground.setImageDrawable(drawable);
|
// //bvPreviewBackground.setImageDrawable(drawable);
|
||||||
}*/
|
// }*/
|
||||||
//ToastUtils.show("背景图片已更新");
|
// //ToastUtils.show("背景图片已更新");
|
||||||
// } catch (IOException e) {
|
//// } catch (IOException e) {
|
||||||
// LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
|
//// LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
|
||||||
// ToastUtils.show("背景图片加载失败");
|
//// ToastUtils.show("背景图片加载失败");
|
||||||
// }
|
//// }
|
||||||
} else {
|
// } else {
|
||||||
ToastUtils.show("未使用背景图片");
|
// ToastUtils.show("未使用背景图片");
|
||||||
preViewFilePath = "";
|
// preViewFilePath = "";
|
||||||
bvPreviewBackground.previewBackgroundImage(preViewFilePath);
|
// bvPreviewBackground.previewBackgroundImage(preViewFilePath);
|
||||||
// Drawable drawable = getResources().getDrawable(R.drawable.blank10x10);
|
//// Drawable drawable = getResources().getDrawable(R.drawable.blank10x10);
|
||||||
// if (drawable != null) {
|
//// if (drawable != null) {
|
||||||
// drawable.setAlpha(120);
|
//// drawable.setAlpha(120);
|
||||||
// bvPreviewBackground.setImageDrawable(drawable);
|
//// bvPreviewBackground.setImageDrawable(drawable);
|
||||||
// }
|
//// }
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
// 点击事件监听器
|
// 点击事件监听器
|
||||||
private View.OnClickListener onOriginNullClickListener = new View.OnClickListener() {
|
private View.OnClickListener onOriginNullClickListener = new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(BackgroundPictureActivity.this);
|
BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(BackgroundSettingsActivity.this);
|
||||||
BackgroundPictureBean bean = utils.getBackgroundPictureBean();
|
BackgroundBean bean = utils.getCurrentBackgroundBean();
|
||||||
bean.setIsUseBackgroundFile(false);
|
bean.setIsUseBackgroundFile(false);
|
||||||
utils.saveData();
|
utils.saveSettings();
|
||||||
|
bvPreviewBackground.reloadPreviewBackground();
|
||||||
preViewFilePath = "";
|
|
||||||
bvPreviewBackground.previewBackgroundImage(preViewFilePath);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -289,10 +295,11 @@ public class BackgroundPictureActivity extends WinBoLLActivity implements Backgr
|
|||||||
private View.OnClickListener onReceivedPictureClickListener = new View.OnClickListener() {
|
private View.OnClickListener onReceivedPictureClickListener = new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(BackgroundPictureActivity.this);
|
ToastUtils.show("onReceivedPictureClickListener not yet.");
|
||||||
utils.getBackgroundPictureBean().setIsUseBackgroundFile(true);
|
// BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(BackgroundSettingsActivity.this);
|
||||||
utils.saveData();
|
// utils.getCurrentBackgroundBean().setIsUseBackgroundFile(true);
|
||||||
updatePreviewBackground();
|
// utils.saveSettings();
|
||||||
|
// updateBackgroundView();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -312,10 +319,10 @@ public class BackgroundPictureActivity extends WinBoLLActivity implements Backgr
|
|||||||
private View.OnClickListener onCleanPixelClickListener = new View.OnClickListener() {
|
private View.OnClickListener onCleanPixelClickListener = new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(BackgroundPictureActivity.this);
|
BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(BackgroundSettingsActivity.this);
|
||||||
BackgroundPictureBean bean = utils.getBackgroundPictureBean();
|
BackgroundBean bean = utils.getCurrentBackgroundBean();
|
||||||
bean.setPixelColor(0);
|
bean.setPixelColor(0);
|
||||||
utils.saveData();
|
utils.saveSettings();
|
||||||
setBackgroundColor();
|
setBackgroundColor();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -326,12 +333,13 @@ public class BackgroundPictureActivity extends WinBoLLActivity implements Backgr
|
|||||||
void compressQualityToRecivedPicture(Bitmap bitmap) {
|
void compressQualityToRecivedPicture(Bitmap bitmap) {
|
||||||
OutputStream outStream = null;
|
OutputStream outStream = null;
|
||||||
try {
|
try {
|
||||||
mfRecivedPicture = getRecivedPictureFile();
|
BackgroundSourceUtils utils= BackgroundSourceUtils.getInstance(this);
|
||||||
if (!mfRecivedPicture.exists()) {
|
File fRecivedPicture = new File(utils.getPreviewBackgroundScaledCompressFilePath());
|
||||||
mfRecivedPicture.createNewFile();
|
if (!fRecivedPicture.exists()) {
|
||||||
|
fRecivedPicture.createNewFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
FileOutputStream fos = new FileOutputStream(mfRecivedPicture);
|
FileOutputStream fos = new FileOutputStream(fRecivedPicture);
|
||||||
outStream = new BufferedOutputStream(fos);
|
outStream = new BufferedOutputStream(fos);
|
||||||
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outStream);
|
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outStream);
|
||||||
outStream.flush();
|
outStream.flush();
|
||||||
@@ -358,15 +366,20 @@ public class BackgroundPictureActivity extends WinBoLLActivity implements Backgr
|
|||||||
*/
|
*/
|
||||||
public void startCropImageActivity(boolean isCropFree) {
|
public void startCropImageActivity(boolean isCropFree) {
|
||||||
LogUtils.d(TAG, "startCropImageActivity");
|
LogUtils.d(TAG, "startCropImageActivity");
|
||||||
BackgroundPictureBean bean = mBackgroundPictureUtils.loadBackgroundPictureBean();
|
BackgroundSourceUtils utils= BackgroundSourceUtils.getInstance(this);
|
||||||
mfRecivedPicture = getRecivedPictureFile();
|
BackgroundBean bean = utils.getPreviewBackgroundBean();
|
||||||
Uri uri = UriUtil.getUriForFile(this, mfRecivedPicture);
|
bean.setIsUseScaledCompress(true);
|
||||||
|
utils.saveSettings();
|
||||||
|
|
||||||
|
File fRecivedPicture = new File(utils.getPreviewBackgroundFilePath());
|
||||||
|
|
||||||
|
Uri uri = UriUtil.getUriForFile(this, fRecivedPicture);
|
||||||
LogUtils.d(TAG, "uri : " + uri.toString());
|
LogUtils.d(TAG, "uri : " + uri.toString());
|
||||||
|
|
||||||
if (_mSourceCropTempFile.exists()) {
|
if (_mSourceCropTempFile.exists()) {
|
||||||
_mSourceCropTempFile.delete();
|
_mSourceCropTempFile.delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
_mSourceCropTempFile.createNewFile();
|
_mSourceCropTempFile.createNewFile();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
@@ -393,6 +406,7 @@ public class BackgroundPictureActivity extends WinBoLLActivity implements Backgr
|
|||||||
intent.putExtra("scale", true);
|
intent.putExtra("scale", true);
|
||||||
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
|
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
|
||||||
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
|
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
|
||||||
|
|
||||||
startActivityForResult(intent, REQUEST_CROP_IMAGE);
|
startActivityForResult(intent, REQUEST_CROP_IMAGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -420,7 +434,7 @@ public class BackgroundPictureActivity extends WinBoLLActivity implements Backgr
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 优化:创建保存目录
|
// 优化:创建保存目录
|
||||||
File backgroundDir = new File(mBackgroundPictureUtils.getBackgroundDir());
|
File backgroundDir = new File(mBackgroundSourceUtils.getBackgroundSourceDirPath());
|
||||||
if (!backgroundDir.exists()) {
|
if (!backgroundDir.exists()) {
|
||||||
if (!backgroundDir.mkdirs()) {
|
if (!backgroundDir.mkdirs()) {
|
||||||
ToastUtils.show("无法创建保存目录");
|
ToastUtils.show("无法创建保存目录");
|
||||||
@@ -429,11 +443,12 @@ public class BackgroundPictureActivity extends WinBoLLActivity implements Backgr
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
File saveFile = new File(backgroundDir, getBackgroundFileName());
|
// 剪裁的图片的保存地址
|
||||||
|
File fScaledCompressBitmapFile = new File(backgroundDir, BackgroundSourceUtils.getInstance(this).getPreviewBackgroundScaledCompressFilePath());
|
||||||
|
|
||||||
// 优化:检查文件是否可写
|
// 优化:检查文件是否可写
|
||||||
if (saveFile.exists() && !saveFile.canWrite()) {
|
if (fScaledCompressBitmapFile.exists() && !fScaledCompressBitmapFile.canWrite()) {
|
||||||
if (!saveFile.delete()) {
|
if (!fScaledCompressBitmapFile.delete()) {
|
||||||
ToastUtils.show("无法删除旧文件");
|
ToastUtils.show("无法删除旧文件");
|
||||||
if (scaledBitmap != bitmap) scaledBitmap.recycle();
|
if (scaledBitmap != bitmap) scaledBitmap.recycle();
|
||||||
return;
|
return;
|
||||||
@@ -442,15 +457,20 @@ public class BackgroundPictureActivity extends WinBoLLActivity implements Backgr
|
|||||||
|
|
||||||
FileOutputStream fos = null;
|
FileOutputStream fos = null;
|
||||||
try {
|
try {
|
||||||
fos = new FileOutputStream(saveFile);
|
fos = new FileOutputStream(fScaledCompressBitmapFile);
|
||||||
boolean success = scaledBitmap.compress(Bitmap.CompressFormat.JPEG, 80, fos);
|
boolean success = scaledBitmap.compress(Bitmap.CompressFormat.JPEG, 80, fos);
|
||||||
fos.flush();
|
fos.flush();
|
||||||
if (success) {
|
if (success) {
|
||||||
//ToastUtils.show("保存成功");
|
ToastUtils.show("图片压缩保存成功");
|
||||||
updatePreviewBackground();
|
BackgroundSourceUtils.getInstance(this).getPreviewBackgroundBean().setIsUseScaledCompress(true);
|
||||||
|
BackgroundSourceUtils.getInstance(this).saveSettings();
|
||||||
|
bvPreviewBackground.reloadPreviewBackground();
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
LogUtils.e(TAG, "图片压缩保存失败");
|
|
||||||
ToastUtils.show("图片压缩保存失败");
|
ToastUtils.show("图片压缩保存失败");
|
||||||
|
BackgroundSourceUtils.getInstance(this).getPreviewBackgroundBean().setIsUseScaledCompress(false);
|
||||||
|
BackgroundSourceUtils.getInstance(this).saveSettings();
|
||||||
|
bvPreviewBackground.reloadPreviewBackground();
|
||||||
}
|
}
|
||||||
} catch (FileNotFoundException e) {
|
} catch (FileNotFoundException e) {
|
||||||
LogUtils.e(TAG, "文件未找到" + e);
|
LogUtils.e(TAG, "文件未找到" + e);
|
||||||
@@ -489,7 +509,9 @@ public class BackgroundPictureActivity extends WinBoLLActivity implements Backgr
|
|||||||
* 分享图片
|
* 分享图片
|
||||||
*/
|
*/
|
||||||
void sharePicture() {
|
void sharePicture() {
|
||||||
Uri uri = UriUtil.getUriForFile(this, mfRecivedPicture);
|
BackgroundSourceUtils utils= BackgroundSourceUtils.getInstance(this);
|
||||||
|
File fRecivedPicture = new File(utils.getCurrentBackgroundFilePath());
|
||||||
|
Uri uri = UriUtil.getUriForFile(this, fRecivedPicture);
|
||||||
Intent shareIntent = new Intent(Intent.ACTION_SEND);
|
Intent shareIntent = new Intent(Intent.ACTION_SEND);
|
||||||
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
|
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
|
||||||
shareIntent.setType("image/" + _mszCommonFileType);
|
shareIntent.setType("image/" + _mszCommonFileType);
|
||||||
@@ -497,19 +519,20 @@ public class BackgroundPictureActivity extends WinBoLLActivity implements Backgr
|
|||||||
startActivity(Intent.createChooser(shareIntent, "Share Image"));
|
startActivity(Intent.createChooser(shareIntent, "Share Image"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public File getRecivedPictureFile() {
|
// public File getRecivedPictureFile() {
|
||||||
BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(this);
|
// BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(this);
|
||||||
utils.loadBackgroundPictureBean();
|
// utils.loadSettings();
|
||||||
return new File(utils.getBackgroundDir(), _RecivedBackgroundFileName);
|
// return new File(utils.getBackgroundSourceDirPath(), _RecivedBackgroundFileName);
|
||||||
}
|
// }
|
||||||
|
|
||||||
public void saveToRecivedBackground(String srcFilePath, String srcFillSourcePath) {
|
// public void saveToRecivedBackground(String srcFilePath, String srcFillSourcePath) {
|
||||||
BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(this);
|
// BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(this);
|
||||||
utils.loadBackgroundPictureBean();
|
// utils.loadSettings();
|
||||||
File dstFile = new File(utils.getBackgroundDir(), _RecivedBackgroundFileName);
|
// File dstFile = new File(utils.getBackgroundSourceDirPath(), _RecivedBackgroundFileName);
|
||||||
compressQualityToRecivedPicture(srcFilePath);
|
// //compressQualityToRecivedPicture(srcFilePath);
|
||||||
FileUtils.copyFile(new File(srcFilePath), dstFile);
|
// ToastUtils.show("compressQualityToRecivedPicture not yet.");
|
||||||
}
|
// FileUtils.copyFile(new File(srcFilePath), dstFile);
|
||||||
|
// }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||||
@@ -519,12 +542,17 @@ public class BackgroundPictureActivity extends WinBoLLActivity implements Backgr
|
|||||||
Uri selectedImage = data.getData();
|
Uri selectedImage = data.getData();
|
||||||
LogUtils.d(TAG, "Uri is : " + selectedImage.toString());
|
LogUtils.d(TAG, "Uri is : " + selectedImage.toString());
|
||||||
File fSrcImage = new File(UriUtil.getFilePathFromUri(this, selectedImage));
|
File fSrcImage = new File(UriUtil.getFilePathFromUri(this, selectedImage));
|
||||||
mfRecivedPicture = getRecivedPictureFile();
|
BackgroundSourceUtils utils= BackgroundSourceUtils.getInstance(this);
|
||||||
if (FileUtils.copyFile(fSrcImage, mfRecivedPicture)) {
|
utils.saveFileToPreviewBean(fSrcImage, selectedImage.toString());
|
||||||
startCropImageActivity(false);
|
startCropImageActivity(false);
|
||||||
} else {
|
//mfRecivedPicture = getRecivedPictureFile();
|
||||||
ToastUtils.show("图片复制失败,请重试");
|
// BackgroundBean bean = utils.getPreviewBackgroundBean();
|
||||||
}
|
// mfRecivedPicture = getRecivedPictureFile();
|
||||||
|
// if (FileUtils.copyFile(fSrcImage, mfRecivedPicture)) {
|
||||||
|
// startCropImageActivity(false);
|
||||||
|
// } else {
|
||||||
|
// ToastUtils.show("图片复制失败,请重试");
|
||||||
|
// }
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LogUtils.e(TAG, "选择图片异常" + e);
|
LogUtils.e(TAG, "选择图片异常" + e);
|
||||||
ToastUtils.show("选择图片失败:" + e.getMessage());
|
ToastUtils.show("选择图片失败:" + e.getMessage());
|
||||||
@@ -618,8 +646,8 @@ public class BackgroundPictureActivity extends WinBoLLActivity implements Backgr
|
|||||||
}
|
}
|
||||||
|
|
||||||
void setBackgroundColor() {
|
void setBackgroundColor() {
|
||||||
BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(BackgroundPictureActivity.this);
|
BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(BackgroundSettingsActivity.this);
|
||||||
BackgroundPictureBean bean = utils.getBackgroundPictureBean();
|
BackgroundBean bean = utils.getCurrentBackgroundBean();
|
||||||
int nPixelColor = bean.getPixelColor();
|
int nPixelColor = bean.getPixelColor();
|
||||||
RelativeLayout mainLayout = findViewById(R.id.activitybackgroundpictureRelativeLayout1);
|
RelativeLayout mainLayout = findViewById(R.id.activitybackgroundpictureRelativeLayout1);
|
||||||
mainLayout.setBackgroundColor(nPixelColor);
|
mainLayout.setBackgroundColor(nPixelColor);
|
||||||
@@ -665,7 +693,8 @@ public class BackgroundPictureActivity extends WinBoLLActivity implements Backgr
|
|||||||
OnRecivedPictureListener onRecivedPictureListener = new OnRecivedPictureListener(){
|
OnRecivedPictureListener onRecivedPictureListener = new OnRecivedPictureListener(){
|
||||||
@Override
|
@Override
|
||||||
public void onRecivedPicture(String srcFilePath, String srcFileUrl) {
|
public void onRecivedPicture(String srcFilePath, String srcFileUrl) {
|
||||||
saveToRecivedBackground(srcFilePath, srcFileUrl);
|
BackgroundSourceUtils utils= BackgroundSourceUtils.getInstance(BackgroundSettingsActivity.this);
|
||||||
|
utils.saveFileToPreviewBean(new File(srcFilePath), srcFileUrl);
|
||||||
startCropImageActivity(true);
|
startCropImageActivity(true);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -681,16 +710,17 @@ public class BackgroundPictureActivity extends WinBoLLActivity implements Backgr
|
|||||||
@Override
|
@Override
|
||||||
public void onNo() {
|
public void onNo() {
|
||||||
isCommitSettings = true;
|
isCommitSettings = true;
|
||||||
BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(BackgroundPictureActivity.this);
|
BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(BackgroundSettingsActivity.this);
|
||||||
BackgroundPictureBean bean = utils.getBackgroundPictureBean();
|
BackgroundBean bean = utils.getCurrentBackgroundBean();
|
||||||
bean.setIsUseBackgroundFile(!preViewFilePath.equals(""));
|
bean.setIsUseBackgroundFile(!preViewFilePath.equals(""));
|
||||||
utils.saveData();
|
utils.saveSettings();
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onYes() {
|
public void onYes() {
|
||||||
bvPreviewBackground.setImageViewSource(preViewFilePath);
|
BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(BackgroundSettingsActivity.this);
|
||||||
|
utils.commitPreviewSourceToCurrent();
|
||||||
isCommitSettings = true;
|
isCommitSettings = true;
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
@@ -12,7 +12,7 @@ import cc.winboll.studio.libappbase.LogUtils;
|
|||||||
import cc.winboll.studio.libappbase.ToastUtils;
|
import cc.winboll.studio.libappbase.ToastUtils;
|
||||||
import cc.winboll.studio.powerbell.App;
|
import cc.winboll.studio.powerbell.App;
|
||||||
import cc.winboll.studio.powerbell.R;
|
import cc.winboll.studio.powerbell.R;
|
||||||
import cc.winboll.studio.powerbell.beans.BatteryInfoBean;
|
import cc.winboll.studio.powerbell.model.BatteryInfoBean;
|
||||||
import cc.winboll.studio.powerbell.receivers.ControlCenterServiceReceiver;
|
import cc.winboll.studio.powerbell.receivers.ControlCenterServiceReceiver;
|
||||||
import cc.winboll.studio.powerbell.utils.AppCacheUtils;
|
import cc.winboll.studio.powerbell.utils.AppCacheUtils;
|
||||||
import cc.winboll.studio.powerbell.utils.StringUtils;
|
import cc.winboll.studio.powerbell.utils.StringUtils;
|
||||||
|
|||||||
@@ -24,9 +24,9 @@ import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity;
|
|||||||
import cc.winboll.studio.libaes.views.AToolbar;
|
import cc.winboll.studio.libaes.views.AToolbar;
|
||||||
import cc.winboll.studio.libappbase.GlobalApplication;
|
import cc.winboll.studio.libappbase.GlobalApplication;
|
||||||
import cc.winboll.studio.powerbell.R;
|
import cc.winboll.studio.powerbell.R;
|
||||||
import cc.winboll.studio.powerbell.activities.BackgroundPictureActivity;
|
import cc.winboll.studio.powerbell.activities.BackgroundSettingsActivity;
|
||||||
import cc.winboll.studio.powerbell.activities.PixelPickerActivity;
|
import cc.winboll.studio.powerbell.activities.PixelPickerActivity;
|
||||||
import cc.winboll.studio.powerbell.beans.BackgroundPictureBean;
|
import cc.winboll.studio.powerbell.model.BackgroundBean;
|
||||||
import cc.winboll.studio.powerbell.utils.BackgroundSourceUtils;
|
import cc.winboll.studio.powerbell.utils.BackgroundSourceUtils;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
@@ -194,9 +194,9 @@ public class PixelPickerActivity extends WinBoLLActivity implements IWinBoLLActi
|
|||||||
dialog.dismiss();
|
dialog.dismiss();
|
||||||
// 可以在这里添加确定后的回调逻辑
|
// 可以在这里添加确定后的回调逻辑
|
||||||
BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(PixelPickerActivity.this);
|
BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(PixelPickerActivity.this);
|
||||||
BackgroundPictureBean bean = utils.getBackgroundPictureBean();
|
BackgroundBean bean = utils.getCurrentBackgroundBean();
|
||||||
bean.setPixelColor(pixelColor);
|
bean.setPixelColor(pixelColor);
|
||||||
utils.saveData();
|
utils.saveSettings();
|
||||||
Toast.makeText(PixelPickerActivity.this, "已记录像素值", Toast.LENGTH_SHORT).show();
|
Toast.makeText(PixelPickerActivity.this, "已记录像素值", Toast.LENGTH_SHORT).show();
|
||||||
setBackgroundColor();
|
setBackgroundColor();
|
||||||
}
|
}
|
||||||
@@ -218,7 +218,7 @@ public class PixelPickerActivity extends WinBoLLActivity implements IWinBoLLActi
|
|||||||
|
|
||||||
void setBackgroundColor() {
|
void setBackgroundColor() {
|
||||||
BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(PixelPickerActivity.this);
|
BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(PixelPickerActivity.this);
|
||||||
BackgroundPictureBean bean = utils.getBackgroundPictureBean();
|
BackgroundBean bean = utils.getCurrentBackgroundBean();
|
||||||
int nPixelColor = bean.getPixelColor();
|
int nPixelColor = bean.getPixelColor();
|
||||||
RelativeLayout mainLayout = findViewById(R.id.activitypixelpickerRelativeLayout1);
|
RelativeLayout mainLayout = findViewById(R.id.activitypixelpickerRelativeLayout1);
|
||||||
mainLayout.setBackgroundColor(nPixelColor);
|
mainLayout.setBackgroundColor(nPixelColor);
|
||||||
@@ -235,7 +235,7 @@ public class PixelPickerActivity extends WinBoLLActivity implements IWinBoLLActi
|
|||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
if (item.getItemId() == android.R.id.home) {
|
if (item.getItemId() == android.R.id.home) {
|
||||||
Intent intent = new Intent();
|
Intent intent = new Intent();
|
||||||
intent.setClass(this, BackgroundPictureActivity.class);
|
intent.setClass(this, BackgroundSettingsActivity.class);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
//GlobalApplication.getWinBoLLActivityManager().startWinBoLLActivity(getApplicationContext(), );
|
//GlobalApplication.getWinBoLLActivityManager().startWinBoLLActivity(getApplicationContext(), );
|
||||||
return true;
|
return true;
|
||||||
@@ -248,7 +248,7 @@ public class PixelPickerActivity extends WinBoLLActivity implements IWinBoLLActi
|
|||||||
public void onBackPressed() {
|
public void onBackPressed() {
|
||||||
super.onBackPressed();
|
super.onBackPressed();
|
||||||
Intent intent = new Intent();
|
Intent intent = new Intent();
|
||||||
intent.setClass(this, BackgroundPictureActivity.class);
|
intent.setClass(this, BackgroundSettingsActivity.class);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
//GlobalApplication.getWinBoLLActivityManager().startWinBoLLActivity(getApplicationContext(), BackgroundPictureActivity.class);
|
//GlobalApplication.getWinBoLLActivityManager().startWinBoLLActivity(getApplicationContext(), BackgroundPictureActivity.class);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import android.widget.TextView;
|
|||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import cc.winboll.studio.powerbell.R;
|
import cc.winboll.studio.powerbell.R;
|
||||||
import cc.winboll.studio.powerbell.adapters.BatteryAdapter;
|
import cc.winboll.studio.powerbell.adapters.BatteryAdapter;
|
||||||
import cc.winboll.studio.powerbell.beans.BatteryData;
|
import cc.winboll.studio.powerbell.model.BatteryData;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|||||||
@@ -1,99 +0,0 @@
|
|||||||
package cc.winboll.studio.powerbell.beans;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @Author ZhanGSKen<zhangsken@qq.com>
|
|
||||||
* @Date 2024/07/18 11:52:28
|
|
||||||
* @Describe 应用背景图片数据类
|
|
||||||
*/
|
|
||||||
import android.util.JsonReader;
|
|
||||||
import android.util.JsonWriter;
|
|
||||||
import cc.winboll.studio.libappbase.BaseBean;
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
public class BackgroundPictureBean extends BaseBean {
|
|
||||||
|
|
||||||
public static final String TAG = "BackgroundPictureBean";
|
|
||||||
|
|
||||||
int backgroundWidth = 100;
|
|
||||||
int backgroundHeight = 100;
|
|
||||||
boolean isUseBackgroundFile = false;
|
|
||||||
// 图片拾取像素颜色
|
|
||||||
int pixelColor = 0;
|
|
||||||
|
|
||||||
public BackgroundPictureBean() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public BackgroundPictureBean(String recivedFileName, boolean isUseBackgroundFile) {
|
|
||||||
this.isUseBackgroundFile = isUseBackgroundFile;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPixelColor(int pixelColor) {
|
|
||||||
this.pixelColor = pixelColor;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getPixelColor() {
|
|
||||||
return pixelColor;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setBackgroundWidth(int backgroundWidth) {
|
|
||||||
this.backgroundWidth = backgroundWidth;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getBackgroundWidth() {
|
|
||||||
return backgroundWidth;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setBackgroundHeight(int backgroundHeight) {
|
|
||||||
this.backgroundHeight = backgroundHeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getBackgroundHeight() {
|
|
||||||
return backgroundHeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setIsUseBackgroundFile(boolean isUseBackgroundFile) {
|
|
||||||
this.isUseBackgroundFile = isUseBackgroundFile;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isUseBackgroundFile() {
|
|
||||||
return isUseBackgroundFile;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getName() {
|
|
||||||
return BackgroundPictureBean.class.getName();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void writeThisToJsonWriter(JsonWriter jsonWriter) throws IOException {
|
|
||||||
super.writeThisToJsonWriter(jsonWriter);
|
|
||||||
BackgroundPictureBean bean = this;
|
|
||||||
jsonWriter.name("backgroundWidth").value(bean.getBackgroundWidth());
|
|
||||||
jsonWriter.name("backgroundHeight").value(bean.getBackgroundHeight());
|
|
||||||
jsonWriter.name("isUseBackgroundFile").value(bean.isUseBackgroundFile());
|
|
||||||
jsonWriter.name("pixelColor").value(bean.getPixelColor());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BaseBean readBeanFromJsonReader(JsonReader jsonReader) throws IOException {
|
|
||||||
BackgroundPictureBean bean = new BackgroundPictureBean();
|
|
||||||
jsonReader.beginObject();
|
|
||||||
while (jsonReader.hasNext()) {
|
|
||||||
String name = jsonReader.nextName();
|
|
||||||
if (name.equals("backgroundWidth")) {
|
|
||||||
bean.setBackgroundWidth(jsonReader.nextInt());
|
|
||||||
} else if (name.equals("backgroundHeight")) {
|
|
||||||
bean.setBackgroundHeight(jsonReader.nextInt());
|
|
||||||
} else if (name.equals("isUseBackgroundFile")) {
|
|
||||||
bean.setIsUseBackgroundFile(jsonReader.nextBoolean());
|
|
||||||
} else if (name.equals("pixelColor")) {
|
|
||||||
bean.setPixelColor(jsonReader.nextInt());
|
|
||||||
} else {
|
|
||||||
jsonReader.skipValue();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 结束 JSON 对象
|
|
||||||
jsonReader.endObject();
|
|
||||||
return bean;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -12,7 +12,7 @@ import android.widget.Toast;
|
|||||||
import cc.winboll.studio.libappbase.LogUtils;
|
import cc.winboll.studio.libappbase.LogUtils;
|
||||||
import cc.winboll.studio.powerbell.MainActivity;
|
import cc.winboll.studio.powerbell.MainActivity;
|
||||||
import cc.winboll.studio.powerbell.R;
|
import cc.winboll.studio.powerbell.R;
|
||||||
import cc.winboll.studio.powerbell.activities.BackgroundPictureActivity;
|
import cc.winboll.studio.powerbell.activities.BackgroundSettingsActivity;
|
||||||
import cc.winboll.studio.powerbell.utils.BackgroundSourceUtils;
|
import cc.winboll.studio.powerbell.utils.BackgroundSourceUtils;
|
||||||
import cc.winboll.studio.powerbell.utils.FileUtils;
|
import cc.winboll.studio.powerbell.utils.FileUtils;
|
||||||
import cc.winboll.studio.powerbell.utils.UriUtil;
|
import cc.winboll.studio.powerbell.utils.UriUtil;
|
||||||
@@ -40,7 +40,7 @@ public class BackgroundPicturePreviewDialog extends Dialog {
|
|||||||
initEnv();
|
initEnv();
|
||||||
|
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mBackgroundPictureUtils = ((BackgroundPictureActivity)context).mBackgroundPictureUtils;
|
mBackgroundPictureUtils = ((BackgroundSettingsActivity)context).mBackgroundSourceUtils;
|
||||||
|
|
||||||
ImageView imageView = findViewById(R.id.dialogbackgroundpicturepreviewImageView1);
|
ImageView imageView = findViewById(R.id.dialogbackgroundpicturepreviewImageView1);
|
||||||
copyAndViewRecivePicture(imageView);
|
copyAndViewRecivePicture(imageView);
|
||||||
@@ -78,7 +78,7 @@ public class BackgroundPicturePreviewDialog extends Dialog {
|
|||||||
|
|
||||||
void copyAndViewRecivePicture(ImageView imageView) {
|
void copyAndViewRecivePicture(ImageView imageView) {
|
||||||
//AppConfigUtils appConfigUtils = AppConfigUtils.getInstance((GlobalApplication)mContext.getApplicationContext());
|
//AppConfigUtils appConfigUtils = AppConfigUtils.getInstance((GlobalApplication)mContext.getApplicationContext());
|
||||||
BackgroundPictureActivity activity = ((BackgroundPictureActivity)mContext);
|
BackgroundSettingsActivity activity = ((BackgroundSettingsActivity)mContext);
|
||||||
|
|
||||||
//取出文件uri
|
//取出文件uri
|
||||||
Uri uri = activity.getIntent().getData();
|
Uri uri = activity.getIntent().getData();
|
||||||
@@ -95,7 +95,7 @@ public class BackgroundPicturePreviewDialog extends Dialog {
|
|||||||
|
|
||||||
File fSrcImage = new File(szSrcImage);
|
File fSrcImage = new File(szSrcImage);
|
||||||
//mszPreReceivedFileName = DateUtils.getDateNowString() + "-" + fSrcImage.getName();
|
//mszPreReceivedFileName = DateUtils.getDateNowString() + "-" + fSrcImage.getName();
|
||||||
File mfPreReceivedPhoto = new File(activity.mBackgroundPictureUtils.getBackgroundDir(), mszPreReceivedFileName);
|
File mfPreReceivedPhoto = new File(activity.mBackgroundSourceUtils.getBackgroundSourceDirPath(), mszPreReceivedFileName);
|
||||||
// 复制源图片到剪裁文件
|
// 复制源图片到剪裁文件
|
||||||
try {
|
try {
|
||||||
FileUtils.copyFileUsingFileChannels(fSrcImage, mfPreReceivedPhoto);
|
FileUtils.copyFileUsingFileChannels(fSrcImage, mfPreReceivedPhoto);
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import java.io.File;
|
|||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import cc.winboll.studio.powerbell.utils.ImageDownloader;
|
import cc.winboll.studio.powerbell.utils.ImageDownloader;
|
||||||
|
import cc.winboll.studio.powerbell.utils.BackgroundSourceUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author ZhanGSKen&豆包大模型<zhangsken@qq.com>
|
* @Author ZhanGSKen&豆包大模型<zhangsken@qq.com>
|
||||||
@@ -151,6 +152,9 @@ public class NetworkBackgroundDialog extends AlertDialog {
|
|||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
LogUtils.d("NetworkBackgroundDialog", "取消按钮点击");
|
LogUtils.d("NetworkBackgroundDialog", "取消按钮点击");
|
||||||
|
BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(mContext);
|
||||||
|
utils.setCurrentSourceToPreview();
|
||||||
|
|
||||||
dismiss(); // 关闭对话框
|
dismiss(); // 关闭对话框
|
||||||
if (listener != null) {
|
if (listener != null) {
|
||||||
listener.onCancel();
|
listener.onCancel();
|
||||||
@@ -164,8 +168,9 @@ public class NetworkBackgroundDialog extends AlertDialog {
|
|||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
LogUtils.d("NetworkBackgroundDialog", "确认按钮点击");
|
LogUtils.d("NetworkBackgroundDialog", "确认按钮点击");
|
||||||
// 确定预览背景资源
|
// 确定预览背景资源
|
||||||
bvBackgroundPreview.previewBackgroundImage(previewFilePath);
|
BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(mContext);
|
||||||
|
utils.saveFileToPreviewBean(new File(previewFilePath), previewFileUrl);
|
||||||
|
|
||||||
dismiss(); // 关闭对话框
|
dismiss(); // 关闭对话框
|
||||||
if (listener != null) {
|
if (listener != null) {
|
||||||
listener.onConfirm(previewFilePath, previewFileUrl);
|
listener.onConfirm(previewFilePath, previewFileUrl);
|
||||||
@@ -198,7 +203,11 @@ public class NetworkBackgroundDialog extends AlertDialog {
|
|||||||
|
|
||||||
// 预览背景
|
// 预览背景
|
||||||
previewFilePath = filePath;
|
previewFilePath = filePath;
|
||||||
bvBackgroundPreview.previewBackgroundImage(previewFilePath);
|
BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(mContext);
|
||||||
|
utils.saveFileToPreviewBean(new File(previewFilePath), previewFileUrl);
|
||||||
|
bvBackgroundPreview.reloadPreviewBackground();
|
||||||
|
|
||||||
|
//bvBackgroundPreview.previewBackgroundImage(previewFilePath);
|
||||||
|
|
||||||
LogUtils.d(TAG, "图片预览成功:" + filePath);
|
LogUtils.d(TAG, "图片预览成功:" + filePath);
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ import cc.winboll.studio.libappbase.LogUtils;
|
|||||||
import cc.winboll.studio.powerbell.App;
|
import cc.winboll.studio.powerbell.App;
|
||||||
import cc.winboll.studio.powerbell.R;
|
import cc.winboll.studio.powerbell.R;
|
||||||
import cc.winboll.studio.powerbell.activities.PixelPickerActivity;
|
import cc.winboll.studio.powerbell.activities.PixelPickerActivity;
|
||||||
import cc.winboll.studio.powerbell.beans.BackgroundPictureBean;
|
import cc.winboll.studio.powerbell.model.BackgroundBean;
|
||||||
import cc.winboll.studio.powerbell.services.ControlCenterService;
|
import cc.winboll.studio.powerbell.services.ControlCenterService;
|
||||||
import cc.winboll.studio.powerbell.utils.AppConfigUtils;
|
import cc.winboll.studio.powerbell.utils.AppConfigUtils;
|
||||||
import cc.winboll.studio.powerbell.utils.BackgroundSourceUtils;
|
import cc.winboll.studio.powerbell.utils.BackgroundSourceUtils;
|
||||||
@@ -84,7 +84,7 @@ public class MainViewFragment extends Fragment {
|
|||||||
bvPreviewBackground = mView.findViewById(R.id.fragmentmainviewBackgroundView1);
|
bvPreviewBackground = mView.findViewById(R.id.fragmentmainviewBackgroundView1);
|
||||||
|
|
||||||
BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(getActivity());
|
BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(getActivity());
|
||||||
BackgroundPictureBean bean = utils.getBackgroundPictureBean();
|
BackgroundBean bean = utils.getCurrentBackgroundBean();
|
||||||
int nPixelColor = bean.getPixelColor();
|
int nPixelColor = bean.getPixelColor();
|
||||||
bvPreviewBackground.setBackgroundColor(nPixelColor);
|
bvPreviewBackground.setBackgroundColor(nPixelColor);
|
||||||
/*final View mainImageView = mView.findViewById(R.id.fragmentmainviewImageView1);
|
/*final View mainImageView = mView.findViewById(R.id.fragmentmainviewImageView1);
|
||||||
@@ -153,7 +153,7 @@ public class MainViewFragment extends Fragment {
|
|||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(getActivity());
|
BackgroundSourceUtils utils = BackgroundSourceUtils.getInstance(getActivity());
|
||||||
BackgroundPictureBean bean = utils.getBackgroundPictureBean();
|
BackgroundBean bean = utils.getCurrentBackgroundBean();
|
||||||
int nPixelColor = bean.getPixelColor();
|
int nPixelColor = bean.getPixelColor();
|
||||||
bvPreviewBackground.setBackgroundColor(nPixelColor);
|
bvPreviewBackground.setBackgroundColor(nPixelColor);
|
||||||
}
|
}
|
||||||
@@ -320,7 +320,7 @@ public class MainViewFragment extends Fragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void reloadBackground() {
|
public void reloadBackground() {
|
||||||
bvPreviewBackground.reloadBackgroundImage();
|
bvPreviewBackground.reloadCurrentBackground();
|
||||||
// BackgroundPictureBean bean = BackgroundPictureUtils.getInstance(getActivity()).getBackgroundPictureBean();
|
// BackgroundPictureBean bean = BackgroundPictureUtils.getInstance(getActivity()).getBackgroundPictureBean();
|
||||||
// ImageView imageView = mView.findViewById(R.id.fragmentmainviewImageView1);
|
// ImageView imageView = mView.findViewById(R.id.fragmentmainviewImageView1);
|
||||||
// String szBackgroundFilePath = BackgroundPictureUtils.getInstance(getActivity()).getBackgroundDir() + BackgroundPictureActivity.getBackgroundFileName();
|
// String szBackgroundFilePath = BackgroundPictureUtils.getInstance(getActivity()).getBackgroundDir() + BackgroundPictureActivity.getBackgroundFileName();
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package cc.winboll.studio.powerbell.beans;
|
package cc.winboll.studio.powerbell.model;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author ZhanGSKen<zhangsken@qq.com>
|
* @Author ZhanGSKen<zhangsken@qq.com>
|
||||||
@@ -0,0 +1,143 @@
|
|||||||
|
package cc.winboll.studio.powerbell.model;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author ZhanGSKen<zhangsken@qq.com>
|
||||||
|
* @Date 2024/07/18 11:52:28
|
||||||
|
* @Describe 应用背景图片数据类
|
||||||
|
*/
|
||||||
|
import android.util.JsonReader;
|
||||||
|
import android.util.JsonWriter;
|
||||||
|
import cc.winboll.studio.libappbase.BaseBean;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
public class BackgroundBean extends BaseBean {
|
||||||
|
|
||||||
|
public static final String TAG = "BackgroundPictureBean";
|
||||||
|
|
||||||
|
String backgroundFileName = "";
|
||||||
|
String backgroundFileInfo = "";
|
||||||
|
boolean isUseBackgroundFile = false;
|
||||||
|
String backgroundScaledCompressFileName = "";
|
||||||
|
boolean isUseScaledCompress = false;
|
||||||
|
int backgroundWidth = 100;
|
||||||
|
int backgroundHeight = 100;
|
||||||
|
// 图片拾取像素颜色
|
||||||
|
int pixelColor = 0;
|
||||||
|
|
||||||
|
public BackgroundBean() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBackgroundScaledCompressFileName(String backgroundScaledCompressFileName) {
|
||||||
|
this.backgroundScaledCompressFileName = backgroundScaledCompressFileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBackgroundScaledCompressFileName() {
|
||||||
|
return backgroundScaledCompressFileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIsUseScaledCompress(boolean isUseScaledCompress) {
|
||||||
|
this.isUseScaledCompress = isUseScaledCompress;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isUseScaledCompress() {
|
||||||
|
return isUseScaledCompress;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIsUseBackgroundFile(boolean isUseBackgroundFile) {
|
||||||
|
this.isUseBackgroundFile = isUseBackgroundFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isUseBackgroundFile() {
|
||||||
|
return isUseBackgroundFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBackgroundFileInfo(String backgroundFileInfo) {
|
||||||
|
this.backgroundFileInfo = backgroundFileInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBackgroundFileInfo() {
|
||||||
|
return backgroundFileInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBackgroundFileName(String backgroundFileName) {
|
||||||
|
this.backgroundFileName = backgroundFileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBackgroundFileName() {
|
||||||
|
return backgroundFileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPixelColor(int pixelColor) {
|
||||||
|
this.pixelColor = pixelColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPixelColor() {
|
||||||
|
return pixelColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBackgroundWidth(int backgroundWidth) {
|
||||||
|
this.backgroundWidth = backgroundWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getBackgroundWidth() {
|
||||||
|
return backgroundWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBackgroundHeight(int backgroundHeight) {
|
||||||
|
this.backgroundHeight = backgroundHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getBackgroundHeight() {
|
||||||
|
return backgroundHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return BackgroundBean.class.getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeThisToJsonWriter(JsonWriter jsonWriter) throws IOException {
|
||||||
|
super.writeThisToJsonWriter(jsonWriter);
|
||||||
|
BackgroundBean bean = this;
|
||||||
|
jsonWriter.name("backgroundFileName").value(bean.getBackgroundFileName());
|
||||||
|
jsonWriter.name("backgroundFileInfo").value(bean.getBackgroundFileInfo());
|
||||||
|
jsonWriter.name("isUseBackgroundFile").value(bean.isUseBackgroundFile());
|
||||||
|
jsonWriter.name("backgroundScaledCompressFileName").value(bean.getBackgroundScaledCompressFileName());
|
||||||
|
jsonWriter.name("isUseScaledCompress").value(bean.isUseScaledCompress());
|
||||||
|
jsonWriter.name("backgroundWidth").value(bean.getBackgroundWidth());
|
||||||
|
jsonWriter.name("backgroundHeight").value(bean.getBackgroundHeight());
|
||||||
|
jsonWriter.name("pixelColor").value(bean.getPixelColor());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BaseBean readBeanFromJsonReader(JsonReader jsonReader) throws IOException {
|
||||||
|
BackgroundBean bean = new BackgroundBean();
|
||||||
|
jsonReader.beginObject();
|
||||||
|
while (jsonReader.hasNext()) {
|
||||||
|
String name = jsonReader.nextName();
|
||||||
|
if (name.equals("backgroundFileName")) {
|
||||||
|
bean.setBackgroundFileName(jsonReader.nextString());
|
||||||
|
} else if (name.equals("backgroundFileInfo")) {
|
||||||
|
bean.setBackgroundFileInfo(jsonReader.nextString());
|
||||||
|
} else if (name.equals("isUseBackgroundFile")) {
|
||||||
|
bean.setIsUseBackgroundFile(jsonReader.nextBoolean());
|
||||||
|
} else if (name.equals("backgroundScaledCompressFileName")) {
|
||||||
|
bean.setBackgroundScaledCompressFileName(jsonReader.nextString());
|
||||||
|
} else if (name.equals("isUseScaledCompress")) {
|
||||||
|
bean.setIsUseScaledCompress(jsonReader.nextBoolean());
|
||||||
|
} else if (name.equals("backgroundWidth")) {
|
||||||
|
bean.setBackgroundWidth(jsonReader.nextInt());
|
||||||
|
} else if (name.equals("backgroundHeight")) {
|
||||||
|
bean.setBackgroundHeight(jsonReader.nextInt());
|
||||||
|
} else if (name.equals("pixelColor")) {
|
||||||
|
bean.setPixelColor(jsonReader.nextInt());
|
||||||
|
} else {
|
||||||
|
jsonReader.skipValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 结束 JSON 对象
|
||||||
|
jsonReader.endObject();
|
||||||
|
return bean;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package cc.winboll.studio.powerbell.beans;
|
package cc.winboll.studio.powerbell.model;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author ZhanGSKen<zhangsken@qq.com>
|
* @Author ZhanGSKen<zhangsken@qq.com>
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package cc.winboll.studio.powerbell.beans;
|
package cc.winboll.studio.powerbell.model;
|
||||||
|
|
||||||
import android.util.JsonReader;
|
import android.util.JsonReader;
|
||||||
import android.util.JsonWriter;
|
import android.util.JsonWriter;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package cc.winboll.studio.powerbell.beans;
|
package cc.winboll.studio.powerbell.model;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author ZhanGSKen<zhangsken@qq.com>
|
* @Author ZhanGSKen<zhangsken@qq.com>
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package cc.winboll.studio.powerbell.beans;
|
package cc.winboll.studio.powerbell.model;
|
||||||
|
|
||||||
// 应用消息结构
|
// 应用消息结构
|
||||||
//
|
//
|
||||||
@@ -5,7 +5,7 @@ import android.content.Context;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
import cc.winboll.studio.libappbase.LogUtils;
|
import cc.winboll.studio.libappbase.LogUtils;
|
||||||
import cc.winboll.studio.powerbell.beans.AppConfigBean;
|
import cc.winboll.studio.powerbell.model.AppConfigBean;
|
||||||
import cc.winboll.studio.powerbell.services.ControlCenterService;
|
import cc.winboll.studio.powerbell.services.ControlCenterService;
|
||||||
import cc.winboll.studio.powerbell.utils.AppConfigUtils;
|
import cc.winboll.studio.powerbell.utils.AppConfigUtils;
|
||||||
import cc.winboll.studio.powerbell.utils.BatteryUtils;
|
import cc.winboll.studio.powerbell.utils.BatteryUtils;
|
||||||
|
|||||||
@@ -23,8 +23,8 @@ import cc.winboll.studio.libappbase.ToastUtils;
|
|||||||
import cc.winboll.studio.powerbell.App;
|
import cc.winboll.studio.powerbell.App;
|
||||||
import cc.winboll.studio.powerbell.MainActivity;
|
import cc.winboll.studio.powerbell.MainActivity;
|
||||||
import cc.winboll.studio.powerbell.R;
|
import cc.winboll.studio.powerbell.R;
|
||||||
import cc.winboll.studio.powerbell.beans.AppConfigBean;
|
import cc.winboll.studio.powerbell.model.AppConfigBean;
|
||||||
import cc.winboll.studio.powerbell.beans.NotificationMessage;
|
import cc.winboll.studio.powerbell.model.NotificationMessage;
|
||||||
import cc.winboll.studio.powerbell.handlers.ControlCenterServiceHandler;
|
import cc.winboll.studio.powerbell.handlers.ControlCenterServiceHandler;
|
||||||
import cc.winboll.studio.powerbell.receivers.ControlCenterServiceReceiver;
|
import cc.winboll.studio.powerbell.receivers.ControlCenterServiceReceiver;
|
||||||
import cc.winboll.studio.powerbell.services.AssistantService;
|
import cc.winboll.studio.powerbell.services.AssistantService;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package cc.winboll.studio.powerbell.utils;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import cc.winboll.studio.libappbase.LogUtils;
|
import cc.winboll.studio.libappbase.LogUtils;
|
||||||
import cc.winboll.studio.powerbell.beans.BatteryInfoBean;
|
import cc.winboll.studio.powerbell.model.BatteryInfoBean;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public class AppCacheUtils {
|
public class AppCacheUtils {
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ import android.content.Context;
|
|||||||
import cc.winboll.studio.libappbase.LogUtils;
|
import cc.winboll.studio.libappbase.LogUtils;
|
||||||
import cc.winboll.studio.powerbell.App;
|
import cc.winboll.studio.powerbell.App;
|
||||||
import cc.winboll.studio.powerbell.MainActivity;
|
import cc.winboll.studio.powerbell.MainActivity;
|
||||||
import cc.winboll.studio.powerbell.beans.AppConfigBean;
|
import cc.winboll.studio.powerbell.model.AppConfigBean;
|
||||||
import cc.winboll.studio.powerbell.beans.ControlCenterServiceBean;
|
import cc.winboll.studio.powerbell.model.ControlCenterServiceBean;
|
||||||
import cc.winboll.studio.powerbell.dialogs.YesNoAlertDialog;
|
import cc.winboll.studio.powerbell.dialogs.YesNoAlertDialog;
|
||||||
import cc.winboll.studio.powerbell.fragments.MainViewFragment;
|
import cc.winboll.studio.powerbell.fragments.MainViewFragment;
|
||||||
import cc.winboll.studio.powerbell.services.ControlCenterService;
|
import cc.winboll.studio.powerbell.services.ControlCenterService;
|
||||||
|
|||||||
@@ -1,64 +1,138 @@
|
|||||||
package cc.winboll.studio.powerbell.utils;
|
package cc.winboll.studio.powerbell.utils;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import cc.winboll.studio.powerbell.model.BackgroundBean;
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author ZhanGSKen<zhangsken@qq.com>
|
* @Author ZhanGSKen<zhangsken@qq.com>
|
||||||
* @Date 2024/07/18 12:07:20
|
* @Date 2024/07/18 12:07:20
|
||||||
* @Describe 背景图片工具集
|
* @Describe 背景图片工具集(修复单例模式,线程安全)
|
||||||
*/
|
*/
|
||||||
import android.content.Context;
|
|
||||||
import cc.winboll.studio.powerbell.beans.BackgroundPictureBean;
|
|
||||||
import java.io.File;
|
|
||||||
|
|
||||||
public class BackgroundSourceUtils {
|
public class BackgroundSourceUtils {
|
||||||
|
|
||||||
public static final String TAG = "BackgroundPictureUtils";
|
public static final String TAG = "BackgroundPictureUtils";
|
||||||
|
|
||||||
static BackgroundSourceUtils _mBackgroundPictureUtils;
|
// 1. 静态实例加volatile,禁止指令重排,保证可见性
|
||||||
Context mContext;
|
private static volatile BackgroundSourceUtils sInstance;
|
||||||
BackgroundPictureBean mBackgroundPictureBean;
|
private Context mContext;
|
||||||
|
private File currentBackgroundBeanFile;
|
||||||
|
private BackgroundBean currentBackgroundBean;
|
||||||
|
private File previewBackgroundBeanFile;
|
||||||
|
private BackgroundBean previewBackgroundBean;
|
||||||
|
// 应用外部存储文件夹路径
|
||||||
|
private File fUtilsDir;
|
||||||
|
private File fModelDir;
|
||||||
// 背景图片目录
|
// 背景图片目录
|
||||||
String mszBackgroundDir;
|
private File fBackgroundSourceDir;
|
||||||
|
|
||||||
BackgroundSourceUtils(Context context) {
|
// 2. 私有构造器(加防反射逻辑)
|
||||||
mContext = context;
|
private BackgroundSourceUtils(Context context) {
|
||||||
String szExternalFilesDir = mContext.getExternalFilesDir(TAG) + File.separator;
|
// 防反射破坏:若已有实例,抛异常阻止创建
|
||||||
setBackgroundDir(szExternalFilesDir + "Background" + File.separator);
|
if (sInstance != null) {
|
||||||
loadBackgroundPictureBean();
|
throw new RuntimeException("BackgroundSourceUtils 是单例类,禁止重复创建!");
|
||||||
|
}
|
||||||
|
// 上下文建议用Application Context,避免内存泄漏
|
||||||
|
this.mContext = context.getApplicationContext();
|
||||||
|
fUtilsDir = this.mContext.getExternalFilesDir(TAG);
|
||||||
|
fModelDir = new File(fUtilsDir, "ModelDir");
|
||||||
|
currentBackgroundBeanFile = new File(fModelDir, "currentBackgroundBean.json");
|
||||||
|
previewBackgroundBeanFile = new File(fModelDir, "previewBackgroundBean.json");
|
||||||
|
fBackgroundSourceDir = new File(fUtilsDir, "BackgroundSource");
|
||||||
|
|
||||||
|
// 加载配置
|
||||||
|
loadSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 3. 双重校验锁单例(线程安全,高效)
|
||||||
public static BackgroundSourceUtils getInstance(Context context) {
|
public static BackgroundSourceUtils getInstance(Context context) {
|
||||||
if (_mBackgroundPictureUtils == null) {
|
// 第一重校验:避免每次调用都加锁(提高效率)
|
||||||
_mBackgroundPictureUtils = new BackgroundSourceUtils(context);
|
if (sInstance == null) {
|
||||||
|
// 同步锁:保证同一时刻只有一个线程进入创建逻辑
|
||||||
|
synchronized (BackgroundSourceUtils.class) {
|
||||||
|
// 第二重校验:防止多线程并发时重复创建(核心)
|
||||||
|
if (sInstance == null) {
|
||||||
|
sInstance = new BackgroundSourceUtils(context);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return _mBackgroundPictureUtils;
|
return sInstance;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
/*
|
||||||
// 加载应用背景图片配置数据
|
* 加载背景图片配置数据
|
||||||
//
|
*/
|
||||||
public BackgroundPictureBean loadBackgroundPictureBean() {
|
void loadSettings() {
|
||||||
mBackgroundPictureBean = BackgroundPictureBean.loadBean(mContext, BackgroundPictureBean.class);
|
currentBackgroundBean = BackgroundBean.loadBeanFromFile(currentBackgroundBeanFile.getAbsolutePath(), BackgroundBean.class);
|
||||||
if (mBackgroundPictureBean == null) {
|
if (currentBackgroundBean == null) {
|
||||||
mBackgroundPictureBean = new BackgroundPictureBean();
|
currentBackgroundBean = new BackgroundBean();
|
||||||
BackgroundPictureBean.saveBean(mContext, mBackgroundPictureBean);
|
BackgroundBean.saveBeanToFile(currentBackgroundBeanFile.getAbsolutePath(), currentBackgroundBean);
|
||||||
|
}
|
||||||
|
previewBackgroundBean = BackgroundBean.loadBeanFromFile(previewBackgroundBeanFile.getAbsolutePath(), BackgroundBean.class);
|
||||||
|
if (previewBackgroundBean == null) {
|
||||||
|
previewBackgroundBean = new BackgroundBean();
|
||||||
|
BackgroundBean.saveBeanToFile(previewBackgroundBeanFile.getAbsolutePath(), previewBackgroundBean);
|
||||||
}
|
}
|
||||||
return mBackgroundPictureBean;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public BackgroundBean getCurrentBackgroundBean() {
|
||||||
|
return currentBackgroundBean;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BackgroundBean getPreviewBackgroundBean() {
|
||||||
|
return previewBackgroundBean;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCurrentBackgroundFilePath() {
|
||||||
|
loadSettings();
|
||||||
|
File file = new File(fBackgroundSourceDir, currentBackgroundBean.getBackgroundFileName());
|
||||||
|
return file.getAbsolutePath();
|
||||||
|
}
|
||||||
|
|
||||||
void setBackgroundDir(String mszBackgroundDir) {
|
public String getPreviewBackgroundFilePath() {
|
||||||
this.mszBackgroundDir = mszBackgroundDir;
|
loadSettings();
|
||||||
|
File file = new File(fBackgroundSourceDir, previewBackgroundBean.getBackgroundFileName());
|
||||||
|
return file.getAbsolutePath();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPreviewBackgroundScaledCompressFilePath() {
|
||||||
|
loadSettings();
|
||||||
|
File file = new File(fBackgroundSourceDir, previewBackgroundBean.getBackgroundScaledCompressFileName());
|
||||||
|
return file.getAbsolutePath();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void saveSettings() {
|
||||||
|
BackgroundBean.saveBeanToFile(currentBackgroundBeanFile.getAbsolutePath(), currentBackgroundBean);
|
||||||
|
BackgroundBean.saveBeanToFile(previewBackgroundBeanFile.getAbsolutePath(), previewBackgroundBean);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getBackgroundDir() {
|
public String getBackgroundSourceDirPath() {
|
||||||
return mszBackgroundDir;
|
return fBackgroundSourceDir.getAbsolutePath();
|
||||||
}
|
|
||||||
|
|
||||||
public BackgroundPictureBean getBackgroundPictureBean() {
|
|
||||||
return mBackgroundPictureBean;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void saveData() {
|
|
||||||
BackgroundPictureBean.saveBean(mContext, mBackgroundPictureBean);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 保存图片到预览模型, 并返回预览模型数据
|
||||||
|
*/
|
||||||
|
public BackgroundBean saveFileToPreviewBean(File sourceFile, String fileInfo) {
|
||||||
|
File previewBackgroundFile = new File(fBackgroundSourceDir, FileUtils.createUniqueFileName(sourceFile));
|
||||||
|
FileUtils.copyFile(sourceFile, previewBackgroundFile);
|
||||||
|
previewBackgroundBean = new BackgroundBean();
|
||||||
|
previewBackgroundBean.setBackgroundFileName(previewBackgroundFile.getName());
|
||||||
|
previewBackgroundBean.setBackgroundScaledCompressFileName("ScaledCompress_"+previewBackgroundFile.getName());
|
||||||
|
previewBackgroundBean.setBackgroundFileName(fileInfo);
|
||||||
|
saveSettings();
|
||||||
|
return previewBackgroundBean;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void commitPreviewSourceToCurrent() {
|
||||||
|
currentBackgroundBean = previewBackgroundBean;
|
||||||
|
saveSettings();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCurrentSourceToPreview() {
|
||||||
|
previewBackgroundBean = currentBackgroundBean;
|
||||||
|
saveSettings();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,176 +1,236 @@
|
|||||||
package cc.winboll.studio.powerbell.utils;
|
package cc.winboll.studio.powerbell.utils;
|
||||||
|
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.BitmapFactory;
|
import android.graphics.BitmapFactory;
|
||||||
import android.graphics.drawable.BitmapDrawable;
|
import android.graphics.drawable.BitmapDrawable;
|
||||||
import cc.winboll.studio.libappbase.LogUtils;
|
import cc.winboll.studio.libappbase.LogUtils;
|
||||||
import java.io.BufferedInputStream;
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.*;
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.nio.channels.FileChannel;
|
import java.nio.channels.FileChannel;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 文件读取工具类
|
* 文件操作工具类
|
||||||
|
* 功能:文件读写、复制、图片转换、文件名处理等常用文件操作
|
||||||
|
* 适配:Java 7+,支持Android全版本
|
||||||
|
* 注意:调用文件操作前需确保已获取存储权限(Android 6.0+ 需动态申请)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class FileUtils {
|
public class FileUtils {
|
||||||
|
|
||||||
|
/** 日志标签 */
|
||||||
public static final String TAG = "FileUtils";
|
public static final String TAG = "FileUtils";
|
||||||
|
/** 读取文件默认缓冲区大小(10KB) */
|
||||||
|
private static final int BUFFER_SIZE = 10240;
|
||||||
|
/** 最大读取文件大小(1GB),防止OOM */
|
||||||
|
private static final long MAX_READ_FILE_SIZE = 1024 * 1024 * 1024;
|
||||||
|
|
||||||
//
|
// ====================================== 文件读取相关 ======================================
|
||||||
// 读取文件内容,作为字符串返回
|
|
||||||
//
|
/**
|
||||||
|
* 读取文件内容并转为字符串
|
||||||
|
* @param filePath 文件绝对路径(非空)
|
||||||
|
* @return 文件内容字符串
|
||||||
|
* @throws IOException 异常:文件不存在、文件过大、读取失败等
|
||||||
|
*/
|
||||||
public static String readFileAsString(String filePath) throws IOException {
|
public static String readFileAsString(String filePath) throws IOException {
|
||||||
|
// 1. 校验文件合法性
|
||||||
File file = new File(filePath);
|
File file = new File(filePath);
|
||||||
if (!file.exists()) {
|
if (!file.exists()) {
|
||||||
throw new FileNotFoundException(filePath);
|
throw new FileNotFoundException("文件不存在:" + filePath);
|
||||||
}
|
}
|
||||||
|
if (file.length() > MAX_READ_FILE_SIZE) {
|
||||||
|
throw new IOException("文件过大(超过1GB),禁止读取:" + filePath);
|
||||||
|
}
|
||||||
|
|
||||||
if (file.length() > 1024 * 1024 * 1024) {
|
// 2. 读取文件内容(使用StringBuilder高效拼接)
|
||||||
throw new IOException("File is too large");
|
StringBuilder sb = new StringBuilder((int) file.length());
|
||||||
}
|
try (FileInputStream fis = new FileInputStream(file)) {
|
||||||
|
byte[] buffer = new byte[BUFFER_SIZE];
|
||||||
StringBuilder sb = new StringBuilder((int) (file.length()));
|
int readLen;
|
||||||
// 创建字节输入流
|
// 循环读取缓冲区,避免一次性读取大文件导致OOM
|
||||||
FileInputStream fis = new FileInputStream(filePath);
|
while ((readLen = fis.read(buffer)) > 0) {
|
||||||
// 创建一个长度为10240的Buffer
|
sb.append(new String(buffer, 0, readLen));
|
||||||
byte[] bbuf = new byte[10240];
|
}
|
||||||
// 用于保存实际读取的字节数
|
}
|
||||||
int hasRead = 0;
|
|
||||||
while ((hasRead = fis.read(bbuf)) > 0) {
|
|
||||||
sb.append(new String(bbuf, 0, hasRead));
|
|
||||||
}
|
|
||||||
fis.close();
|
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
/**
|
||||||
// 根据文件路径读取byte[] 数组
|
* 读取文件内容并转为byte数组(适用于二进制文件:图片、音频等)
|
||||||
//
|
* @param filePath 文件绝对路径(非空)
|
||||||
|
* @return 文件内容byte数组
|
||||||
|
* @throws IOException 异常:文件不存在、读取失败等
|
||||||
|
*/
|
||||||
public static byte[] readFileByBytes(String filePath) throws IOException {
|
public static byte[] readFileByBytes(String filePath) throws IOException {
|
||||||
|
// 1. 校验文件合法性
|
||||||
File file = new File(filePath);
|
File file = new File(filePath);
|
||||||
if (!file.exists()) {
|
if (!file.exists()) {
|
||||||
throw new FileNotFoundException(filePath);
|
throw new FileNotFoundException("文件不存在:" + filePath);
|
||||||
} else {
|
}
|
||||||
ByteArrayOutputStream bos = new ByteArrayOutputStream((int) file.length());
|
|
||||||
BufferedInputStream in = null;
|
|
||||||
|
|
||||||
try {
|
// 2. 缓冲流读取(高效,减少IO次数)
|
||||||
in = new BufferedInputStream(new FileInputStream(file));
|
try (ByteArrayOutputStream bos = new ByteArrayOutputStream((int) file.length());
|
||||||
short bufSize = 1024;
|
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))) {
|
||||||
byte[] buffer = new byte[bufSize];
|
|
||||||
int len1;
|
|
||||||
while (-1 != (len1 = in.read(buffer, 0, bufSize))) {
|
|
||||||
bos.write(buffer, 0, len1);
|
|
||||||
}
|
|
||||||
|
|
||||||
byte[] var7 = bos.toByteArray();
|
byte[] buffer = new byte[BUFFER_SIZE];
|
||||||
return var7;
|
int readLen;
|
||||||
} finally {
|
while ((readLen = bis.read(buffer)) != -1) {
|
||||||
try {
|
bos.write(buffer, 0, readLen);
|
||||||
if (in != null) {
|
|
||||||
in.close();
|
|
||||||
}
|
|
||||||
} catch (IOException var14) {
|
|
||||||
var14.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
bos.close();
|
|
||||||
}
|
}
|
||||||
|
bos.flush();
|
||||||
|
return bos.toByteArray();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
// ====================================== 文件复制相关 ======================================
|
||||||
// 文件复制函数
|
|
||||||
//
|
/**
|
||||||
|
* 基于FileChannel复制文件(高效,适用于大文件复制)
|
||||||
|
* @param source 源文件(非空,必须存在)
|
||||||
|
* @param dest 目标文件(非空,父目录会自动创建)
|
||||||
|
* @throws IOException 异常:源文件不存在、复制失败等
|
||||||
|
*/
|
||||||
public static void copyFileUsingFileChannels(File source, File dest) throws IOException {
|
public static void copyFileUsingFileChannels(File source, File dest) throws IOException {
|
||||||
FileChannel inputChannel = null;
|
// 1. 校验源文件合法性
|
||||||
FileChannel outputChannel = null;
|
if (!source.exists() || !source.isFile()) {
|
||||||
try {
|
throw new FileNotFoundException("源文件不存在或不是文件:" + source.getAbsolutePath());
|
||||||
inputChannel = new FileInputStream(source).getChannel();
|
}
|
||||||
outputChannel = new FileOutputStream(dest).getChannel();
|
|
||||||
|
// 2. 创建目标文件父目录
|
||||||
|
if (!dest.getParentFile().exists()) {
|
||||||
|
dest.getParentFile().mkdirs();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. 通道复制(try-with-resources 自动关闭通道,无需手动关闭)
|
||||||
|
try (FileChannel inputChannel = new FileInputStream(source).getChannel();
|
||||||
|
FileChannel outputChannel = new FileOutputStream(dest).getChannel()) {
|
||||||
|
// 从输入通道复制到输出通道(高效,底层优化)
|
||||||
outputChannel.transferFrom(inputChannel, 0, inputChannel.size());
|
outputChannel.transferFrom(inputChannel, 0, inputChannel.size());
|
||||||
} finally {
|
LogUtils.d(TAG, "文件复制成功(FileChannel):" + source.getAbsolutePath() + " → " + dest.getAbsolutePath());
|
||||||
inputChannel.close();
|
|
||||||
outputChannel.close();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 将文件生成位图
|
* 简化版文件复制(基于NIO Files工具类,代码简洁,适用于中小文件)
|
||||||
* @param path
|
* @param oldFile 源文件(非空,必须存在)
|
||||||
* @return
|
* @param newFile 目标文件(非空,父目录会自动创建)
|
||||||
* @throws IOException
|
* @return 复制结果:true-成功,false-失败
|
||||||
*/
|
*/
|
||||||
public static BitmapDrawable getImageDrawable(String path)
|
|
||||||
throws IOException {
|
|
||||||
//打开文件
|
|
||||||
File file = new File(path);
|
|
||||||
if (!file.exists()) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
|
|
||||||
int BUFFER_SIZE = 1000;
|
|
||||||
byte[] bt = new byte[BUFFER_SIZE];
|
|
||||||
|
|
||||||
//得到文件的输入流
|
|
||||||
InputStream in = new FileInputStream(file);
|
|
||||||
|
|
||||||
//将文件读出到输出流中
|
|
||||||
int readLength = in.read(bt);
|
|
||||||
while (readLength != -1) {
|
|
||||||
outStream.write(bt, 0, readLength);
|
|
||||||
readLength = in.read(bt);
|
|
||||||
}
|
|
||||||
|
|
||||||
//转换成byte 后 再格式化成位图
|
|
||||||
byte[] data = outStream.toByteArray();
|
|
||||||
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);// 生成位图
|
|
||||||
BitmapDrawable bd = new BitmapDrawable(bitmap);
|
|
||||||
|
|
||||||
return bd;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean copyFile(File oldFile, File newFile) {
|
public static boolean copyFile(File oldFile, File newFile) {
|
||||||
//String oldPath = "path/to/original/file.txt";
|
// 1. 校验源文件合法性
|
||||||
//String newPath = "path/to/new-location/for/file.txt";
|
if (oldFile == null || !oldFile.exists() || !oldFile.isFile()) {
|
||||||
|
LogUtils.e(TAG, "源文件无效:" + (oldFile != null ? oldFile.getAbsolutePath() : "null"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
//File oldFile = new java.io.File(oldPath);
|
// 2. 创建目标文件父目录
|
||||||
//File newFile = new java.io.File(newPath);
|
|
||||||
if (!newFile.getParentFile().exists()) {
|
if (!newFile.getParentFile().exists()) {
|
||||||
newFile.getParentFile().mkdirs();
|
newFile.getParentFile().mkdirs();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!oldFile.exists()) {
|
// 3. 复制文件(覆盖已有目标文件)
|
||||||
//System.out.println("The original file does not exist.");
|
try {
|
||||||
LogUtils.d(TAG, "The original file does not exist.");
|
Path sourcePath = Paths.get(oldFile.getPath());
|
||||||
} else {
|
Path destPath = Paths.get(newFile.getPath());
|
||||||
try {
|
// 先删除已有目标文件(避免覆盖失败)
|
||||||
// 源文件路径
|
if (newFile.exists()) {
|
||||||
Path sourcePath = Paths.get(oldFile.getPath());
|
newFile.delete();
|
||||||
// 目标文件路径
|
|
||||||
Path destPath = Paths.get(newFile.getPath());
|
|
||||||
if(newFile.exists()) {
|
|
||||||
newFile.delete();
|
|
||||||
}
|
|
||||||
Files.copy(sourcePath, destPath);
|
|
||||||
LogUtils.d(TAG, "File copy successfully.");
|
|
||||||
//System.out.println("File moved successfully.");
|
|
||||||
return true;
|
|
||||||
} catch (Exception e) {
|
|
||||||
LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
|
|
||||||
//System.err.println("An error occurred while moving the file: " + e.getMessage());
|
|
||||||
}
|
}
|
||||||
|
Files.copy(sourcePath, destPath);
|
||||||
|
LogUtils.d(TAG, "文件复制成功(Files):" + oldFile.getAbsolutePath() + " → " + newFile.getAbsolutePath());
|
||||||
|
return true;
|
||||||
|
} catch (Exception e) {
|
||||||
|
LogUtils.e(TAG, "文件复制失败:" + e.getMessage(), e);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ====================================== 图片文件相关 ======================================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从文件路径获取BitmapDrawable(适用于Android图片显示)
|
||||||
|
* @param path 图片文件绝对路径(非空)
|
||||||
|
* @return BitmapDrawable 图片对象(文件不存在/读取失败返回null)
|
||||||
|
* @throws IOException 异常:文件读取IO错误
|
||||||
|
*/
|
||||||
|
public static BitmapDrawable getImageDrawable(String path) throws IOException {
|
||||||
|
// 1. 校验文件合法性
|
||||||
|
File file = new File(path);
|
||||||
|
if (!file.exists() || !file.isFile()) {
|
||||||
|
LogUtils.e(TAG, "图片文件不存在:" + path);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. 读取文件并转为BitmapDrawable(缓冲流读取,减少内存占用)
|
||||||
|
try (InputStream is = new FileInputStream(file);
|
||||||
|
ByteArrayOutputStream bos = new ByteArrayOutputStream()) {
|
||||||
|
|
||||||
|
byte[] buffer = new byte[BUFFER_SIZE];
|
||||||
|
int readLen;
|
||||||
|
while ((readLen = is.read(buffer)) != -1) {
|
||||||
|
bos.write(buffer, 0, readLen);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. 生成Bitmap并包装为BitmapDrawable
|
||||||
|
byte[] imageBytes = bos.toByteArray();
|
||||||
|
Bitmap bitmap = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length);
|
||||||
|
return new BitmapDrawable(bitmap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ====================================== 文件名处理相关 ======================================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 截取文件后缀名(兼容多 "." 场景,如"image.2025.png" → ".png")
|
||||||
|
* @param file 目标文件(可为null)
|
||||||
|
* @return 文件后缀名:带点(如".jpg"),无后缀/文件无效返回空字符串
|
||||||
|
*/
|
||||||
|
public static String getFileSuffixWithMultiDot(File file) {
|
||||||
|
// 1. 校验文件合法性
|
||||||
|
if (file == null || !file.isFile()) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. 提取文件名并查找最后一个 "."
|
||||||
|
String fileName = file.getName();
|
||||||
|
int lastDotIndex = fileName.lastIndexOf(".");
|
||||||
|
|
||||||
|
// 3. 校验后缀合法性(排除无后缀、以点结尾、后缀过长的异常文件)
|
||||||
|
if (lastDotIndex == -1 // 无 "."
|
||||||
|
|| lastDotIndex == fileName.length() - 1 // 以 "." 结尾(如".gitignore")
|
||||||
|
|| (fileName.length() - lastDotIndex) > 5) { // 后缀长度超过5(异常文件名)
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
// 4. 返回小写后缀(统一格式,避免大小写不一致问题)
|
||||||
|
return fileName.substring(lastDotIndex).toLowerCase();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成唯一文件名(优化版:唯一、合法、简洁)
|
||||||
|
* 生成规则:UUID(去掉"-") + "_" + 时间戳 + 原文件后缀
|
||||||
|
* @param refFile 参考文件(用于提取后缀名,可为null)
|
||||||
|
* @return 唯一文件名(如"a1b2c3d4e5f6_1730000000000.jpg",无后缀则不带点)
|
||||||
|
*/
|
||||||
|
public static String createUniqueFileName(File refFile) {
|
||||||
|
// 1. 获取参考文件的后缀名(自动容错null/无效文件)
|
||||||
|
String suffix = getFileSuffixWithMultiDot(refFile);
|
||||||
|
|
||||||
|
// 2. 生成唯一标识(UUID确保全局唯一,时间戳进一步降低重复概率)
|
||||||
|
String uniqueId = UUID.randomUUID().toString().replace("-", ""); // 去掉"-"简化文件名
|
||||||
|
long timeStamp = System.currentTimeMillis();
|
||||||
|
|
||||||
|
// 3. 拼接文件名(分场景处理,避免多余点)
|
||||||
|
if (suffix.isEmpty()) {
|
||||||
|
// 无后缀:唯一ID + 时间戳
|
||||||
|
return String.format("%s_%d", uniqueId, timeStamp);
|
||||||
|
} else {
|
||||||
|
// 有后缀:唯一ID + 时间戳 + 后缀(无多余点)
|
||||||
|
return String.format("%s_%d%s", uniqueId, timeStamp, suffix);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ import android.widget.RemoteViews;
|
|||||||
import androidx.annotation.RequiresApi;
|
import androidx.annotation.RequiresApi;
|
||||||
import cc.winboll.studio.powerbell.MainActivity;
|
import cc.winboll.studio.powerbell.MainActivity;
|
||||||
import cc.winboll.studio.powerbell.R;
|
import cc.winboll.studio.powerbell.R;
|
||||||
import cc.winboll.studio.powerbell.beans.NotificationMessage;
|
import cc.winboll.studio.powerbell.model.NotificationMessage;
|
||||||
import cc.winboll.studio.powerbell.services.ControlCenterService;
|
import cc.winboll.studio.powerbell.services.ControlCenterService;
|
||||||
|
|
||||||
public class NotificationUtils2 {
|
public class NotificationUtils2 {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package cc.winboll.studio.powerbell.utils;
|
package cc.winboll.studio.powerbell.utils;
|
||||||
|
|
||||||
import cc.winboll.studio.powerbell.beans.BatteryInfoBean;
|
import cc.winboll.studio.powerbell.model.BatteryInfoBean;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public class StringUtils {
|
public class StringUtils {
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import cc.winboll.studio.powerbell.R;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
|
import cc.winboll.studio.powerbell.utils.BackgroundSourceUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author ZhanGSKen&豆包大模型<zhangsken@qq.com>
|
* @Author ZhanGSKen&豆包大模型<zhangsken@qq.com>
|
||||||
@@ -67,7 +68,8 @@ public class BackgroundView extends RelativeLayout {
|
|||||||
setBackground(new ColorDrawable(0x00000000)); // 双重保障:同时设置Background为透明(兼容低版本)
|
setBackground(new ColorDrawable(0x00000000)); // 双重保障:同时设置Background为透明(兼容低版本)
|
||||||
|
|
||||||
initBackgroundImageView(); // 初始化内部ImageView(全透明 + 不拉伸居中平铺)
|
initBackgroundImageView(); // 初始化内部ImageView(全透明 + 不拉伸居中平铺)
|
||||||
initBackgroundImagePath();
|
|
||||||
|
backgroundSourceFilePath = BackgroundSourceUtils.getInstance(this.mContext).getCurrentBackgroundFilePath();
|
||||||
loadAndSetImageViewBackground();
|
loadAndSetImageViewBackground();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -89,160 +91,157 @@ public class BackgroundView extends RelativeLayout {
|
|||||||
this.addView(ivBackground);
|
this.addView(ivBackground);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initBackgroundImagePath() {
|
// private void initBackgroundImagePath() {
|
||||||
File externalFilesDir = mContext.getExternalFilesDir(null);
|
// if (isPreviewMode) {
|
||||||
if (externalFilesDir == null) {
|
// backgroundSourceFilePath = BackgroundSourceUtils.getInstance(this.mContext).getPreviewBackgroundFilePath();
|
||||||
LogUtils.e(TAG, "外置存储不可用,无法初始化背景图片路径");
|
// } else {
|
||||||
return;
|
// backgroundSourceFilePath = BackgroundSourceUtils.getInstance(this.mContext).getCurrentBackgroundFilePath();
|
||||||
}
|
// }
|
||||||
|
// }
|
||||||
File backgroundDir = new File(externalFilesDir, BACKGROUND_IMAGE_FOLDER);
|
|
||||||
if (!backgroundDir.exists()) {
|
|
||||||
backgroundDir.mkdirs();
|
|
||||||
}
|
|
||||||
backgroundSourceFilePath = new File(backgroundDir, BACKGROUND_IMAGE_FILENAME).getAbsolutePath();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 拷贝图片文件到背景资源目录(正式背景)
|
* 拷贝图片文件到背景资源目录(正式背景)
|
||||||
*/
|
*/
|
||||||
public void setImageViewSource(String srcBackgroundPath) {
|
// public void setImageViewSource(String srcBackgroundPath) {
|
||||||
initBackgroundImagePath();
|
// initBackgroundImagePath();
|
||||||
if (backgroundSourceFilePath == null) {
|
// if (backgroundSourceFilePath == null) {
|
||||||
LogUtils.e(TAG, "目标路径初始化失败,无法保存背景图片");
|
// LogUtils.e(TAG, "目标路径初始化失败,无法保存背景图片");
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
File srcFile = new File(srcBackgroundPath);
|
// File srcFile = new File(srcBackgroundPath);
|
||||||
if (!srcFile.exists() || !srcFile.isFile()) {
|
// if (!srcFile.exists() || !srcFile.isFile()) {
|
||||||
LogUtils.e(TAG, String.format("源文件不存在或不是文件:%s", srcBackgroundPath));
|
// LogUtils.e(TAG, String.format("源文件不存在或不是文件:%s", srcBackgroundPath));
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
File destFile = new File(backgroundSourceFilePath);
|
// File destFile = new File(backgroundSourceFilePath);
|
||||||
File destDir = destFile.getParentFile();
|
// File destDir = destFile.getParentFile();
|
||||||
if (destDir != null && !destDir.exists()) {
|
// if (destDir != null && !destDir.exists()) {
|
||||||
boolean isDirCreated = destDir.mkdirs();
|
// boolean isDirCreated = destDir.mkdirs();
|
||||||
if (!isDirCreated) {
|
// if (!isDirCreated) {
|
||||||
LogUtils.e(TAG, "目标目录创建失败:" + destDir.getAbsolutePath());
|
// LogUtils.e(TAG, "目标目录创建失败:" + destDir.getAbsolutePath());
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
FileInputStream fis = null;
|
// FileInputStream fis = null;
|
||||||
FileOutputStream fos = null;
|
// FileOutputStream fos = null;
|
||||||
try {
|
// try {
|
||||||
fis = new FileInputStream(srcFile);
|
// fis = new FileInputStream(srcFile);
|
||||||
fos = new FileOutputStream(destFile);
|
// fos = new FileOutputStream(destFile);
|
||||||
|
//
|
||||||
byte[] buffer = new byte[4096];
|
// byte[] buffer = new byte[4096];
|
||||||
int len;
|
// int len;
|
||||||
while ((len = fis.read(buffer)) != -1) {
|
// while ((len = fis.read(buffer)) != -1) {
|
||||||
fos.write(buffer, 0, len);
|
// fos.write(buffer, 0, len);
|
||||||
}
|
// }
|
||||||
fos.flush();
|
// fos.flush();
|
||||||
|
//
|
||||||
LogUtils.d(TAG, String.format("文件拷贝成功:%s -> %s", srcBackgroundPath, backgroundSourceFilePath));
|
// LogUtils.d(TAG, String.format("文件拷贝成功:%s -> %s", srcBackgroundPath, backgroundSourceFilePath));
|
||||||
// 拷贝成功后,若处于预览模式则退出预览,加载正式背景
|
// // 拷贝成功后,若处于预览模式则退出预览,加载正式背景
|
||||||
if (isPreviewMode) {
|
// if (isPreviewMode) {
|
||||||
exitPreviewMode();
|
// exitPreviewMode();
|
||||||
} else {
|
// } else {
|
||||||
loadAndSetImageViewBackground();
|
// loadAndSetImageViewBackground();
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
} catch (Exception e) {
|
// } catch (Exception e) {
|
||||||
LogUtils.e(TAG, String.format("文件拷贝失败:%s", e.getMessage()), e);
|
// LogUtils.e(TAG, String.format("文件拷贝失败:%s", e.getMessage()), e);
|
||||||
if (destFile.exists()) {
|
// if (destFile.exists()) {
|
||||||
destFile.delete();
|
// destFile.delete();
|
||||||
LogUtils.d(TAG, "已删除损坏的目标文件");
|
// LogUtils.d(TAG, "已删除损坏的目标文件");
|
||||||
}
|
// }
|
||||||
} finally {
|
// } finally {
|
||||||
if (fis != null) {
|
// if (fis != null) {
|
||||||
try {
|
// try {
|
||||||
fis.close();
|
// fis.close();
|
||||||
} catch (Exception e) {
|
// } catch (Exception e) {
|
||||||
LogUtils.e(TAG, "输入流关闭失败:" + e.getMessage());
|
// LogUtils.e(TAG, "输入流关闭失败:" + e.getMessage());
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
if (fos != null) {
|
// if (fos != null) {
|
||||||
try {
|
// try {
|
||||||
fos.close();
|
// fos.close();
|
||||||
} catch (Exception e) {
|
// } catch (Exception e) {
|
||||||
LogUtils.e(TAG, "输出流关闭失败:" + e.getMessage());
|
// LogUtils.e(TAG, "输出流关闭失败:" + e.getMessage());
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 预览临时图片(全透明背景 + 不拉伸居中平铺)
|
* 预览临时图片(全透明背景 + 不拉伸居中平铺)
|
||||||
* @param previewImagePath 临时预览图片的路径
|
* @param previewImagePath 临时预览图片的路径
|
||||||
*/
|
*/
|
||||||
public void previewBackgroundImage(String previewImagePath) {
|
/*public void previewBackgroundImage(String previewImagePath) {
|
||||||
if (previewImagePath == null || previewImagePath.isEmpty()) {
|
if (previewImagePath == null || previewImagePath.isEmpty()) {
|
||||||
LogUtils.e(TAG, "预览图片路径为空");
|
LogUtils.e(TAG, "预览图片路径为空");
|
||||||
setDefaultImageViewBackground();
|
setDefaultImageViewBackground();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
File previewFile = new File(previewImagePath);
|
File previewFile = new File(previewImagePath);
|
||||||
if (!previewFile.exists() || !previewFile.isFile()) {
|
if (!previewFile.exists() || !previewFile.isFile()) {
|
||||||
LogUtils.e(TAG, "预览图片不存在或不是文件:" + previewImagePath);
|
LogUtils.e(TAG, "预览图片不存在或不是文件:" + previewImagePath);
|
||||||
setDefaultImageViewBackground();
|
setDefaultImageViewBackground();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 计算图片原始宽高比
|
// 计算图片原始宽高比
|
||||||
if (!calculateImageAspectRatio(previewFile)) {
|
if (!calculateImageAspectRatio(previewFile)) {
|
||||||
LogUtils.e(TAG, "预览图片尺寸无效,无法预览");
|
LogUtils.e(TAG, "预览图片尺寸无效,无法预览");
|
||||||
setDefaultImageViewBackground();
|
setDefaultImageViewBackground();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 压缩加载预览图片(保持比例)
|
// 压缩加载预览图片(保持比例)
|
||||||
Bitmap previewBitmap = decodeBitmapWithCompress(previewFile, 1080, 1920);
|
Bitmap previewBitmap = decodeBitmapWithCompress(previewFile, 1080, 1920);
|
||||||
if (previewBitmap == null) {
|
if (previewBitmap == null) {
|
||||||
LogUtils.e(TAG, "预览图片加载失败");
|
LogUtils.e(TAG, "预览图片加载失败");
|
||||||
setDefaultImageViewBackground();
|
setDefaultImageViewBackground();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 设置预览图片(保持ImageView透明背景)
|
// 设置预览图片(保持ImageView透明背景)
|
||||||
Drawable previewDrawable = new BitmapDrawable(mContext.getResources(), previewBitmap);
|
Drawable previewDrawable = new BitmapDrawable(mContext.getResources(), previewBitmap);
|
||||||
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
|
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
|
||||||
ivBackground.setBackground(previewDrawable);
|
ivBackground.setBackground(previewDrawable);
|
||||||
} else {
|
} else {
|
||||||
ivBackground.setBackgroundDrawable(previewDrawable);
|
ivBackground.setBackgroundDrawable(previewDrawable);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 调整ImageView尺寸(居中平铺,不拉伸)
|
// 调整ImageView尺寸(居中平铺,不拉伸)
|
||||||
adjustImageViewSize();
|
adjustImageViewSize();
|
||||||
isPreviewMode = true;
|
isPreviewMode = true;
|
||||||
LogUtils.d(TAG, "进入预览模式,预览图片路径:" + previewImagePath + ",宽高比:" + imageAspectRatio);
|
LogUtils.d(TAG, "进入预览模式,预览图片路径:" + previewImagePath + ",宽高比:" + imageAspectRatio);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 退出预览模式,恢复显示正式背景图片
|
* 退出预览模式,恢复显示正式背景图片
|
||||||
*/
|
*/
|
||||||
public void exitPreviewMode() {
|
/*public void exitPreviewMode() {
|
||||||
if (isPreviewMode) {
|
if (isPreviewMode) {
|
||||||
loadAndSetImageViewBackground();
|
loadAndSetImageViewBackground();
|
||||||
isPreviewMode = false;
|
isPreviewMode = false;
|
||||||
LogUtils.d(TAG, "退出预览模式,恢复正式背景");
|
LogUtils.d(TAG, "退出预览模式,恢复正式背景");
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 公共函数:供外部类调用,重新加载正式背景图片(刷新显示)
|
* 公共函数:供外部类调用,重新加载正式背景图片(刷新显示)
|
||||||
*/
|
*/
|
||||||
public void reloadBackgroundImage() {
|
public void reloadCurrentBackground() {
|
||||||
LogUtils.d(TAG, "外部调用重新加载背景图片");
|
LogUtils.d(TAG, "外部调用重新加载背景图片");
|
||||||
initBackgroundImagePath();
|
backgroundSourceFilePath = BackgroundSourceUtils.getInstance(this.mContext).getCurrentBackgroundFilePath();
|
||||||
|
loadAndSetImageViewBackground();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void reloadPreviewBackground() {
|
||||||
|
LogUtils.d(TAG, "外部调用重新加载背景图片");
|
||||||
|
backgroundSourceFilePath = BackgroundSourceUtils.getInstance(this.mContext).getPreviewBackgroundFilePath();
|
||||||
loadAndSetImageViewBackground();
|
loadAndSetImageViewBackground();
|
||||||
// 若处于预览模式,退出预览
|
|
||||||
if (isPreviewMode) {
|
|
||||||
isPreviewMode = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user