处理视频拉伸问题和 黑屏
This commit is contained in:
parent
3dab1d77c9
commit
d47bed73a5
@ -4,6 +4,8 @@
|
|||||||
|
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
<uses-permission android:name="android.permission.SET_WALLPAPER" />
|
<uses-permission android:name="android.permission.SET_WALLPAPER" />
|
||||||
|
<uses-permission android:name="android.permission.BIND_WALLPAPER"
|
||||||
|
tools:ignore="ProtectedPermissions" />
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:name=".App"
|
android:name=".App"
|
||||||
|
|||||||
@ -1,28 +1,23 @@
|
|||||||
package com.live.mylivewallpaper.activity;
|
package com.live.mylivewallpaper.activity;
|
||||||
|
|
||||||
import static android.provider.Contacts.SettingsColumns.KEY;
|
|
||||||
|
|
||||||
import android.app.WallpaperInfo;
|
|
||||||
import android.app.WallpaperManager;
|
import android.app.WallpaperManager;
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.media.MediaPlayer;
|
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.CountDownTimer;
|
import android.os.CountDownTimer;
|
||||||
import android.view.SurfaceHolder;
|
import android.view.SurfaceHolder;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.annotation.OptIn;
|
import androidx.annotation.OptIn;
|
||||||
import androidx.media3.common.MediaItem;
|
import androidx.media3.common.MediaItem;
|
||||||
import androidx.media3.common.util.UnstableApi;
|
import androidx.media3.common.util.UnstableApi;
|
||||||
import androidx.media3.datasource.DefaultDataSourceFactory;
|
import androidx.media3.datasource.DefaultDataSourceFactory;
|
||||||
import androidx.media3.datasource.DefaultHttpDataSource;
|
|
||||||
import androidx.media3.exoplayer.ExoPlayer;
|
import androidx.media3.exoplayer.ExoPlayer;
|
||||||
|
import androidx.media3.exoplayer.SimpleExoPlayer;
|
||||||
|
import androidx.media3.exoplayer.source.ProgressiveMediaSource;
|
||||||
|
|
||||||
import com.live.mylivewallpaper.base.BaseActivity;
|
import com.live.mylivewallpaper.base.BaseActivity;
|
||||||
import com.live.mylivewallpaper.data.LikeData;
|
import com.live.mylivewallpaper.data.LikeData;
|
||||||
import com.live.mylivewallpaper.data.ResultData;
|
|
||||||
import com.live.mylivewallpaper.databinding.ActivityVideoBinding;
|
import com.live.mylivewallpaper.databinding.ActivityVideoBinding;
|
||||||
import com.live.mylivewallpaper.help.Common;
|
import com.live.mylivewallpaper.help.Common;
|
||||||
import com.live.mylivewallpaper.help.Db;
|
import com.live.mylivewallpaper.help.Db;
|
||||||
@ -32,11 +27,8 @@ import com.live.mylivewallpaper.listener.OnVideoResultListener;
|
|||||||
import com.live.mylivewallpaper.request.RetrofitManager;
|
import com.live.mylivewallpaper.request.RetrofitManager;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import androidx.media3.exoplayer.SimpleExoPlayer;
|
|
||||||
import androidx.media3.exoplayer.source.MediaSource;
|
|
||||||
import androidx.media3.exoplayer.source.ProgressiveMediaSource;
|
|
||||||
|
|
||||||
public class VideoActivity extends BaseActivity<ActivityVideoBinding> implements SurfaceHolder.Callback {
|
public class VideoActivity extends BaseActivity<ActivityVideoBinding> {
|
||||||
|
|
||||||
|
|
||||||
private CountDownTimer countDownTimer;
|
private CountDownTimer countDownTimer;
|
||||||
@ -77,6 +69,7 @@ public class VideoActivity extends BaseActivity<ActivityVideoBinding> implements
|
|||||||
image = intent.getStringExtra(KEY_image);
|
image = intent.getStringExtra(KEY_image);
|
||||||
describe = intent.getStringExtra(KEY_image);
|
describe = intent.getStringExtra(KEY_image);
|
||||||
thumb = intent.getStringExtra(KEY_thumb);
|
thumb = intent.getStringExtra(KEY_thumb);
|
||||||
|
vb.tvDescribe.setText(describe);
|
||||||
|
|
||||||
showLoading(true);
|
showLoading(true);
|
||||||
initFavorite();
|
initFavorite();
|
||||||
@ -94,7 +87,7 @@ public class VideoActivity extends BaseActivity<ActivityVideoBinding> implements
|
|||||||
@Override
|
@Override
|
||||||
public void onVideoResult(boolean success, String path) {
|
public void onVideoResult(boolean success, String path) {
|
||||||
|
|
||||||
Common.logMsg("-------------success ="+success+"--path="+path);
|
Common.logMsg("-------------success =" + success + "--path=" + path);
|
||||||
runOnUiThread(new Runnable() {
|
runOnUiThread(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
@ -113,7 +106,7 @@ public class VideoActivity extends BaseActivity<ActivityVideoBinding> implements
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initFavorite(){
|
private void initFavorite() {
|
||||||
boolean b = Db.queryIsLike(id);
|
boolean b = Db.queryIsLike(id);
|
||||||
vb.imFavorite.setSelected(b);
|
vb.imFavorite.setSelected(b);
|
||||||
}
|
}
|
||||||
@ -137,19 +130,6 @@ public class VideoActivity extends BaseActivity<ActivityVideoBinding> implements
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onResume() {
|
|
||||||
super.onResume();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onPause() {
|
|
||||||
super.onPause();
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void showLoading(boolean loading) {
|
private void showLoading(boolean loading) {
|
||||||
if (loading) {
|
if (loading) {
|
||||||
// vb.topLayout.setBackgroundColor(getColor(R.color.color_white_80));
|
// vb.topLayout.setBackgroundColor(getColor(R.color.color_white_80));
|
||||||
@ -199,7 +179,7 @@ public class VideoActivity extends BaseActivity<ActivityVideoBinding> implements
|
|||||||
vb.imFavorite.setSelected(!vb.imFavorite.isSelected());
|
vb.imFavorite.setSelected(!vb.imFavorite.isSelected());
|
||||||
boolean selected = vb.imFavorite.isSelected();
|
boolean selected = vb.imFavorite.isSelected();
|
||||||
if (selected) {
|
if (selected) {
|
||||||
LikeData likeData = new LikeData(describe, id, image, wallpaperType,thumb);
|
LikeData likeData = new LikeData(describe, id, image, wallpaperType, thumb);
|
||||||
Db.insertLike(likeData);
|
Db.insertLike(likeData);
|
||||||
} else {
|
} else {
|
||||||
Db.deleteLike(id);
|
Db.deleteLike(id);
|
||||||
@ -229,24 +209,6 @@ public class VideoActivity extends BaseActivity<ActivityVideoBinding> implements
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void surfaceCreated(@NonNull SurfaceHolder holder) {
|
|
||||||
Common.logMsg("------------surfaceCreated");
|
|
||||||
mySurfaceHolder = holder;
|
|
||||||
checkPlay();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void surfaceChanged(@NonNull SurfaceHolder holder, int format, int width, int height) {
|
|
||||||
Common.logMsg("------------surfaceChanged");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void surfaceDestroyed(@NonNull SurfaceHolder holder) {
|
|
||||||
Common.logMsg("------------surfaceDestroyed");
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@OptIn(markerClass = UnstableApi.class)
|
@OptIn(markerClass = UnstableApi.class)
|
||||||
private void playMedia3() {
|
private void playMedia3() {
|
||||||
try {
|
try {
|
||||||
@ -256,8 +218,8 @@ public class VideoActivity extends BaseActivity<ActivityVideoBinding> implements
|
|||||||
exoPlayer.setMediaSource(mediaSource);
|
exoPlayer.setMediaSource(mediaSource);
|
||||||
exoPlayer.prepare();
|
exoPlayer.prepare();
|
||||||
exoPlayer.play();
|
exoPlayer.play();
|
||||||
}catch (Exception e){
|
} catch (Exception e) {
|
||||||
Common.logMsg("-------"+e.getMessage());
|
Common.logMsg("-------" + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -271,33 +233,25 @@ public class VideoActivity extends BaseActivity<ActivityVideoBinding> implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private void setLiveWallpaper() {
|
private void setLiveWallpaper() {
|
||||||
if (mFile.exists()) {
|
if (mFile.exists()) {
|
||||||
Shared.INSTANCE.setVideo_path(filePath);
|
Shared.INSTANCE.setVideo_path(filePath);
|
||||||
Common.logMsg("----------setVideo_path---filePath=" + filePath);
|
Common.logMsg("----------setVideo_path---filePath=" + filePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
WallpaperManager instance = WallpaperManager.getInstance(VideoActivity.this);
|
WallpaperManager wallpaperManager = WallpaperManager.getInstance(this);
|
||||||
|
try {
|
||||||
|
wallpaperManager.clear();
|
||||||
|
Common.logMsg("----------clear=");
|
||||||
|
} catch (Exception e) {
|
||||||
|
Common.logMsg("---------e=" + e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
ComponentName componentName = new ComponentName(VideoActivity.this, LiveWallpaperService.class);
|
ComponentName componentName = new ComponentName(VideoActivity.this, LiveWallpaperService.class);
|
||||||
WallpaperInfo wallpaperInfo = instance.getWallpaperInfo();
|
|
||||||
|
|
||||||
Intent intent = new Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER);
|
Intent intent = new Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER);
|
||||||
intent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT, componentName);
|
intent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT, componentName);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
finish();
|
finish();
|
||||||
// if((wallpaperInfo!= null)&&wallpaperInfo.getComponent()!= componentName){
|
|
||||||
// Intent intent = new Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER);
|
|
||||||
// intent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT, componentName);
|
|
||||||
// startActivity(intent);
|
|
||||||
// }else {
|
|
||||||
// Intent intent = new Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER);
|
|
||||||
// intent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT, componentName);
|
|
||||||
// startActivity(intent);
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -3,15 +3,14 @@ package com.live.mylivewallpaper.help
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.service.wallpaper.WallpaperService
|
import android.service.wallpaper.WallpaperService
|
||||||
import android.view.Surface
|
|
||||||
import android.view.SurfaceHolder
|
import android.view.SurfaceHolder
|
||||||
import androidx.annotation.OptIn
|
import androidx.annotation.OptIn
|
||||||
|
import androidx.media3.common.C
|
||||||
import androidx.media3.common.MediaItem
|
import androidx.media3.common.MediaItem
|
||||||
import androidx.media3.common.util.UnstableApi
|
import androidx.media3.common.util.UnstableApi
|
||||||
import androidx.media3.datasource.DefaultDataSourceFactory
|
import androidx.media3.datasource.DefaultDataSourceFactory
|
||||||
import androidx.media3.exoplayer.ExoPlayer
|
import androidx.media3.exoplayer.ExoPlayer
|
||||||
import androidx.media3.exoplayer.source.ProgressiveMediaSource
|
import androidx.media3.exoplayer.source.ProgressiveMediaSource
|
||||||
import com.live.mylivewallpaper.R
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
|
|
||||||
@ -25,10 +24,71 @@ class LiveWallpaperService : WallpaperService() {
|
|||||||
inner class VideoWallpaperEngine : Engine() {
|
inner class VideoWallpaperEngine : Engine() {
|
||||||
private var exoPlayer: ExoPlayer? = null
|
private var exoPlayer: ExoPlayer? = null
|
||||||
|
|
||||||
|
|
||||||
@OptIn(UnstableApi::class)
|
@OptIn(UnstableApi::class)
|
||||||
private fun initExoPlay() {
|
private fun initExoPlay() {
|
||||||
exoPlayer = ExoPlayer.Builder(this@LiveWallpaperService).build()
|
exoPlayer = ExoPlayer.Builder(this@LiveWallpaperService).build()
|
||||||
exoPlayer?.repeatMode = ExoPlayer.REPEAT_MODE_ONE
|
exoPlayer?.repeatMode = ExoPlayer.REPEAT_MODE_ONE
|
||||||
|
update()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onCreate(surfaceHolder: SurfaceHolder?) {
|
||||||
|
super.onCreate(surfaceHolder)
|
||||||
|
Common.logMsg("-----Engine-----onCreate")
|
||||||
|
initExoPlay()
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@OptIn(UnstableApi::class)
|
||||||
|
override fun onSurfaceCreated(holder: SurfaceHolder?) {
|
||||||
|
super.onSurfaceCreated(holder)
|
||||||
|
val surface = holder?.surface
|
||||||
|
if (surface != null) {
|
||||||
|
exoPlayer?.setVideoSurface(surface)
|
||||||
|
exoPlayer?.videoScalingMode = C.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onVisibilityChanged(visible: Boolean) {
|
||||||
|
super.onVisibilityChanged(visible)
|
||||||
|
Common.logMsg("-------Engine---onVisibilityChanged visible=$visible")
|
||||||
|
if (visible) {
|
||||||
|
update()
|
||||||
|
exoPlayer?.play()
|
||||||
|
} else {
|
||||||
|
exoPlayer?.pause()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
override fun onSurfaceDestroyed(holder: SurfaceHolder?) {
|
||||||
|
super.onSurfaceDestroyed(holder)
|
||||||
|
Common.logMsg("------Engine----onSurfaceDestroyed---")
|
||||||
|
exoPlayer?.release()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onDestroy() {
|
||||||
|
super.onDestroy()
|
||||||
|
Common.logMsg("-------Engine---onDestroy---")
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@OptIn(UnstableApi::class)
|
||||||
|
override fun onSurfaceChanged(
|
||||||
|
holder: SurfaceHolder?,
|
||||||
|
format: Int,
|
||||||
|
width: Int,
|
||||||
|
height: Int
|
||||||
|
) {
|
||||||
|
super.onSurfaceChanged(holder, format, width, height)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@OptIn(UnstableApi::class)
|
||||||
|
private fun update() {
|
||||||
val uri = getVideoUrl(this@LiveWallpaperService)
|
val uri = getVideoUrl(this@LiveWallpaperService)
|
||||||
// val test = "android.resource://" + packageName + "/" + R.raw.test1
|
// val test = "android.resource://" + packageName + "/" + R.raw.test1
|
||||||
if (uri != null) {
|
if (uri != null) {
|
||||||
@ -40,81 +100,11 @@ class LiveWallpaperService : WallpaperService() {
|
|||||||
exoPlayer?.prepare()
|
exoPlayer?.prepare()
|
||||||
exoPlayer?.playWhenReady = true
|
exoPlayer?.playWhenReady = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreate(surfaceHolder: SurfaceHolder?) {
|
|
||||||
super.onCreate(surfaceHolder)
|
|
||||||
Common.logMsg("-----Engine-----onCreate")
|
|
||||||
initExoPlay()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onSurfaceCreated(holder: SurfaceHolder?) {
|
|
||||||
super.onSurfaceCreated(holder)
|
|
||||||
val surface = holder?.surface
|
|
||||||
if (surface != null) {
|
|
||||||
exoPlayer?.setVideoSurface(surface)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onVisibilityChanged(visible: Boolean) {
|
|
||||||
super.onVisibilityChanged(visible)
|
|
||||||
Common.logMsg("-------Engine---onVisibilityChanged visible=$visible")
|
|
||||||
if (visible) {
|
|
||||||
exoPlayer?.play()
|
|
||||||
} else {
|
|
||||||
exoPlayer?.pause()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
override fun onSurfaceDestroyed(holder: SurfaceHolder?) {
|
|
||||||
super.onSurfaceDestroyed(holder)
|
|
||||||
Common.logMsg("------Engine----onSurfaceDestroyed---")
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onDestroy() {
|
|
||||||
super.onDestroy()
|
|
||||||
Common.logMsg("-------Engine---onDestroy---")
|
|
||||||
exoPlayer?.release()
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onSurfaceChanged(
|
|
||||||
holder: SurfaceHolder?,
|
|
||||||
format: Int,
|
|
||||||
width: Int,
|
|
||||||
height: Int
|
|
||||||
) {
|
|
||||||
super.onSurfaceChanged(holder, format, width, height)
|
|
||||||
Common.logMsg("----------Engine---onSurfaceChanged")
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun adjustSurfaceViewSize(surface: Surface, containerWidth: Int, containerHeight: Int) {
|
|
||||||
val videoWidth = 1920 // 假设视频宽度为 1920
|
|
||||||
val videoHeight = 1080 // 假设视频高度为 1080
|
|
||||||
|
|
||||||
// 计算视频的宽高比
|
|
||||||
val videoAspectRatio = videoWidth.toFloat() / videoHeight
|
|
||||||
var newWidth = containerWidth
|
|
||||||
var newHeight = (containerWidth / videoAspectRatio).toInt()
|
|
||||||
|
|
||||||
// 如果计算的高度大于容器高度,则调整为容器高度
|
|
||||||
if (newHeight > containerHeight) {
|
|
||||||
newHeight = containerHeight
|
|
||||||
newWidth = (containerHeight * videoAspectRatio).toInt()
|
|
||||||
}
|
|
||||||
|
|
||||||
// 更新 SurfaceView 的布局参数
|
|
||||||
// this.setLayoutParams(FrameLayout.LayoutParams(newWidth, newHeight))
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun getVideoUrl(con: Context): Uri? {
|
private fun getVideoUrl(con: Context): Uri? {
|
||||||
|
|
||||||
|
|||||||
@ -36,7 +36,7 @@ public class MyPagingSource extends PagingSource<Integer, ResultData> {
|
|||||||
int page = loadParams.getKey() != null ? loadParams.getKey() : 1;
|
int page = loadParams.getKey() != null ? loadParams.getKey() : 1;
|
||||||
|
|
||||||
List<ResultData> data = Db.queryData(wallpaperType,page);
|
List<ResultData> data = Db.queryData(wallpaperType,page);
|
||||||
Common.logMsg("-----load---------"+wallpaperType+"----page="+page+"'--data="+data.size());
|
// Common.logMsg("-----load---------"+wallpaperType+"----page="+page+"'--data="+data.size());
|
||||||
return new LoadResult.Page<>(
|
return new LoadResult.Page<>(
|
||||||
data,
|
data,
|
||||||
page > 1 ? page - 1 : null,
|
page > 1 ? page - 1 : null,
|
||||||
|
|||||||
@ -8,18 +8,6 @@
|
|||||||
android:background="@color/white"
|
android:background="@color/white"
|
||||||
tools:context=".activity.VideoActivity">
|
tools:context=".activity.VideoActivity">
|
||||||
|
|
||||||
|
|
||||||
<FrameLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:visibility="gone">
|
|
||||||
|
|
||||||
<SurfaceView
|
|
||||||
android:id="@+id/surfaceVideo"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent" />
|
|
||||||
</FrameLayout>
|
|
||||||
|
|
||||||
<androidx.media3.ui.PlayerView
|
<androidx.media3.ui.PlayerView
|
||||||
android:id="@+id/player_view"
|
android:id="@+id/player_view"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@ -37,7 +25,7 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="12dp"
|
android:layout_marginStart="12dp"
|
||||||
android:layout_marginTop="34dp"
|
android:layout_marginTop="37dp"
|
||||||
android:background="@drawable/bg_shape_favorite"
|
android:background="@drawable/bg_shape_favorite"
|
||||||
android:padding="11dp">
|
android:padding="11dp">
|
||||||
|
|
||||||
|
|||||||
@ -2,5 +2,4 @@
|
|||||||
<wallpaper xmlns:android="http://schemas.android.com/apk/res/android"
|
<wallpaper xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:description="@string/app_name"
|
android:description="@string/app_name"
|
||||||
android:thumbnail="@mipmap/ic_launcher">
|
android:thumbnail="@mipmap/ic_launcher">
|
||||||
|
|
||||||
</wallpaper>
|
</wallpaper>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user