init
15
.gitignore
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
*.iml
|
||||
.gradle
|
||||
/local.properties
|
||||
/.idea/caches
|
||||
/.idea/libraries
|
||||
/.idea/modules.xml
|
||||
/.idea/workspace.xml
|
||||
/.idea/navEditor.xml
|
||||
/.idea/assetWizardSettings.xml
|
||||
.DS_Store
|
||||
/build
|
||||
/captures
|
||||
.externalNativeBuild
|
||||
.cxx
|
||||
local.properties
|
||||
1
app/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
/build
|
||||
BIN
app/VariousWallpapers.jks
Normal file
54
app/build.gradle.kts
Normal file
@ -0,0 +1,54 @@
|
||||
import java.util.Date
|
||||
import java.text.SimpleDateFormat
|
||||
plugins {
|
||||
id("com.android.application")
|
||||
id("org.jetbrains.kotlin.android")
|
||||
id("io.objectbox")
|
||||
}
|
||||
val timestamp = SimpleDateFormat("MM_dd_HH_mm").format(Date())
|
||||
android {
|
||||
namespace = "com.nature.free.test"
|
||||
compileSdk = 34
|
||||
|
||||
defaultConfig {
|
||||
//com.nature.free.variouswallpaper
|
||||
applicationId = "com.nature.free.variouswallpaper.test"
|
||||
minSdk = 23
|
||||
targetSdk = 34
|
||||
versionCode = 2
|
||||
versionName = "1.0.1"
|
||||
setProperty("archivesBaseName", "Various Wallpapers_V" + versionName + "(${versionCode})_$timestamp")
|
||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
isMinifyEnabled = true
|
||||
proguardFiles(
|
||||
getDefaultProguardFile("proguard-android-optimize.txt"),
|
||||
"proguard-rules.pro"
|
||||
)
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
}
|
||||
|
||||
buildFeatures{
|
||||
viewBinding = true
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
||||
implementation("androidx.appcompat:appcompat:1.7.0")
|
||||
implementation("com.google.android.material:material:1.12.0")
|
||||
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
|
||||
testImplementation("junit:junit:4.13.2")
|
||||
androidTestImplementation("androidx.test.ext:junit:1.1.5")
|
||||
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
|
||||
implementation ("com.github.bumptech.glide:glide:4.16.0")
|
||||
annotationProcessor ("com.github.bumptech.glide:compiler:4.16.0")
|
||||
|
||||
}
|
||||
3
app/keyinfo
Normal file
@ -0,0 +1,3 @@
|
||||
签名文件:VariousWallpapers.jks
|
||||
pwd:VariousWallpapers
|
||||
alias:VariousWallpaperskey0
|
||||
114
app/objectbox-models/default.json
Normal file
@ -0,0 +1,114 @@
|
||||
{
|
||||
"_note1": "KEEP THIS FILE! Check it into a version control system (VCS) like git.",
|
||||
"_note2": "ObjectBox manages crucial IDs for your object model. See docs for details.",
|
||||
"_note3": "If you have VCS merge conflicts, you must resolve them according to ObjectBox docs.",
|
||||
"entities": [
|
||||
{
|
||||
"id": "1:1627422590734095773",
|
||||
"lastPropertyId": "12:3070704555035974675",
|
||||
"name": "Wallpaper",
|
||||
"properties": [
|
||||
{
|
||||
"id": "1:7511145228095496614",
|
||||
"name": "id",
|
||||
"type": 6,
|
||||
"flags": 1
|
||||
},
|
||||
{
|
||||
"id": "2:3667761380977347882",
|
||||
"name": "width",
|
||||
"type": 5
|
||||
},
|
||||
{
|
||||
"id": "3:869121167522503573",
|
||||
"name": "height",
|
||||
"type": 5
|
||||
},
|
||||
{
|
||||
"id": "4:36521837047111499",
|
||||
"name": "sourceWidth",
|
||||
"type": 5
|
||||
},
|
||||
{
|
||||
"id": "5:2901498186104857190",
|
||||
"name": "sourceHeight",
|
||||
"type": 5
|
||||
},
|
||||
{
|
||||
"id": "6:8934645237219230772",
|
||||
"name": "preview",
|
||||
"type": 9
|
||||
},
|
||||
{
|
||||
"id": "7:1332387602715302426",
|
||||
"name": "banner",
|
||||
"type": 9
|
||||
},
|
||||
{
|
||||
"id": "8:2474967957307949151",
|
||||
"name": "source",
|
||||
"type": 9
|
||||
},
|
||||
{
|
||||
"id": "9:8665536133221564863",
|
||||
"name": "portrait",
|
||||
"type": 9
|
||||
},
|
||||
{
|
||||
"id": "10:407342973478518292",
|
||||
"name": "love",
|
||||
"type": 1
|
||||
},
|
||||
{
|
||||
"id": "11:2047626252877853785",
|
||||
"name": "categoryId",
|
||||
"indexId": "1:1121852081873219770",
|
||||
"type": 11,
|
||||
"flags": 520,
|
||||
"relationTarget": "ClassData"
|
||||
},
|
||||
{
|
||||
"id": "12:3070704555035974675",
|
||||
"name": "porWidthHeight",
|
||||
"type": 9
|
||||
}
|
||||
],
|
||||
"relations": []
|
||||
},
|
||||
{
|
||||
"id": "2:7218981079515217927",
|
||||
"lastPropertyId": "3:4807624650221376978",
|
||||
"name": "ClassData",
|
||||
"properties": [
|
||||
{
|
||||
"id": "1:4411928252157168289",
|
||||
"name": "id",
|
||||
"type": 6,
|
||||
"flags": 1
|
||||
},
|
||||
{
|
||||
"id": "2:4064785904158849196",
|
||||
"name": "covert",
|
||||
"type": 9
|
||||
},
|
||||
{
|
||||
"id": "3:4807624650221376978",
|
||||
"name": "title",
|
||||
"type": 9
|
||||
}
|
||||
],
|
||||
"relations": []
|
||||
}
|
||||
],
|
||||
"lastEntityId": "2:7218981079515217927",
|
||||
"lastIndexId": "1:1121852081873219770",
|
||||
"lastRelationId": "0:0",
|
||||
"lastSequenceId": "0:0",
|
||||
"modelVersion": 5,
|
||||
"modelVersionParserMinimum": 5,
|
||||
"retiredEntityUids": [],
|
||||
"retiredIndexUids": [],
|
||||
"retiredPropertyUids": [],
|
||||
"retiredRelationUids": [],
|
||||
"version": 1
|
||||
}
|
||||
47
app/proguard-rules.pro
vendored
Normal file
@ -0,0 +1,47 @@
|
||||
# Add project specific ProGuard rules here.
|
||||
# You can control the set of applied configuration files using the
|
||||
# proguardFiles setting in build.gradle.
|
||||
#
|
||||
# For more details, see
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
|
||||
# If your project uses WebView with JS, uncomment the following
|
||||
# and specify the fully qualified class name to the JavaScript interface
|
||||
# class:
|
||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||
# public *;
|
||||
#}
|
||||
|
||||
# Uncomment this to preserve the line number information for
|
||||
# debugging stack traces.
|
||||
#-keepattributes SourceFile,LineNumberTable
|
||||
|
||||
# If you keep the line number information, uncomment this to
|
||||
# hide the original source file name.
|
||||
#-renamesourcefileattribute SourceFile
|
||||
# 保留Processor类,这些类用于在编译时生成ObjectBox需要的代码
|
||||
-keep @io.objectbox.annotation.processor.Processor class * {
|
||||
*;
|
||||
}
|
||||
|
||||
# 保留ObjectBox的关键方法和构造函数
|
||||
-keepclassmembers class * extends io.objectbox.Box {
|
||||
<init>(...);
|
||||
<methods>;
|
||||
}
|
||||
|
||||
-keepclassmembers class * implements java.io.Serializable {
|
||||
|
||||
static final long serialVersionUID;
|
||||
|
||||
private static final java.io.ObjectStreamField[] serialPersistentFields;
|
||||
|
||||
private void writeObject(java.io.ObjectOutputStream);
|
||||
|
||||
private void readObject(java.io.ObjectInputStream);
|
||||
|
||||
java.lang.Object writeReplace();
|
||||
|
||||
java.lang.Object readResolve();
|
||||
|
||||
}
|
||||
@ -0,0 +1,26 @@
|
||||
package com.nature.free.test;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.test.platform.app.InstrumentationRegistry;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/**
|
||||
* Instrumented test, which will execute on an Android device.
|
||||
*
|
||||
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public class ExampleInstrumentedTest {
|
||||
@Test
|
||||
public void useAppContext() {
|
||||
// Context of the app under test.
|
||||
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
|
||||
assertEquals("com.nature.free.test", appContext.getPackageName());
|
||||
}
|
||||
}
|
||||
45
app/src/main/AndroidManifest.xml
Normal file
@ -0,0 +1,45 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.SET_WALLPAPER" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
|
||||
<application
|
||||
android:name=".MyWallpaper"
|
||||
android:allowBackup="true"
|
||||
android:dataExtractionRules="@xml/data_extraction_rules"
|
||||
android:fullBackupContent="@xml/backup_rules"
|
||||
android:icon="@mipmap/icon"
|
||||
android:label="@string/app_name"
|
||||
android:roundIcon="@mipmap/icon"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/Theme.MyWallpaper"
|
||||
tools:targetApi="31">
|
||||
<activity
|
||||
android:name=".WelActivity"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".InfoActivity"
|
||||
android:exported="false"
|
||||
android:screenOrientation="portrait" />
|
||||
<activity
|
||||
android:name=".WallPaperActivity"
|
||||
android:exported="false"
|
||||
android:screenOrientation="portrait" />
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:exported="false">
|
||||
|
||||
</activity>
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
17801
app/src/main/assets/info.json
Normal file
82
app/src/main/java/com/nature/free/test/CategoryFragment.java
Normal file
@ -0,0 +1,82 @@
|
||||
package com.nature.free.test;
|
||||
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.recyclerview.widget.GridLayoutManager;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
|
||||
import com.nature.free.test.base.BaseFragment;
|
||||
import com.nature.free.test.data.ClassData;
|
||||
import com.nature.free.test.data.ClassData_;
|
||||
import com.nature.free.test.data.Wallpaper;
|
||||
import com.nature.free.test.databinding.FragmentCategoryBinding;
|
||||
import com.nature.free.test.databinding.FragmentMainBinding;
|
||||
import com.nature.free.test.objectbox.ObjectBox;
|
||||
import com.nature.free.test.other.CategoryAdapter;
|
||||
import com.nature.free.test.other.MyAdapter;
|
||||
import com.nature.free.test.other.MyItemSpace;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import io.objectbox.query.Query;
|
||||
|
||||
|
||||
public class CategoryFragment extends BaseFragment<FragmentCategoryBinding> {
|
||||
|
||||
|
||||
private static final String ARG_PARAM1 = "param1";
|
||||
private static final String ARG_PARAM2 = "param2";
|
||||
|
||||
private String mParam1;
|
||||
private String mParam2;
|
||||
|
||||
public CategoryFragment() {
|
||||
// Required empty public constructor
|
||||
}
|
||||
|
||||
|
||||
public static CategoryFragment newInstance() {
|
||||
CategoryFragment fragment = new CategoryFragment();
|
||||
Bundle args = new Bundle();
|
||||
// args.putString(ARG_PARAM1, param1);
|
||||
// args.putString(ARG_PARAM2, param2);
|
||||
fragment.setArguments(args);
|
||||
return fragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
if (getArguments() != null) {
|
||||
mParam1 = getArguments().getString(ARG_PARAM1);
|
||||
mParam2 = getArguments().getString(ARG_PARAM2);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected FragmentCategoryBinding getFragmentVb() {
|
||||
return FragmentCategoryBinding.inflate(getLayoutInflater());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initView() {
|
||||
List<ClassData> classData = new ArrayList<>();
|
||||
List<ClassData> all = ObjectBox.getBoxBeanCategory().getAll();
|
||||
for(ClassData data :all){
|
||||
if(!data.getTitle().equals("Newest")){
|
||||
classData.add(data);
|
||||
}
|
||||
}
|
||||
CategoryAdapter myAdapter = new CategoryAdapter(requireContext(), classData);
|
||||
fragmentVb.recyclerClass.setLayoutManager(new LinearLayoutManager(requireContext()));
|
||||
fragmentVb.recyclerClass.setAdapter(myAdapter);
|
||||
// fragmentVb.recycler.addItemDecoration(new MyItemSpace(Utils.INSTANCE.dpToPx(5),Utils.INSTANCE.dpToPx(5),0));
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
80
app/src/main/java/com/nature/free/test/InfoActivity.java
Normal file
@ -0,0 +1,80 @@
|
||||
package com.nature.free.test;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.recyclerview.widget.GridLayoutManager;
|
||||
|
||||
import com.nature.free.test.base.BaseActivity;
|
||||
import com.nature.free.test.data.ClassData;
|
||||
import com.nature.free.test.data.ClassData_;
|
||||
import com.nature.free.test.data.Wallpaper;
|
||||
import com.nature.free.test.databinding.ActivityInfoBinding;
|
||||
import com.nature.free.test.objectbox.ObjectBox;
|
||||
import com.nature.free.test.other.MyAdapter;
|
||||
import com.nature.free.test.other.MyItemSpace;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import io.objectbox.query.Query;
|
||||
|
||||
public class InfoActivity extends BaseActivity<ActivityInfoBinding> {
|
||||
|
||||
|
||||
private MyAdapter myAdapter;
|
||||
|
||||
private long classID;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
init();
|
||||
mainBinding.back.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
finish();
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ActivityInfoBinding getMainBinding() {
|
||||
return ActivityInfoBinding.inflate(getLayoutInflater());
|
||||
}
|
||||
|
||||
private void init() {
|
||||
classID = getIntent().getLongExtra(MyWallpaper.KEY_CATGORY_DATA, 0l);
|
||||
ClassData classData = getData();
|
||||
if (classData != null) {
|
||||
mainBinding.tvName.setText(classData.getTitle());
|
||||
myAdapter = new MyAdapter(this,false);
|
||||
myAdapter.refresh(classData.info);
|
||||
mainBinding.recycler.setLayoutManager(new GridLayoutManager(this, 2));
|
||||
mainBinding.recycler.setAdapter(myAdapter);
|
||||
mainBinding.recycler.addItemDecoration(new MyItemSpace(Utils.INSTANCE.dpToPx(5), Utils.INSTANCE.dpToPx(5), 0));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
if (myAdapter != null) {
|
||||
myAdapter.refresh(getData().info);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private ClassData getData() {
|
||||
Query<ClassData> build = ObjectBox.getBoxBeanCategory().query(ClassData_.id.equal(classID)).build();
|
||||
ClassData data = build.findFirst();
|
||||
build.close();
|
||||
|
||||
return data;
|
||||
}
|
||||
}
|
||||
118
app/src/main/java/com/nature/free/test/MainActivity.java
Normal file
@ -0,0 +1,118 @@
|
||||
package com.nature.free.test;
|
||||
|
||||
import android.Manifest;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.viewpager2.adapter.FragmentStateAdapter;
|
||||
import androidx.viewpager2.widget.ViewPager2;
|
||||
|
||||
import com.google.android.material.tabs.TabLayout;
|
||||
import com.nature.free.test.base.BaseActivity;
|
||||
import com.nature.free.test.databinding.ActivityMainBinding;
|
||||
import com.nature.free.test.objectbox.ObjectBox;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class MainActivity extends BaseActivity<ActivityMainBinding> {
|
||||
|
||||
private List<Fragment> list;
|
||||
|
||||
@Override
|
||||
protected ActivityMainBinding getMainBinding() {
|
||||
return ActivityMainBinding.inflate(getLayoutInflater());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
initUi();
|
||||
bindVpTab();
|
||||
|
||||
}
|
||||
|
||||
private void initUi() {
|
||||
list = new ArrayList<>();
|
||||
list.add(MainFragment.newInstance(false));
|
||||
list.add(CategoryFragment.newInstance());
|
||||
list.add(MainFragment.newInstance(true));
|
||||
|
||||
for (int j = 0; j < list.size(); j++) {
|
||||
TabLayout.Tab tab = mainBinding.tab.newTab();
|
||||
View inflate = LayoutInflater.from(this).inflate(R.layout.tab_item_view, null);
|
||||
ImageView imageViewTab = inflate.findViewById(R.id.tabIm);
|
||||
if (j == 0) {
|
||||
imageViewTab.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.selector_ichome));
|
||||
} else if (j == 1) {
|
||||
imageViewTab.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.selector_iccategory));
|
||||
} else if (j == 2) {
|
||||
imageViewTab.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.selector_iclove));
|
||||
}
|
||||
tab.setCustomView(inflate);
|
||||
mainBinding.tab.addTab(tab);
|
||||
}
|
||||
mainBinding.viewP2.setAdapter(new FragmentStateAdapter(this) {
|
||||
@NonNull
|
||||
@Override
|
||||
public Fragment createFragment(int position) {
|
||||
return list.get(position);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return list.size();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void bindVpTab() {
|
||||
mainBinding.viewP2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
|
||||
@Override
|
||||
public void onPageSelected(int position) {
|
||||
super.onPageSelected(position);
|
||||
mainBinding.tab.getTabAt(position).select();
|
||||
}
|
||||
});
|
||||
|
||||
mainBinding.tab.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
|
||||
@Override
|
||||
public void onTabSelected(TabLayout.Tab tab) {
|
||||
View customView = tab.getCustomView();
|
||||
ImageView imageViewTab = customView.findViewById(R.id.tabIm);
|
||||
imageViewTab.setSelected(true);
|
||||
int position = tab.getPosition();
|
||||
mainBinding.viewP2.setCurrentItem(position);
|
||||
if (position == 2 || position == 0) {
|
||||
MainFragment fragment = (MainFragment) list.get(position);
|
||||
fragment.refresh();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTabUnselected(TabLayout.Tab tab) {
|
||||
View customView = tab.getCustomView();
|
||||
ImageView imageViewTab = customView.findViewById(R.id.tabIm);
|
||||
imageViewTab.setSelected(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTabReselected(TabLayout.Tab tab) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
144
app/src/main/java/com/nature/free/test/MainFragment.java
Normal file
@ -0,0 +1,144 @@
|
||||
package com.nature.free.test;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.recyclerview.widget.GridLayoutManager;
|
||||
|
||||
import com.nature.free.test.base.BaseFragment;
|
||||
import com.nature.free.test.data.ClassData;
|
||||
import com.nature.free.test.data.ClassData_;
|
||||
import com.nature.free.test.data.Wallpaper;
|
||||
import com.nature.free.test.data.Wallpaper_;
|
||||
import com.nature.free.test.databinding.FragmentMainBinding;
|
||||
import com.nature.free.test.objectbox.ObjectBox;
|
||||
import com.nature.free.test.other.MyAdapter;
|
||||
import com.nature.free.test.other.MyItemSpace;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import io.objectbox.query.Query;
|
||||
import kotlin.Unit;
|
||||
import kotlin.jvm.functions.Function0;
|
||||
|
||||
|
||||
public class MainFragment extends BaseFragment<FragmentMainBinding> {
|
||||
|
||||
|
||||
private static final String ARG_PARAM1 = "param1";
|
||||
|
||||
|
||||
private boolean love;
|
||||
private MyAdapter myAdapter;
|
||||
|
||||
|
||||
public MainFragment() {
|
||||
// Required empty public constructor
|
||||
}
|
||||
|
||||
|
||||
public static MainFragment newInstance(Boolean isLove) {
|
||||
MainFragment fragment = new MainFragment();
|
||||
Bundle args = new Bundle();
|
||||
args.putBoolean(ARG_PARAM1, isLove);
|
||||
fragment.setArguments(args);
|
||||
return fragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
if (getArguments() != null) {
|
||||
love = getArguments().getBoolean(ARG_PARAM1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected FragmentMainBinding getFragmentVb() {
|
||||
return FragmentMainBinding.inflate(getLayoutInflater());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initView() {
|
||||
List<Wallpaper> info = new ArrayList<>();
|
||||
myAdapter = new MyAdapter(requireContext(),love);
|
||||
if (love) {
|
||||
info.addAll(getLoves());
|
||||
myAdapter.onClickAction(new Function0<Unit>() {
|
||||
@Override
|
||||
public Unit invoke() {
|
||||
myAdapter.refresh(getLoves());
|
||||
return null;
|
||||
}
|
||||
});
|
||||
} else {
|
||||
Query<ClassData> newest = ObjectBox.getBoxBeanCategory().query(ClassData_.title.equal("Newest")).build();
|
||||
ClassData beans = newest.findFirst();
|
||||
newest.close();
|
||||
if (beans != null){
|
||||
info.addAll(beans.info);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fragmentVb.recycler.setLayoutManager(new GridLayoutManager(requireContext(), 2));
|
||||
myAdapter.refresh(info);
|
||||
fragmentVb.recycler.setAdapter(myAdapter);
|
||||
fragmentVb.recycler.addItemDecoration(new MyItemSpace(Utils.INSTANCE.dpToPx(5), Utils.INSTANCE.dpToPx(5), 0));
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void refresh() {
|
||||
if (love & myAdapter != null) {
|
||||
myAdapter.refresh(getLoves());
|
||||
}
|
||||
|
||||
if (!love && myAdapter != null) {
|
||||
myAdapter.refresh(getMain());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private List<Wallpaper> getMain() {
|
||||
List<Wallpaper> data = new ArrayList<>();
|
||||
Query<ClassData> newest = ObjectBox.getBoxBeanCategory().query(ClassData_.title.equal("Newest")).build();
|
||||
ClassData beans = newest.findFirst();
|
||||
newest.close();
|
||||
if (beans != null) {
|
||||
data.addAll(beans.info);
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
private List<Wallpaper> getLoves() {
|
||||
Query<Wallpaper> build = ObjectBox.getBoxBean().query(Wallpaper_.love.equal(true)).build();
|
||||
List<Wallpaper> wallpapers = build.find();
|
||||
build.close();
|
||||
if(wallpapers.size()>0){
|
||||
setEmptyView(true);
|
||||
}else {
|
||||
setEmptyView(false);
|
||||
}
|
||||
return wallpapers;
|
||||
}
|
||||
|
||||
|
||||
private void setEmptyView(boolean hasData){
|
||||
if(hasData){
|
||||
fragmentVb.emptyTv.setVisibility(View.GONE);
|
||||
fragmentVb.recycler.setVisibility(View.VISIBLE);
|
||||
}else {
|
||||
fragmentVb.emptyTv.setVisibility(View.VISIBLE);
|
||||
fragmentVb.recycler.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
43
app/src/main/java/com/nature/free/test/MyWallpaper.kt
Normal file
@ -0,0 +1,43 @@
|
||||
package com.nature.free.test
|
||||
|
||||
import android.app.Application
|
||||
import com.nature.free.test.data.ClassData
|
||||
import com.nature.free.test.objectbox.ObjectBox
|
||||
|
||||
|
||||
class MyWallpaper : Application() {
|
||||
|
||||
companion object {
|
||||
lateinit var globalContext: MyWallpaper
|
||||
|
||||
lateinit var data: List<ClassData>
|
||||
|
||||
const val KEY_CATGORY_DATA = "category_data"
|
||||
const val KEY_COLOR = "color"
|
||||
const val KEY_WALLPAPER = "wallpaper"
|
||||
|
||||
const val TYPE_DISSMISS = 0
|
||||
const val TYPE_LOCK = 1
|
||||
const val TYPE_HOME = 2
|
||||
const val TYPE_BOTH = 3
|
||||
|
||||
const val BITMAP_FILE_DIRECTORY = "MyWallpaper"
|
||||
}
|
||||
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
globalContext = this
|
||||
ObjectBox.init(this)
|
||||
if (ObjectBox.getBoxBean().all.size <= 0) {
|
||||
init()
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private fun init() {
|
||||
val openFile = Utils.openFile(assets.open("info.json"))
|
||||
data = Utils.getData(openFile)
|
||||
|
||||
}
|
||||
}
|
||||
286
app/src/main/java/com/nature/free/test/Utils.kt
Normal file
@ -0,0 +1,286 @@
|
||||
package com.nature.free.test
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.ContentValues
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageManager
|
||||
import android.graphics.Bitmap
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.Environment
|
||||
import android.provider.MediaStore
|
||||
import android.text.format.DateUtils
|
||||
import android.util.Log
|
||||
import android.widget.ProgressBar
|
||||
import android.widget.Toast
|
||||
import androidx.core.app.ActivityCompat
|
||||
import androidx.core.view.isVisible
|
||||
import com.nature.free.test.data.ClassData
|
||||
import com.nature.free.test.data.Wallpaper
|
||||
import com.nature.free.test.objectbox.ObjectBox
|
||||
import org.json.JSONArray
|
||||
import java.io.BufferedReader
|
||||
import java.io.File
|
||||
import java.io.FileOutputStream
|
||||
import java.io.IOException
|
||||
import java.io.InputStream
|
||||
import java.io.InputStreamReader
|
||||
import java.io.StringWriter
|
||||
import java.math.BigInteger
|
||||
import java.nio.charset.StandardCharsets
|
||||
import java.security.MessageDigest
|
||||
import java.security.NoSuchAlgorithmException
|
||||
|
||||
|
||||
object Utils {
|
||||
|
||||
fun openFile(input: InputStream): String {
|
||||
val stringWriter = StringWriter()
|
||||
val charArray = CharArray(input.available())
|
||||
var l = 0;
|
||||
val bufReader = BufferedReader(InputStreamReader(input, StandardCharsets.UTF_8))
|
||||
while (bufReader.read(charArray).also {
|
||||
l = it
|
||||
} != -1) {
|
||||
stringWriter.write(charArray, 0, l)
|
||||
}
|
||||
return stringWriter.toString()
|
||||
|
||||
}
|
||||
|
||||
|
||||
fun getData(jsonString: String): List<ClassData> {
|
||||
var data = mutableListOf<ClassData>()
|
||||
val array = JSONArray(jsonString)
|
||||
for (i in 0 until array.length()) {
|
||||
val any = array.getJSONObject(i)
|
||||
val title = any.getString("title")
|
||||
val covertValue = any.getString("covert")
|
||||
|
||||
|
||||
|
||||
val jsonArray = any.getJSONArray("info")
|
||||
var infoModels = mutableListOf<Wallpaper>()
|
||||
for (k in 0 until jsonArray.length()) {
|
||||
val jsonObject = jsonArray.getJSONObject(k)
|
||||
|
||||
|
||||
val preview = jsonObject.getString("preview")
|
||||
val source = jsonObject.getString("source")
|
||||
val portraitValue = jsonObject.getString("portrait")
|
||||
|
||||
val banneValue = jsonObject.getString("banner")
|
||||
val stringWh = jsonObject.getString("porWidthHeight")
|
||||
|
||||
|
||||
|
||||
|
||||
val wallpaper = Wallpaper(
|
||||
porWidthHeight = stringWh,
|
||||
preview = preview,
|
||||
width = 0,
|
||||
height = 0,
|
||||
sourceWidth = 0,
|
||||
sourceHeight = 0,
|
||||
source = source,
|
||||
banner = banneValue,
|
||||
portrait = portraitValue,
|
||||
love = false
|
||||
)
|
||||
infoModels.add(wallpaper)
|
||||
ObjectBox.getBoxBean().put(wallpaper)
|
||||
|
||||
}
|
||||
val indexOfFirst = infoModels.indexOfFirst { it.banner != "" }
|
||||
var tempCovert = infoModels[indexOfFirst].banner.toString()
|
||||
Log.d("-------------tt", "-----------tempCovert=$tempCovert title=$title")
|
||||
val classData = ClassData(covert = covertValue, title = title)
|
||||
classData.info.addAll(infoModels)
|
||||
ObjectBox.getBoxBeanCategory().put(classData)
|
||||
data.add(classData)
|
||||
}
|
||||
return data
|
||||
}
|
||||
|
||||
|
||||
fun dpToPx(dp: Int): Int {
|
||||
val scale: Float = MyWallpaper.globalContext.resources.displayMetrics.density
|
||||
return (dp * scale + 0.5f).toInt()
|
||||
}
|
||||
|
||||
fun pxToDp(dp: Int): Int {
|
||||
val scale: Float = MyWallpaper.globalContext.resources.displayMetrics.density
|
||||
return (dp / scale + 0.5f).toInt()
|
||||
}
|
||||
|
||||
|
||||
|
||||
private fun checkPermission(context: Context, permissions: Array<String>): Boolean {
|
||||
var result = true
|
||||
for (per in permissions) {
|
||||
if (ActivityCompat.checkSelfPermission(
|
||||
context,
|
||||
per
|
||||
) != PackageManager.PERMISSION_GRANTED
|
||||
) {
|
||||
result = false
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
|
||||
|
||||
fun setWallpaperToast(context: Activity, isSuccess: Boolean, pb: ProgressBar) {
|
||||
if (isSuccess) {
|
||||
context.runOnUiThread {
|
||||
Toast.makeText(
|
||||
context,
|
||||
context.getString(R.string.success),
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
pb.isVisible = false
|
||||
}
|
||||
} else {
|
||||
context.runOnUiThread {
|
||||
Toast.makeText(
|
||||
context,
|
||||
context.getString(R.string.fail),
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
pb.isVisible = false
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
fun getRealUrl(old: String?): String {
|
||||
if (old == null || old == "null") {
|
||||
return ""
|
||||
}
|
||||
val lastIndexOf = old.lastIndexOf(".")
|
||||
val substring = old.substring(lastIndexOf)
|
||||
val mD5Hash = getMD5Hash(old)
|
||||
return if (mD5Hash != null) {
|
||||
"https://resource-sg-public.lux-ad.com/wallpaper/$mD5Hash$substring"
|
||||
} else {
|
||||
""
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
fun getMD5Hash(input: String): String? {
|
||||
try {
|
||||
|
||||
val md = MessageDigest.getInstance("MD5")
|
||||
|
||||
val hashBytes = md.digest(input.toByteArray())
|
||||
|
||||
val bigInt = BigInteger(1, hashBytes)
|
||||
var md5Hash = bigInt.toString(16)
|
||||
|
||||
while (md5Hash.length < 32) {
|
||||
md5Hash = "0$md5Hash"
|
||||
}
|
||||
return md5Hash
|
||||
} catch (e: NoSuchAlgorithmException) {
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 保存bitmap到相册,并兼容AndroidQ
|
||||
fun saveBitmap(
|
||||
context: Context,
|
||||
bitmap: Bitmap?,
|
||||
fileName: String,
|
||||
imageType: String
|
||||
): Boolean {
|
||||
if (bitmap == null) {
|
||||
return false
|
||||
}
|
||||
val isSaveSuccess: Boolean = if (Build.VERSION.SDK_INT < 29) {
|
||||
saveImageToGallery(context, bitmap, fileName + imageType)
|
||||
} else {
|
||||
saveImageToGalleryQ(context, bitmap, fileName)
|
||||
}
|
||||
return isSaveSuccess
|
||||
}
|
||||
|
||||
|
||||
private fun saveImageToGallery(context: Context, image: Bitmap, fileName: String): Boolean {
|
||||
|
||||
val storePath: String = getBitmapFileDir()
|
||||
val appDir = File(storePath)
|
||||
if (!appDir.exists()) {
|
||||
appDir.mkdir()
|
||||
}
|
||||
val file = File(appDir, fileName)
|
||||
try {
|
||||
val fos = FileOutputStream(file)
|
||||
|
||||
val isSuccess = image.compress(Bitmap.CompressFormat.JPEG, 100, fos)
|
||||
fos.flush()
|
||||
fos.close()
|
||||
|
||||
val uri = Uri.fromFile(file)
|
||||
context.sendBroadcast(Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri))
|
||||
return isSuccess
|
||||
} catch (e: IOException) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
private fun saveImageToGalleryQ(
|
||||
context: Context,
|
||||
image: Bitmap,
|
||||
mImageFileName: String
|
||||
): Boolean {
|
||||
val mImageTime = System.currentTimeMillis()
|
||||
// val mImageFileName: String = getCharacterAndNumber() + ".png"
|
||||
val values = ContentValues()
|
||||
values.put(MediaStore.MediaColumns.RELATIVE_PATH, getBitmapFileDir())
|
||||
values.put(MediaStore.MediaColumns.DISPLAY_NAME, mImageFileName)
|
||||
values.put(MediaStore.MediaColumns.MIME_TYPE, "image/png")
|
||||
values.put(MediaStore.MediaColumns.DATE_ADDED, mImageTime / 1000)
|
||||
values.put(MediaStore.MediaColumns.DATE_MODIFIED, mImageTime / 1000)
|
||||
values.put(
|
||||
MediaStore.MediaColumns.DATE_EXPIRES,
|
||||
(mImageTime + DateUtils.DAY_IN_MILLIS) / 1000
|
||||
)
|
||||
values.put(MediaStore.MediaColumns.IS_PENDING, 1)
|
||||
val resolver = context.contentResolver
|
||||
val uri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values)
|
||||
try {
|
||||
val out = resolver.openOutputStream(uri!!)
|
||||
if (!image.compress(Bitmap.CompressFormat.PNG, 100, out!!)) {
|
||||
return false
|
||||
}
|
||||
values.clear()
|
||||
values.put(MediaStore.MediaColumns.IS_PENDING, 0)
|
||||
values.putNull(MediaStore.MediaColumns.DATE_EXPIRES)
|
||||
resolver.update(uri, values, null, null)
|
||||
return true
|
||||
} catch (e: java.lang.Exception) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||
resolver.delete(uri!!, null)
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private fun getBitmapFileDir(): String {
|
||||
return if (Build.VERSION.SDK_INT < 29) {
|
||||
|
||||
Environment.getExternalStorageDirectory().absolutePath + File.separator + MyWallpaper.BITMAP_FILE_DIRECTORY
|
||||
} else {
|
||||
Environment.DIRECTORY_PICTURES + File.separator + MyWallpaper.BITMAP_FILE_DIRECTORY
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
424
app/src/main/java/com/nature/free/test/WallPaperActivity.java
Normal file
@ -0,0 +1,424 @@
|
||||
package com.nature.free.test;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.Dialog;
|
||||
import android.app.WallpaperManager;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.view.Window;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.load.DataSource;
|
||||
import com.bumptech.glide.load.engine.GlideException;
|
||||
import com.bumptech.glide.request.RequestListener;
|
||||
import com.bumptech.glide.request.target.CustomTarget;
|
||||
import com.bumptech.glide.request.target.Target;
|
||||
import com.bumptech.glide.request.transition.Transition;
|
||||
import com.nature.free.test.base.BaseActivity;
|
||||
import com.nature.free.test.data.Wallpaper;
|
||||
import com.nature.free.test.data.Wallpaper_;
|
||||
import com.nature.free.test.databinding.ActivityWallpaperBinding;
|
||||
import com.nature.free.test.objectbox.ObjectBox;
|
||||
import com.nature.free.test.other.DialogSet;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
|
||||
import io.objectbox.query.Query;
|
||||
import kotlin.Unit;
|
||||
import kotlin.jvm.functions.Function1;
|
||||
|
||||
public class WallPaperActivity extends BaseActivity<ActivityWallpaperBinding> implements View.OnClickListener {
|
||||
private Wallpaper mWallpaper;
|
||||
|
||||
private DialogSet dialogSet;
|
||||
|
||||
private String[] permission;
|
||||
private Handler mHandler;
|
||||
private WallpaperManager wallpaperManager;
|
||||
private File mFilePro1;
|
||||
private File mFileSource;
|
||||
|
||||
private Dialog dialogLoading;
|
||||
|
||||
|
||||
private Bitmap mBitmapPro1;
|
||||
private Bitmap mBitmapSource;
|
||||
|
||||
private String SuffixPortrait;
|
||||
private String SuffixSource;
|
||||
private long tempId;
|
||||
|
||||
private Bitmap curBitMap;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
statusbar();
|
||||
int intExtra = getIntent().getIntExtra(MyWallpaper.KEY_COLOR, getColor(R.color.main_bg));
|
||||
tempId = getIntent().getLongExtra(MyWallpaper.KEY_WALLPAPER, 1);
|
||||
mWallpaper = getmWallpaper();
|
||||
mainBinding.love.setSelected(mWallpaper.getLove());
|
||||
|
||||
dialogLoading = new Dialog(this);
|
||||
dialogLoading.setCancelable(false);
|
||||
dialogLoading.setContentView(R.layout.dialog_loading);
|
||||
onUi();
|
||||
onClick();
|
||||
wallpaperManager = WallpaperManager.getInstance(this);
|
||||
mHandler = new Handler();
|
||||
|
||||
int maxHeapSize = (int) (Runtime.getRuntime().maxMemory() / 1024 / 1024);
|
||||
|
||||
}
|
||||
|
||||
private Wallpaper getmWallpaper() {
|
||||
Query<Wallpaper> build = ObjectBox.getBoxBean().query(Wallpaper_.id.equal(tempId)).build();
|
||||
Wallpaper wallpapers = build.findFirst();
|
||||
build.close();
|
||||
return wallpapers;
|
||||
}
|
||||
|
||||
private void onClick() {
|
||||
mainBinding.check1.setOnClickListener(this);
|
||||
mainBinding.check2.setOnClickListener(this);
|
||||
mainBinding.back.setOnClickListener(this);
|
||||
mainBinding.setWallpaper.setOnClickListener(this);
|
||||
mainBinding.save.setOnClickListener(this);
|
||||
mainBinding.love.setOnClickListener(this);
|
||||
}
|
||||
|
||||
|
||||
private void showDialog() {
|
||||
if (dialogSet == null) {
|
||||
dialogSet = DialogSet.newInstance();
|
||||
dialogSet.onSetListener(new Function1<Integer, Unit>() {
|
||||
@Override
|
||||
public Unit invoke(Integer integer) {
|
||||
switch (integer) {
|
||||
case MyWallpaper.TYPE_DISSMISS:
|
||||
break;
|
||||
case MyWallpaper.TYPE_BOTH:
|
||||
apply(-1);
|
||||
break;
|
||||
case MyWallpaper.TYPE_HOME:
|
||||
apply(WallpaperManager.FLAG_SYSTEM);
|
||||
break;
|
||||
case MyWallpaper.TYPE_LOCK:
|
||||
apply(WallpaperManager.FLAG_LOCK);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
return null;
|
||||
}
|
||||
});
|
||||
}
|
||||
dialogSet.show(getSupportFragmentManager(), "");
|
||||
}
|
||||
|
||||
private void apply(int which) {
|
||||
mainBinding.load.setVisibility(View.VISIBLE);
|
||||
if (mainBinding.check1.isSelected()) {
|
||||
setmWallpaper(which, mBitmapPro1);
|
||||
} else if (mainBinding.check2.isSelected()) {
|
||||
setmWallpaper(which, mBitmapSource);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void setmWallpaper(int which, Bitmap bitmap) {
|
||||
if (bitmap == null) {
|
||||
Utils.INSTANCE.setWallpaperToast(WallPaperActivity.this, false,mainBinding.load);
|
||||
// mainBinding.load.setVisibility(View.GONE);
|
||||
return;
|
||||
}
|
||||
// FileInputStream fileInputStream = new FileInputStream(bitmap.getAbsolutePath());
|
||||
mHandler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
|
||||
try {
|
||||
wallpaperManager.setBitmap(bitmap);
|
||||
Utils.INSTANCE.setWallpaperToast(WallPaperActivity.this, true,mainBinding.load);
|
||||
// mainBinding.load.setVisibility(View.GONE);
|
||||
} catch (IOException e) {
|
||||
Utils.INSTANCE.setWallpaperToast(WallPaperActivity.this, false,mainBinding.load);
|
||||
// mainBinding.load.setVisibility(View.GONE);
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
if (which == -1) {
|
||||
wallpaperManager.setBitmap(bitmap);
|
||||
} else {
|
||||
wallpaperManager.setBitmap(
|
||||
bitmap,
|
||||
null,
|
||||
true,
|
||||
which
|
||||
|
||||
);
|
||||
}
|
||||
// mainBinding.load.setVisibility(View.GONE);
|
||||
Utils.INSTANCE.setWallpaperToast(WallPaperActivity.this, true,mainBinding.load);
|
||||
} catch (IOException e) {
|
||||
// mainBinding.load.setVisibility(View.GONE);
|
||||
Utils.INSTANCE.setWallpaperToast(WallPaperActivity.this, false,mainBinding.load);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void onUi() {
|
||||
if (!mWallpaper.getSource().equals("null")) {
|
||||
String source = mWallpaper.getSource();
|
||||
int index = source.lastIndexOf("-");
|
||||
int indexLast = source.lastIndexOf(".");
|
||||
String substring = source.substring(index + 1, indexLast);
|
||||
SuffixSource = source.substring(indexLast);
|
||||
Log.d("--------------tt", "-----------source SuffixSource=" + SuffixSource);
|
||||
mainBinding.tvWh2.setText(substring);
|
||||
}
|
||||
if (!mWallpaper.getPortrait().equals("null")) {
|
||||
String portrait = mWallpaper.getPortrait();
|
||||
int index = portrait.lastIndexOf("-");
|
||||
int indexLast = portrait.lastIndexOf(".");
|
||||
String substring = portrait.substring(index + 1, indexLast);
|
||||
SuffixPortrait = portrait.substring(indexLast);
|
||||
Log.d("--------------tt", "-----------getPortrait SuffixPortrait=" + SuffixPortrait);
|
||||
mainBinding.tvWh1.setText(mWallpaper.getPorWidthHeight());
|
||||
loadIM1();
|
||||
}
|
||||
|
||||
mainBinding.check1.setSelected(true);
|
||||
|
||||
}
|
||||
|
||||
private Boolean saveAlbum() {
|
||||
String imageType = "";
|
||||
Bitmap bitmap = null;
|
||||
if (mainBinding.check1.isSelected()) {
|
||||
imageType = SuffixPortrait;
|
||||
} else if (mainBinding.check2.isSelected()) {
|
||||
imageType = SuffixSource;
|
||||
}
|
||||
bitmap = curBitMap;
|
||||
if (bitmap == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean b = Utils.INSTANCE.saveBitmap(this, bitmap, String.valueOf(System.currentTimeMillis()), imageType);
|
||||
Log.d("--------------tt", "--------saveBitmap=" + b);
|
||||
|
||||
|
||||
return b;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ActivityWallpaperBinding getMainBinding() {
|
||||
return ActivityWallpaperBinding.inflate(getLayoutInflater());
|
||||
}
|
||||
|
||||
|
||||
private void statusbar() {
|
||||
Window window = getWindow();
|
||||
window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
|
||||
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN);
|
||||
|
||||
}
|
||||
|
||||
private void loadIM1() {
|
||||
mainBinding.load.setVisibility(View.VISIBLE);
|
||||
Glide.with(this)
|
||||
.asBitmap()
|
||||
.load(mWallpaper.getPortrait())
|
||||
.thumbnail(0.1f)
|
||||
.addListener(new RequestListener<Bitmap>() {
|
||||
@Override
|
||||
public boolean onLoadFailed(@Nullable GlideException e, @Nullable Object model, @NonNull Target<Bitmap> target, boolean isFirstResource) {
|
||||
mainBinding.load.setVisibility(View.GONE);
|
||||
Toast.makeText(
|
||||
WallPaperActivity.this,
|
||||
getString(R.string.load_fail),
|
||||
Toast.LENGTH_SHORT
|
||||
).show();
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onResourceReady(@NonNull Bitmap resource, @NonNull Object model, Target<Bitmap> target, @NonNull DataSource dataSource, boolean isFirstResource) {
|
||||
// mBitmapPro1 = Utils.INSTANCE.fileToBitMap(mFilePro1.getAbsolutePath());
|
||||
if (curBitMap != null && !curBitMap.isRecycled())
|
||||
curBitMap.recycle();
|
||||
curBitMap = resource.copy(Bitmap.Config.ARGB_8888, true);
|
||||
mBitmapPro1 = resource;
|
||||
setCheckPos(0);
|
||||
mainBinding.load.setVisibility(View.GONE);
|
||||
mainBinding.image.setImageBitmap(mBitmapPro1);
|
||||
|
||||
|
||||
// if (mBitmapPro1 != null) {
|
||||
//
|
||||
// } else {
|
||||
// mainBinding.load.setVisibility(View.GONE);
|
||||
// Toast.makeText(
|
||||
// WallPaperActivity.this,
|
||||
// getString(R.string.load_fail),
|
||||
// Toast.LENGTH_SHORT
|
||||
// ).show();
|
||||
// }
|
||||
return false;
|
||||
}
|
||||
|
||||
}).preload();
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
// private void loadBitMap2() {
|
||||
// mainBinding.load.setVisibility(View.VISIBLE);
|
||||
// Glide.with(this)
|
||||
// .asBitmap()
|
||||
// .load(mWallpaper.getSource())
|
||||
// .thumbnail(0.1f)
|
||||
// .addListener(new RequestListener<Bitmap>() {
|
||||
//
|
||||
//
|
||||
// @Override
|
||||
// public boolean onLoadFailed(@Nullable GlideException e, @Nullable Object model, @NonNull Target<Bitmap> target, boolean isFirstResource) {
|
||||
// mainBinding.load.setVisibility(View.GONE);
|
||||
// Toast.makeText(
|
||||
// WallPaperActivity.this,
|
||||
// getString(R.string.load_fail),
|
||||
// Toast.LENGTH_SHORT
|
||||
// ).show();
|
||||
// return false;
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public boolean onResourceReady(@NonNull Bitmap resource, @NonNull Object model, Target<Bitmap> target, @NonNull DataSource dataSource, boolean isFirstResource) {
|
||||
//// mBitmapPro1 = Utils.INSTANCE.fileToBitMap(mFilePro1.getAbsolutePath());
|
||||
// mBitmapSource = resource;
|
||||
// if (curBitMap != null && !curBitMap.isRecycled())
|
||||
// curBitMap.recycle();
|
||||
// curBitMap = resource.copy(Bitmap.Config.ARGB_8888, true);
|
||||
// setCheckPos(1);
|
||||
// mainBinding.load.setVisibility(View.GONE);
|
||||
// mainBinding.image.setImageBitmap(mBitmapSource);
|
||||
//
|
||||
//
|
||||
//// if (mBitmapPro1 != null) {
|
||||
////
|
||||
//// } else {
|
||||
//// mainBinding.load.setVisibility(View.GONE);
|
||||
//// Toast.makeText(
|
||||
//// WallPaperActivity.this,
|
||||
//// getString(R.string.load_fail),
|
||||
//// Toast.LENGTH_SHORT
|
||||
//// ).show();
|
||||
//// }
|
||||
// return false;
|
||||
// }
|
||||
//
|
||||
// }).preload();
|
||||
//
|
||||
//
|
||||
// }
|
||||
|
||||
|
||||
private void setCheckPos(int pos) {
|
||||
if (pos == 0) {
|
||||
mainBinding.check1.setSelected(true);
|
||||
mainBinding.check2.setSelected(false);
|
||||
} else {
|
||||
mainBinding.check1.setSelected(false);
|
||||
mainBinding.check2.setSelected(true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (v.equals(mainBinding.back)) {
|
||||
finish();
|
||||
} else if (v.equals(mainBinding.check1)) {
|
||||
if (mBitmapPro1 != null) {
|
||||
setCheckPos(0);
|
||||
mainBinding.image.setImageBitmap(mBitmapPro1);
|
||||
} else {
|
||||
loadIM1();
|
||||
}
|
||||
|
||||
} else if (v.equals(mainBinding.save)) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||
save();
|
||||
} else {
|
||||
permission = new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};
|
||||
ActivityCompat.requestPermissions(this, permission, 0);
|
||||
}
|
||||
|
||||
} else if (v.equals(mainBinding.setWallpaper)) {
|
||||
showDialog();
|
||||
} else if (v.equals(mainBinding.love)) {
|
||||
mainBinding.love.setSelected(!mainBinding.love.isSelected());
|
||||
mWallpaper.setLove(mainBinding.love.isSelected());
|
||||
ObjectBox.getBoxBean().put(mWallpaper);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||
if (requestCode == 0) {
|
||||
boolean b = (ContextCompat.checkSelfPermission(WallPaperActivity.this, permission[0]) == PackageManager.PERMISSION_GRANTED);
|
||||
if (b) {
|
||||
save();
|
||||
} else {
|
||||
Toast.makeText(
|
||||
this,
|
||||
getString(R.string.save_fail),
|
||||
Toast.LENGTH_SHORT
|
||||
).show();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void save() {
|
||||
mainBinding.load.setVisibility(View.VISIBLE);
|
||||
Boolean aBoolean = saveAlbum();
|
||||
|
||||
if (aBoolean) {
|
||||
Toast.makeText(
|
||||
this,
|
||||
getString(R.string.save_success),
|
||||
Toast.LENGTH_SHORT
|
||||
).show();
|
||||
} else {
|
||||
Toast.makeText(
|
||||
this,
|
||||
getString(R.string.save_fail),
|
||||
Toast.LENGTH_SHORT
|
||||
).show();
|
||||
}
|
||||
mainBinding.load.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
}
|
||||
39
app/src/main/java/com/nature/free/test/WelActivity.java
Normal file
@ -0,0 +1,39 @@
|
||||
package com.nature.free.test;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.os.CountDownTimer;
|
||||
|
||||
import com.nature.free.test.base.BaseActivity;
|
||||
import com.nature.free.test.databinding.ActivityWelBinding;
|
||||
|
||||
public class WelActivity extends BaseActivity<ActivityWelBinding> {
|
||||
|
||||
private long time = 2000;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
new CountDownTimer(time,500){
|
||||
|
||||
@Override
|
||||
public void onTick(long millisUntilFinished) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFinish() {
|
||||
startActivity(new Intent(WelActivity.this,MainActivity.class));
|
||||
finish();
|
||||
|
||||
}
|
||||
}.start();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ActivityWelBinding getMainBinding() {
|
||||
return ActivityWelBinding.inflate(getLayoutInflater());
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,22 @@
|
||||
package com.nature.free.test.base;
|
||||
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.viewbinding.ViewBinding;
|
||||
|
||||
import com.nature.free.test.R;
|
||||
import com.nature.free.test.databinding.ActivityMainBinding;
|
||||
|
||||
public abstract class BaseActivity<T extends ViewBinding> extends AppCompatActivity {
|
||||
protected T mainBinding;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
mainBinding = getMainBinding();
|
||||
setContentView(mainBinding.getRoot());
|
||||
}
|
||||
|
||||
protected abstract T getMainBinding();
|
||||
}
|
||||
@ -0,0 +1,31 @@
|
||||
package com.nature.free.test.base;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.viewbinding.ViewBinding;
|
||||
|
||||
import com.nature.free.test.R;
|
||||
|
||||
public abstract class BaseFragment<T extends ViewBinding> extends Fragment {
|
||||
|
||||
protected T fragmentVb;
|
||||
public BaseFragment() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
fragmentVb = getFragmentVb();
|
||||
initView();
|
||||
return fragmentVb.getRoot();
|
||||
}
|
||||
|
||||
protected abstract T getFragmentVb();
|
||||
protected abstract void initView();
|
||||
}
|
||||
19
app/src/main/java/com/nature/free/test/data/ClassData.kt
Normal file
@ -0,0 +1,19 @@
|
||||
package com.nature.free.test.data
|
||||
|
||||
import io.objectbox.annotation.Backlink
|
||||
import io.objectbox.annotation.Entity
|
||||
import io.objectbox.annotation.Id
|
||||
import io.objectbox.relation.ToMany
|
||||
|
||||
|
||||
@Entity
|
||||
class ClassData @JvmOverloads constructor(
|
||||
@Id
|
||||
var id: Long = 0,
|
||||
var covert: String?, var title: String,
|
||||
|
||||
) {
|
||||
|
||||
@Backlink(to="category")
|
||||
lateinit var info: ToMany<Wallpaper>
|
||||
}
|
||||
26
app/src/main/java/com/nature/free/test/data/Wallpaper.kt
Normal file
@ -0,0 +1,26 @@
|
||||
package com.nature.free.test.data
|
||||
|
||||
import io.objectbox.annotation.Entity
|
||||
import io.objectbox.annotation.Id
|
||||
import io.objectbox.relation.ToOne
|
||||
import java.io.Serializable
|
||||
|
||||
@Entity
|
||||
class Wallpaper constructor (
|
||||
@Id
|
||||
var id: Long = 0,
|
||||
var width: Int = 0,
|
||||
var height: Int = 0,
|
||||
var sourceWidth: Int = 0,
|
||||
var sourceHeight: Int = 0,
|
||||
var porWidthHeight: String ="",
|
||||
var preview: String = "",
|
||||
var banner: String?= "",
|
||||
var source: String= "",
|
||||
var portrait: String= "",
|
||||
var love: Boolean = false,
|
||||
|
||||
) : Serializable {
|
||||
|
||||
lateinit var category: ToOne<ClassData>
|
||||
}
|
||||
@ -0,0 +1,30 @@
|
||||
package com.nature.free.test.objectbox;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import com.nature.free.test.data.ClassData;
|
||||
import com.nature.free.test.data.MyObjectBox;
|
||||
import com.nature.free.test.data.Wallpaper;
|
||||
|
||||
import io.objectbox.Box;
|
||||
import io.objectbox.BoxStore;
|
||||
|
||||
public class ObjectBox {
|
||||
|
||||
private static BoxStore store;
|
||||
|
||||
public static void init(Context context) {
|
||||
store = MyObjectBox.builder()
|
||||
.androidContext(context)
|
||||
.build();
|
||||
}
|
||||
|
||||
public static Box<Wallpaper> getBoxBean(){
|
||||
return store.boxFor(Wallpaper.class);
|
||||
}
|
||||
|
||||
public static Box<ClassData> getBoxBeanCategory(){
|
||||
return store.boxFor(ClassData.class);
|
||||
}
|
||||
|
||||
}
|
||||
105
app/src/main/java/com/nature/free/test/other/CategoryAdapter.kt
Normal file
@ -0,0 +1,105 @@
|
||||
package com.nature.free.test.other
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.util.Log
|
||||
import android.view.LayoutInflater
|
||||
import android.view.ViewGroup
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.load.DataSource
|
||||
import com.bumptech.glide.load.engine.GlideException
|
||||
import com.bumptech.glide.request.RequestListener
|
||||
import com.bumptech.glide.request.target.Target
|
||||
import com.nature.free.test.InfoActivity
|
||||
import com.nature.free.test.MyWallpaper
|
||||
import com.nature.free.test.R
|
||||
import com.nature.free.test.data.ClassData
|
||||
import com.nature.free.test.databinding.ItemCateogryAdapterBinding
|
||||
|
||||
class CategoryAdapter constructor(private var context: Context, private var data: List<ClassData>) :
|
||||
RecyclerView.Adapter<CategoryAdapter.MyVh>() {
|
||||
|
||||
|
||||
private var Imheight: Int = 0
|
||||
|
||||
private var loveColor = intArrayOf(
|
||||
R.color.main_love_bg1,
|
||||
R.color.main_love_bg2,
|
||||
R.color.main_love_bg3,
|
||||
R.color.main_love_bg4
|
||||
)
|
||||
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyVh {
|
||||
val inflate =
|
||||
ItemCateogryAdapterBinding.inflate(LayoutInflater.from(parent.context), parent, false)
|
||||
return MyVh(inflate)
|
||||
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int = data.size
|
||||
|
||||
override fun onBindViewHolder(holder: MyVh, position: Int) {
|
||||
var tempCovert = ""
|
||||
|
||||
data[position].run {
|
||||
// if (covert == null) {
|
||||
// val indexOfFirst = info.indexOfFirst { it.banner != null && it.banner != "null" }
|
||||
// tempCovert = info[indexOfFirst].banner.toString()
|
||||
// Log.d(
|
||||
// "------------tt",
|
||||
// "-------111-data[position].title =${title} indexOfFirst=$indexOfFirst"
|
||||
// )
|
||||
// } else {
|
||||
// tempCovert = covert.toString()
|
||||
// }
|
||||
tempCovert = covert.toString()
|
||||
holder.vb.name.text = title
|
||||
|
||||
|
||||
|
||||
holder.vb.classItem.setOnClickListener {
|
||||
context.startActivity(Intent(context, InfoActivity::class.java).apply {
|
||||
putExtra(MyWallpaper.KEY_CATGORY_DATA, id)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Glide.with(context).load(tempCovert)
|
||||
.placeholder(R.mipmap.icon)
|
||||
.listener(object : RequestListener<Drawable> {
|
||||
override fun onLoadFailed(
|
||||
e: GlideException?,
|
||||
model: Any?,
|
||||
target: Target<Drawable>,
|
||||
isFirstResource: Boolean
|
||||
): Boolean {
|
||||
Log.d("------------tt", "-----onLoadFailed---covert=$tempCovert ")
|
||||
return false
|
||||
}
|
||||
|
||||
override fun onResourceReady(
|
||||
resource: Drawable,
|
||||
model: Any,
|
||||
target: Target<Drawable>?,
|
||||
dataSource: DataSource,
|
||||
isFirstResource: Boolean
|
||||
): Boolean {
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
})
|
||||
.error(R.mipmap.icon).into(holder.vb.covertIm)
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
inner class MyVh(var vb: ItemCateogryAdapterBinding) : RecyclerView.ViewHolder(vb.root) {
|
||||
|
||||
}
|
||||
}
|
||||
89
app/src/main/java/com/nature/free/test/other/DialogSet.kt
Normal file
@ -0,0 +1,89 @@
|
||||
package com.nature.free.test.other
|
||||
|
||||
import android.content.DialogInterface
|
||||
import android.os.Bundle
|
||||
import android.view.Gravity
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.Window
|
||||
import android.view.WindowManager
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import com.nature.free.test.MyWallpaper
|
||||
import com.nature.free.test.R
|
||||
import com.nature.free.test.databinding.FragmentDialogSetBinding
|
||||
|
||||
|
||||
class DialogSet : DialogFragment() {
|
||||
|
||||
private var param1: String? = null
|
||||
private var param2: String? = null
|
||||
|
||||
private lateinit var dialogVb: FragmentDialogSetBinding
|
||||
private lateinit var mylistener:(Int)->Unit
|
||||
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater, container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View {
|
||||
dialogVb = FragmentDialogSetBinding.inflate(inflater, container, false)
|
||||
init()
|
||||
return dialogVb.root
|
||||
}
|
||||
|
||||
fun onSetListener(listener:(Int)->Unit){
|
||||
mylistener = listener
|
||||
}
|
||||
|
||||
private fun init() {
|
||||
isCancelable = true
|
||||
val window = dialog!!.window
|
||||
window!!.setBackgroundDrawableResource(R.color.trans)
|
||||
window.decorView.setPadding(0, 0, 0, 0)
|
||||
|
||||
initBar(window)
|
||||
|
||||
|
||||
val wlp = window.attributes
|
||||
wlp.gravity = Gravity.CENTER
|
||||
wlp.width = WindowManager.LayoutParams.MATCH_PARENT
|
||||
wlp.height = WindowManager.LayoutParams.WRAP_CONTENT
|
||||
window.attributes = wlp
|
||||
|
||||
dialogVb.imclose.setOnClickListener {
|
||||
dismiss()
|
||||
mylistener.invoke(MyWallpaper.TYPE_DISSMISS)
|
||||
|
||||
}
|
||||
dialogVb.tvBoth.setOnClickListener {
|
||||
dismiss()
|
||||
mylistener.invoke(MyWallpaper.TYPE_BOTH)
|
||||
|
||||
}
|
||||
dialogVb.tvhome.setOnClickListener {
|
||||
dismiss()
|
||||
mylistener.invoke(MyWallpaper.TYPE_HOME)
|
||||
|
||||
}
|
||||
dialogVb.tvlock.setOnClickListener {
|
||||
dismiss()
|
||||
mylistener.invoke(MyWallpaper.TYPE_LOCK)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDismiss(dialog: DialogInterface) {
|
||||
super.onDismiss(dialog)
|
||||
mylistener.invoke(MyWallpaper.TYPE_DISSMISS)
|
||||
}
|
||||
private fun initBar(window:Window) {
|
||||
window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
|
||||
window.decorView.systemUiVisibility =
|
||||
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN
|
||||
}
|
||||
companion object {
|
||||
@JvmStatic
|
||||
fun newInstance() = DialogSet()
|
||||
}
|
||||
}
|
||||
146
app/src/main/java/com/nature/free/test/other/MyAdapter.kt
Normal file
@ -0,0 +1,146 @@
|
||||
package com.nature.free.test.other
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.util.Log
|
||||
import android.view.LayoutInflater
|
||||
import android.view.ViewGroup
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.recyclerview.widget.DiffUtil
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.load.DataSource
|
||||
import com.bumptech.glide.load.engine.GlideException
|
||||
import com.bumptech.glide.request.RequestListener
|
||||
import com.bumptech.glide.request.target.Target
|
||||
import com.nature.free.test.MyWallpaper
|
||||
import com.nature.free.test.R
|
||||
import com.nature.free.test.Utils
|
||||
import com.nature.free.test.Utils.pxToDp
|
||||
import com.nature.free.test.WallPaperActivity
|
||||
import com.nature.free.test.data.Wallpaper
|
||||
import com.nature.free.test.databinding.ItemMyAdapterBinding
|
||||
import com.nature.free.test.objectbox.ObjectBox
|
||||
|
||||
class MyAdapter constructor(private var context: Context, private var mLove: Boolean = false) :
|
||||
RecyclerView.Adapter<MyAdapter.MyVh>() {
|
||||
|
||||
|
||||
private var Imheight: Int = 0
|
||||
private var action: (() -> Unit?)? = null
|
||||
|
||||
private var loveColor = intArrayOf(
|
||||
R.color.main_love_bg1,
|
||||
R.color.main_love_bg2,
|
||||
R.color.main_love_bg3,
|
||||
R.color.main_love_bg4
|
||||
)
|
||||
private var data: List<Wallpaper> = emptyList()
|
||||
|
||||
fun refresh(newData: List<Wallpaper>) {
|
||||
var old: List<Wallpaper> = data
|
||||
data = newData
|
||||
|
||||
val diffResult = DiffUtil.calculateDiff(Diff(old, data))
|
||||
diffResult.dispatchUpdatesTo(this)
|
||||
}
|
||||
|
||||
fun onClickAction(myaction: () -> Unit) {
|
||||
action = myaction
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyVh {
|
||||
val inflate =
|
||||
ItemMyAdapterBinding.inflate(LayoutInflater.from(parent.context), parent, false)
|
||||
|
||||
return MyVh(inflate)
|
||||
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int = data.size
|
||||
|
||||
override fun onBindViewHolder(holder: MyVh, position: Int) {
|
||||
val wallpaper = data[position]
|
||||
if(mLove){
|
||||
holder.vb.loveItem.isVisible = false
|
||||
}
|
||||
|
||||
val mD5Hash = Utils.getMD5Hash(wallpaper.preview)
|
||||
|
||||
val realUrl = Utils.getRealUrl(wallpaper.preview)
|
||||
|
||||
var url = wallpaper.preview
|
||||
Glide.with(context).load(url)
|
||||
.listener(object : RequestListener<Drawable> {
|
||||
override fun onLoadFailed(
|
||||
e: GlideException?,
|
||||
model: Any?,
|
||||
target: Target<Drawable>,
|
||||
isFirstResource: Boolean
|
||||
): Boolean {
|
||||
Log.d("------------tt", "--------onLoadFailed" + e?.message)
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
override fun onResourceReady(
|
||||
resource: Drawable,
|
||||
model: Any,
|
||||
target: Target<Drawable>?,
|
||||
dataSource: DataSource,
|
||||
isFirstResource: Boolean
|
||||
): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
})
|
||||
.placeholder(R.mipmap.icon)
|
||||
.error(R.mipmap.icon).into(holder.vb.previewIm)
|
||||
|
||||
holder.vb.imLove.isSelected = wallpaper.love
|
||||
|
||||
holder.vb.imLove.setOnClickListener {
|
||||
|
||||
holder.vb.imLove.isSelected = !holder.vb.imLove.isSelected
|
||||
wallpaper.love = holder.vb.imLove.isSelected
|
||||
|
||||
val boxBean = ObjectBox.getBoxBean()
|
||||
boxBean.put(wallpaper)
|
||||
action?.invoke()
|
||||
|
||||
|
||||
}
|
||||
val color = context.getColor(loveColor[position % 4])
|
||||
holder.vb.loveItem.setBackgroundColor(context.getColor(loveColor[position % 4]))
|
||||
|
||||
holder.vb.root.setOnClickListener {
|
||||
context.startActivity(Intent(context, WallPaperActivity::class.java).apply {
|
||||
putExtra(MyWallpaper.KEY_COLOR, color)
|
||||
putExtra(MyWallpaper.KEY_WALLPAPER, wallpaper.id)
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
inner class MyVh(var vb: ItemMyAdapterBinding) : RecyclerView.ViewHolder(vb.root) {
|
||||
|
||||
}
|
||||
|
||||
inner class Diff(private var oldItems: List<Wallpaper>, private var newItems: List<Wallpaper>) :
|
||||
DiffUtil.Callback() {
|
||||
|
||||
|
||||
override fun getOldListSize(): Int = oldItems.size
|
||||
|
||||
override fun getNewListSize(): Int = newItems.size
|
||||
|
||||
override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean =
|
||||
oldItems[oldItemPosition].id == newItems[newItemPosition].id
|
||||
|
||||
override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean =
|
||||
oldItems[oldItemPosition].love == newItems[newItemPosition].love
|
||||
|
||||
}
|
||||
}
|
||||
68
app/src/main/java/com/nature/free/test/other/MyItemSpace.kt
Normal file
@ -0,0 +1,68 @@
|
||||
package com.nature.free.test.other
|
||||
|
||||
import android.graphics.Rect
|
||||
import android.view.View
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
|
||||
|
||||
class MyItemSpace (private var horizontalSpacing:Int,private var verticalSpacing:Int,private var extraSpacing:Int): RecyclerView.ItemDecoration() {
|
||||
// item占满一行时,该item是否需要左右间距
|
||||
var needVerticalSpacingInSingleLine = true
|
||||
var needHorizontalSpacingInSingleLine = true
|
||||
|
||||
|
||||
override fun getItemOffsets(
|
||||
outRect: Rect,
|
||||
view: View,
|
||||
parent: RecyclerView,
|
||||
state: RecyclerView.State
|
||||
) {
|
||||
val position = parent.getChildAdapterPosition(view)
|
||||
var spanCount = 1
|
||||
var spanSize = 1
|
||||
var spanIndex = 0
|
||||
|
||||
parent.layoutManager?.run {
|
||||
when (this) {
|
||||
// is StaggeredGridLayoutManager -> {
|
||||
// spanCount = this.spanCount
|
||||
// (view.layoutParams as StaggeredGridLayoutManager.LayoutParams)?.run {
|
||||
// if (isFullSpan) spanSize = spanCount
|
||||
// spanIndex = this.spanIndex
|
||||
// }
|
||||
// }
|
||||
|
||||
is GridLayoutManager -> {
|
||||
spanCount = this.spanCount
|
||||
spanSize = this.spanSizeLookup.getSpanSize(position)
|
||||
spanIndex = (view.layoutParams as GridLayoutManager.LayoutParams).spanIndex
|
||||
}
|
||||
|
||||
// is LinearLayoutManager -> {
|
||||
// outRect.left = verticalSpacing
|
||||
// outRect.right = verticalSpacing
|
||||
// outRect.bottom = horizontalSpacing
|
||||
// return
|
||||
// }
|
||||
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
|
||||
if (spanSize == spanCount) {
|
||||
outRect.left =
|
||||
if (needVerticalSpacingInSingleLine) verticalSpacing + extraSpacing else 0
|
||||
outRect.right =
|
||||
if (needVerticalSpacingInSingleLine) verticalSpacing + extraSpacing else 0
|
||||
outRect.bottom = if (needHorizontalSpacingInSingleLine) horizontalSpacing else 0
|
||||
} else {
|
||||
val itemAllSpacing = (verticalSpacing * (spanCount + 1) + extraSpacing * 2) / spanCount
|
||||
val left = verticalSpacing * (spanIndex + 1) - itemAllSpacing * spanIndex + extraSpacing
|
||||
val right = itemAllSpacing - left
|
||||
outRect.left = left
|
||||
outRect.right = right
|
||||
outRect.bottom = horizontalSpacing
|
||||
}
|
||||
}
|
||||
}
|
||||
8
app/src/main/res/anim/in_from_right.xml
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shareInterpolator="false">
|
||||
<translate
|
||||
android:duration="1400"
|
||||
android:fromXDelta="100%"
|
||||
android:fromYDelta="0%" />
|
||||
</set>
|
||||
8
app/src/main/res/anim/out_from_left.xml
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shareInterpolator="false">
|
||||
<translate
|
||||
android:duration="1400"
|
||||
android:fromXDelta="0%"
|
||||
android:toXDelta="-100%"/>
|
||||
</set>
|
||||
30
app/src/main/res/drawable-v24/ic_launcher_foreground.xml
Normal file
@ -0,0 +1,30 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:aapt="http://schemas.android.com/aapt"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="108"
|
||||
android:viewportHeight="108">
|
||||
<path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
|
||||
<aapt:attr name="android:fillColor">
|
||||
<gradient
|
||||
android:endX="85.84757"
|
||||
android:endY="92.4963"
|
||||
android:startX="42.9492"
|
||||
android:startY="49.59793"
|
||||
android:type="linear">
|
||||
<item
|
||||
android:color="#44000000"
|
||||
android:offset="0.0" />
|
||||
<item
|
||||
android:color="#00000000"
|
||||
android:offset="1.0" />
|
||||
</gradient>
|
||||
</aapt:attr>
|
||||
</path>
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:fillType="nonZero"
|
||||
android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
|
||||
android:strokeWidth="1"
|
||||
android:strokeColor="#00000000" />
|
||||
</vector>
|
||||
12
app/src/main/res/drawable/back.xml
Normal file
@ -0,0 +1,12 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="64dp"
|
||||
android:height="64dp"
|
||||
android:viewportWidth="1024"
|
||||
android:viewportHeight="1024">
|
||||
<path
|
||||
android:pathData="M444.5,300.9a42.7,42.7 0,1 0,-60.4 -60.4l-241.3,241.4a42.5,42.5 0,0 0,0 60.4l241.3,241.3a42.7,42.7 0,1 0,60.4 -60.3l-211.2,-211.2 211.2,-211.2z"
|
||||
android:fillColor="@color/text_color"/>
|
||||
<path
|
||||
android:pathData="M170.7,512a42.7,42.7 0,0 1,42.7 -42.7h640a42.7,42.7 0,1 1,0 85.3H213.3a42.7,42.7 0,0 1,-42.7 -42.7z"
|
||||
android:fillColor="@color/text_color"/>
|
||||
</vector>
|
||||
12
app/src/main/res/drawable/check.xml
Normal file
@ -0,0 +1,12 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="64dp"
|
||||
android:height="64dp"
|
||||
android:viewportWidth="1024"
|
||||
android:viewportHeight="1024">
|
||||
<path
|
||||
android:pathData="M515,512.6m-463.1,0a463.1,463.1 0,1 0,926.2 0,463.1 463.1,0 1,0 -926.2,0Z"
|
||||
android:fillColor="@color/love_gray"/>
|
||||
<path
|
||||
android:pathData="M454,714.6c-22.2,0 -43.7,-9.3 -59,-25.4l-114.3,-121.1c-20.8,-22.1 -19.9,-57 2.3,-77.8 22.1,-20.8 57,-19.9 77.8,2.3L453.6,590.8l208.5,-228.9c20.5,-22.5 55.3,-24.1 77.8,-3.6 22.5,20.5 24.1,55.3 3.6,77.8l-229.6,252a81.3,81.3 0,0 1,-59.2 26.5c-0.3,0.1 -0.5,0.1 -0.7,0.1z"
|
||||
android:fillColor="@color/main_bg"/>
|
||||
</vector>
|
||||
12
app/src/main/res/drawable/check_on.xml
Normal file
@ -0,0 +1,12 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="64dp"
|
||||
android:height="64dp"
|
||||
android:viewportWidth="1024"
|
||||
android:viewportHeight="1024">
|
||||
<path
|
||||
android:pathData="M515,512.6m-463.1,0a463.1,463.1 0,1 0,926.2 0,463.1 463.1,0 1,0 -926.2,0Z"
|
||||
android:fillColor="@color/im_right"/>
|
||||
<path
|
||||
android:pathData="M454,714.6c-22.2,0 -43.7,-9.3 -59,-25.4l-114.3,-121.1c-20.8,-22.1 -19.9,-57 2.3,-77.8 22.1,-20.8 57,-19.9 77.8,2.3L453.6,590.8l208.5,-228.9c20.5,-22.5 55.3,-24.1 77.8,-3.6 22.5,20.5 24.1,55.3 3.6,77.8l-229.6,252a81.3,81.3 0,0 1,-59.2 26.5c-0.3,0.1 -0.5,0.1 -0.7,0.1z"
|
||||
android:fillColor="@color/white"/>
|
||||
</vector>
|
||||
7
app/src/main/res/drawable/dailog_btn_shape.xml
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
|
||||
<corners android:radius="10dp"/>
|
||||
<solid android:color="@color/text_color"/>
|
||||
</shape>
|
||||
7
app/src/main/res/drawable/dailog_shape.xml
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
|
||||
<corners android:radius="10dp"/>
|
||||
<solid android:color="@color/main_bg"/>
|
||||
</shape>
|
||||
9
app/src/main/res/drawable/ic_cateogry.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="64dp"
|
||||
android:height="64dp"
|
||||
android:viewportWidth="1024"
|
||||
android:viewportHeight="1024">
|
||||
<path
|
||||
android:fillColor="@color/love_gray"
|
||||
android:pathData="M512,477.9c140.8,-128 213.3,-192 213.3,-277.3C725.3,136.5 674.1,85.3 605.9,85.3c-38.4,0 -72.5,17.1 -93.9,42.7 -25.6,-29.9 -59.7,-42.7 -98.1,-42.7C349.9,85.3 298.7,136.5 298.7,200.5c0,81.1 72.5,149.3 213.3,277.3m-34.1,34.1c-128,-140.8 -192,-213.3 -277.3,-213.3C136.5,298.7 85.3,349.9 85.3,413.9c0,38.4 17.1,72.5 42.7,93.9 -29.9,25.6 -42.7,59.7 -42.7,98.1C85.3,674.1 136.5,725.3 204.8,725.3c76.8,0 145.1,-72.5 273.1,-213.3m68.3,0c128,140.8 192,213.3 277.3,213.3 64,0 115.2,-51.2 115.2,-119.5 0,-38.4 -17.1,-72.5 -42.7,-93.9 29.9,-25.6 42.7,-59.7 42.7,-98.1C938.7,349.9 887.5,298.7 819.2,298.7c-76.8,0 -145.1,72.5 -273.1,213.3m-34.1,34.1c-140.8,128 -213.3,192 -213.3,277.3C298.7,887.5 349.9,938.7 418.1,938.7c38.4,0 72.5,-17.1 93.9,-42.7 25.6,29.9 59.7,42.7 98.1,42.7 64,0 115.2,-51.2 115.2,-119.5 0,-76.8 -72.5,-145.1 -213.3,-273.1z"/>
|
||||
</vector>
|
||||
9
app/src/main/res/drawable/ic_cateogry_on.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="64dp"
|
||||
android:height="64dp"
|
||||
android:viewportWidth="1024"
|
||||
android:viewportHeight="1024">
|
||||
<path
|
||||
android:fillColor="@color/text_color"
|
||||
android:pathData="M512,477.9c140.8,-128 213.3,-192 213.3,-277.3C725.3,136.5 674.1,85.3 605.9,85.3c-38.4,0 -72.5,17.1 -93.9,42.7 -25.6,-29.9 -59.7,-42.7 -98.1,-42.7C349.9,85.3 298.7,136.5 298.7,200.5c0,81.1 72.5,149.3 213.3,277.3m-34.1,34.1c-128,-140.8 -192,-213.3 -277.3,-213.3C136.5,298.7 85.3,349.9 85.3,413.9c0,38.4 17.1,72.5 42.7,93.9 -29.9,25.6 -42.7,59.7 -42.7,98.1C85.3,674.1 136.5,725.3 204.8,725.3c76.8,0 145.1,-72.5 273.1,-213.3m68.3,0c128,140.8 192,213.3 277.3,213.3 64,0 115.2,-51.2 115.2,-119.5 0,-38.4 -17.1,-72.5 -42.7,-93.9 29.9,-25.6 42.7,-59.7 42.7,-98.1C938.7,349.9 887.5,298.7 819.2,298.7c-76.8,0 -145.1,72.5 -273.1,213.3m-34.1,34.1c-140.8,128 -213.3,192 -213.3,277.3C298.7,887.5 349.9,938.7 418.1,938.7c38.4,0 72.5,-17.1 93.9,-42.7 25.6,29.9 59.7,42.7 98.1,42.7 64,0 115.2,-51.2 115.2,-119.5 0,-76.8 -72.5,-145.1 -213.3,-273.1z"/>
|
||||
</vector>
|
||||
9
app/src/main/res/drawable/ic_download.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="144dp"
|
||||
android:height="144dp"
|
||||
android:viewportWidth="1024"
|
||||
android:viewportHeight="1024">
|
||||
<path
|
||||
android:pathData="M441.1,354.7l20,-186.8c2.7,-25.6 24.7,-45 50.9,-45 26.2,0 48.2,19.4 50.9,45l20,186.8a61.4,61.4 0,0 0,61.1 54.9h85.4c15.6,0 28.3,13.1 28.3,29.2 0,7.5 -2.8,14.7 -7.8,20.1L542.8,682.7a41.7,41.7 0,0 1,-61.6 0L274.1,458.9a29.8,29.8 0,0 1,1 -41.2c5.3,-5.2 12.3,-8 19.6,-8h85.4a61.4,61.4 0,0 0,61.1 -54.9zM214.7,654.1l23.3,93.1a41,41 0,0 0,39.7 31H746.3a41,41 0,0 0,39.7 -31l23.3,-93.1A52.5,52.5 0,0 1,860.2 614.4a41,41 0,0 1,41 41v143.4a102.4,102.4 0,0 1,-102.4 102.4H225.3a102.4,102.4 0,0 1,-102.4 -102.4V655.4a41,41 0,0 1,41 -41c24.1,0 45.1,16.4 50.9,39.7z"
|
||||
android:fillColor="#ffffff"/>
|
||||
</vector>
|
||||
12
app/src/main/res/drawable/ic_home.xml
Normal file
@ -0,0 +1,12 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="35dp"
|
||||
android:height="35dp"
|
||||
android:viewportWidth="1064"
|
||||
android:viewportHeight="1024">
|
||||
<path
|
||||
android:pathData="M395.4,102.4c66.1,-95.5 208,-95.5 274.1,0l78.1,112.9c8.3,11.9 20.5,20.8 34.7,24.9l132.5,38.7c111.8,32.6 156.5,167 84.7,259.4l-84.3,108.5c-8.9,11.5 -13.5,25.5 -13.1,39.8l3.8,136.8c3.3,116.7 -112.4,198.8 -221.8,160.3l-130.2,-45.9c-13.9,-4.9 -29.2,-4.9 -43.1,0l-130.2,45.9c-109.4,38.5 -225,-43.6 -221.8,-160.3l3.8,-136.8c0.4,-14.3 -4.2,-28.4 -13.1,-39.9l-84.3,-108.5c-71.8,-92.4 -27,-226.8 84.8,-259.4l132.5,-38.7c14.2,-4.1 26.4,-13 34.6,-24.9L395.4,102.4zM585.3,160.6a64.5,64.5 0,0 0,-105.7 0L401.5,273.5a166.2,166.2 0,0 1,-90.1 65l-132.5,38.7a62.4,62.4 0,0 0,-32.6 98.3l84.3,108.5c23.3,30.1 35.6,67.3 34.6,105.5l-3.8,136.8c-1.2,43.4 42.4,76 85.4,60.9l130.2,-45.9a167.3,167.3 0,0 1,111.2 0l130.2,45.9c43,15.2 86.6,-17.4 85.4,-60.9l-3.8,-136.8c-1.1,-38.1 11.2,-75.4 34.6,-105.5l84.3,-108.5a62.4,62.4 0,0 0,-32.6 -98.3l-132.5,-38.7a166.2,166.2 0,0 1,-90.1 -65L585.3,160.6z"
|
||||
android:fillColor="@color/love_gray"/>
|
||||
<path
|
||||
android:pathData="M709.8,412.3a51.2,51.2 0,0 1,4.3 72.3l-163.8,184.3a51.2,51.2 0,0 1,-74.5 2.2l-102.4,-102.4a51.2,51.2 0,0 1,72.4 -72.4l64,64 127.8,-143.8a51.2,51.2 0,0 1,72.3 -4.2z"
|
||||
android:fillColor="@color/love_gray"/>
|
||||
</vector>
|
||||
12
app/src/main/res/drawable/ic_home_on.xml
Normal file
@ -0,0 +1,12 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="35dp"
|
||||
android:height="35dp"
|
||||
android:viewportWidth="1064"
|
||||
android:viewportHeight="1024">
|
||||
<path
|
||||
android:pathData="M395.4,102.4c66.1,-95.5 208,-95.5 274.1,0l78.1,112.9c8.3,11.9 20.5,20.8 34.7,24.9l132.5,38.7c111.8,32.6 156.5,167 84.7,259.4l-84.3,108.5c-8.9,11.5 -13.5,25.5 -13.1,39.8l3.8,136.8c3.3,116.7 -112.4,198.8 -221.8,160.3l-130.2,-45.9c-13.9,-4.9 -29.2,-4.9 -43.1,0l-130.2,45.9c-109.4,38.5 -225,-43.6 -221.8,-160.3l3.8,-136.8c0.4,-14.3 -4.2,-28.4 -13.1,-39.9l-84.3,-108.5c-71.8,-92.4 -27,-226.8 84.8,-259.4l132.5,-38.7c14.2,-4.1 26.4,-13 34.6,-24.9L395.4,102.4zM585.3,160.6a64.5,64.5 0,0 0,-105.7 0L401.5,273.5a166.2,166.2 0,0 1,-90.1 65l-132.5,38.7a62.4,62.4 0,0 0,-32.6 98.3l84.3,108.5c23.3,30.1 35.6,67.3 34.6,105.5l-3.8,136.8c-1.2,43.4 42.4,76 85.4,60.9l130.2,-45.9a167.3,167.3 0,0 1,111.2 0l130.2,45.9c43,15.2 86.6,-17.4 85.4,-60.9l-3.8,-136.8c-1.1,-38.1 11.2,-75.4 34.6,-105.5l84.3,-108.5a62.4,62.4 0,0 0,-32.6 -98.3l-132.5,-38.7a166.2,166.2 0,0 1,-90.1 -65L585.3,160.6z"
|
||||
android:fillColor="@color/text_color"/>
|
||||
<path
|
||||
android:pathData="M709.8,412.3a51.2,51.2 0,0 1,4.3 72.3l-163.8,184.3a51.2,51.2 0,0 1,-74.5 2.2l-102.4,-102.4a51.2,51.2 0,0 1,72.4 -72.4l64,64 127.8,-143.8a51.2,51.2 0,0 1,72.3 -4.2z"
|
||||
android:fillColor="@color/text_color"/>
|
||||
</vector>
|
||||
170
app/src/main/res/drawable/ic_launcher_background.xml
Normal file
@ -0,0 +1,170 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="108"
|
||||
android:viewportHeight="108">
|
||||
<path
|
||||
android:fillColor="#3DDC84"
|
||||
android:pathData="M0,0h108v108h-108z" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M9,0L9,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,0L19,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M29,0L29,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M39,0L39,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M49,0L49,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M59,0L59,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M69,0L69,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M79,0L79,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M89,0L89,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M99,0L99,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,9L108,9"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,19L108,19"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,29L108,29"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,39L108,39"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,49L108,49"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,59L108,59"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,69L108,69"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,79L108,79"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,89L108,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,99L108,99"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,29L89,29"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,39L89,39"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,49L89,49"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,59L89,59"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,69L89,69"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,79L89,79"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M29,19L29,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M39,19L39,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M49,19L49,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M59,19L59,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M69,19L69,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M79,19L79,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
</vector>
|
||||
9
app/src/main/res/drawable/ic_love.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="64dp"
|
||||
android:height="64dp"
|
||||
android:viewportWidth="1024"
|
||||
android:viewportHeight="1024">
|
||||
<path
|
||||
android:fillColor="@color/love_gray"
|
||||
android:pathData="M538.5,887.9l-10.3,-30.3 -0.3,0.1 10.7,30.2zM485.5,887.9l10.7,-30.2 -0.3,-0.1 -10.3,30.3zM512,227.8l-25.7,19.1a32,32 0,0 0,51.4 0L512,227.8zM527.8,857.7a52.9,52.9 0,0 1,-15.8 2,52.9 52.9,0 0,1 -15.8,-2l-21.3,60.3c11.8,4.1 25.2,5.7 37.1,5.7s25.3,-1.5 37.1,-5.7l-21.3,-60.3zM495.9,857.6c-57.3,-19.5 -153,-71.5 -233.9,-154.5 -80.6,-82.6 -144.6,-193.7 -144.6,-332.4h-64c0,160 74.2,286.3 162.8,377.1 88.2,90.4 192.6,147.6 259.1,170.3l20.7,-60.6zM117.3,370.8c0,-114.3 92.1,-206.5 205.2,-206.5v-64c-148.8,0 -269.2,121.2 -269.2,270.5h64zM322.6,164.3c67,0 126.4,32.3 163.8,82.6l51.4,-38.1A267.3,267.3 0,0 0,322.6 100.3v64zM537.7,246.9A203.9,203.9 0,0 1,701.4 164.3v-64a267.9,267.9 0,0 0,-215.1 108.5l51.4,38.1zM701.4,164.3c113.2,0 205.2,92.2 205.2,206.5h64c0,-149.3 -120.4,-270.5 -269.2,-270.5v64zM906.7,370.8c0,138.7 -64,249.8 -144.6,332.4 -80.9,82.9 -176.6,134.9 -233.9,154.5l20.7,60.6c66.5,-22.7 170.9,-80 259.1,-170.3 88.6,-90.8 162.8,-217.1 162.8,-377.1h-64z"/>
|
||||
</vector>
|
||||
9
app/src/main/res/drawable/ic_love_on.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="64dp"
|
||||
android:height="64dp"
|
||||
android:viewportWidth="1024"
|
||||
android:viewportHeight="1024">
|
||||
<path
|
||||
android:fillColor="@color/text_color"
|
||||
android:pathData="M538.5,887.9l-10.3,-30.3 -0.3,0.1 10.7,30.2zM485.5,887.9l10.7,-30.2 -0.3,-0.1 -10.3,30.3zM512,227.8l-25.7,19.1a32,32 0,0 0,51.4 0L512,227.8zM527.8,857.7a52.9,52.9 0,0 1,-15.8 2,52.9 52.9,0 0,1 -15.8,-2l-21.3,60.3c11.8,4.1 25.2,5.7 37.1,5.7s25.3,-1.5 37.1,-5.7l-21.3,-60.3zM495.9,857.6c-57.3,-19.5 -153,-71.5 -233.9,-154.5 -80.6,-82.6 -144.6,-193.7 -144.6,-332.4h-64c0,160 74.2,286.3 162.8,377.1 88.2,90.4 192.6,147.6 259.1,170.3l20.7,-60.6zM117.3,370.8c0,-114.3 92.1,-206.5 205.2,-206.5v-64c-148.8,0 -269.2,121.2 -269.2,270.5h64zM322.6,164.3c67,0 126.4,32.3 163.8,82.6l51.4,-38.1A267.3,267.3 0,0 0,322.6 100.3v64zM537.7,246.9A203.9,203.9 0,0 1,701.4 164.3v-64a267.9,267.9 0,0 0,-215.1 108.5l51.4,38.1zM701.4,164.3c113.2,0 205.2,92.2 205.2,206.5h64c0,-149.3 -120.4,-270.5 -269.2,-270.5v64zM906.7,370.8c0,138.7 -64,249.8 -144.6,332.4 -80.9,82.9 -176.6,134.9 -233.9,154.5l20.7,60.6c66.5,-22.7 170.9,-80 259.1,-170.3 88.6,-90.8 162.8,-217.1 162.8,-377.1h-64z"/>
|
||||
</vector>
|
||||
9
app/src/main/res/drawable/ic_right.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="64.1dp"
|
||||
android:height="64dp"
|
||||
android:viewportWidth="1025"
|
||||
android:viewportHeight="1024">
|
||||
<path
|
||||
android:pathData="M512.1,64.7c-247.2,0 -447.6,200.4 -447.6,447.6s200.4,447.6 447.6,447.6c247.2,0 447.6,-200.4 447.6,-447.6C959.7,265.1 759.3,64.7 512.1,64.7zM524,665.6l-71.6,70.4 -71.6,-70.4 0,-0L213.9,501.2l71.6,-70.4 167,164.3L738.8,313.5l71.6,70.4L524,665.6 524,665.6z"
|
||||
android:fillColor="#CCCCCC"/>
|
||||
</vector>
|
||||
9
app/src/main/res/drawable/ic_right_on.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="64.1dp"
|
||||
android:height="64dp"
|
||||
android:viewportWidth="1025"
|
||||
android:viewportHeight="1024">
|
||||
<path
|
||||
android:pathData="M512.1,64.7c-247.2,0 -447.6,200.4 -447.6,447.6s200.4,447.6 447.6,447.6c247.2,0 447.6,-200.4 447.6,-447.6C959.7,265.1 759.3,64.7 512.1,64.7zM524,665.6l-71.6,70.4 -71.6,-70.4 0,-0L213.9,501.2l71.6,-70.4 167,164.3L738.8,313.5l71.6,70.4L524,665.6 524,665.6z"
|
||||
android:fillColor="@color/im_right"/>
|
||||
</vector>
|
||||
9
app/src/main/res/drawable/ic_set_wallpaper.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="144dp"
|
||||
android:height="144dp"
|
||||
android:viewportWidth="1024"
|
||||
android:viewportHeight="1024">
|
||||
<path
|
||||
android:pathData="M245.3,128C180.9,128 128,180.9 128,245.3v21.3a32,32 0,1 0,64 0v-21.3C192,215.5 215.5,192 245.3,192h21.3a32,32 0,1 0,0 -64h-21.3zM373.3,128a32,32 0,1 0,0 64h85.3a32,32 0,1 0,0 -64h-85.3zM565.3,128a32,32 0,1 0,0 64h85.3a32,32 0,1 0,0 -64h-85.3zM757.3,128a32,32 0,1 0,0 64h21.3c29.8,0 53.3,23.5 53.3,53.3v21.3a32,32 0,1 0,64 0v-21.3C896,180.9 843.1,128 778.7,128h-21.3zM650.7,277.3c-29.3,0 -55.4,12.2 -71.9,30.7C562.2,326.7 554.7,350.2 554.7,373.3c0,23.1 7.6,46.7 24.1,65.3C595.3,457.2 621.3,469.3 650.7,469.3s55.4,-12.2 71.9,-30.7C739.1,420 746.7,396.4 746.7,373.3c0,-23.1 -7.6,-46.7 -24.1,-65.3C706,289.5 680,277.3 650.7,277.3zM159.5,340.9A32,32 0,0 0,128 373.3v85.3a32,32 0,1 0,64 0v-85.3a32,32 0,0 0,-32.5 -32.4zM863.5,340.9A32,32 0,0 0,832 373.3v85.3a32,32 0,1 0,64 0v-85.3a32,32 0,0 0,-32.5 -32.4zM650.7,341.3c13.3,0 19.3,3.8 24.1,9.3 4.8,5.4 7.9,13.9 7.9,22.7 0,8.9 -3.1,17.3 -7.9,22.7 -4.8,5.4 -10.8,9.3 -24.1,9.3s-19.3,-3.8 -24.1,-9.3c-4.8,-5.4 -7.9,-13.9 -7.9,-22.7 0,-8.9 3.1,-17.3 7.9,-22.7 4.8,-5.4 10.8,-9.3 24.1,-9.3zM512,512.1a86,86 0,0 0,-60 24.1L192.9,786.9C192.4,784.2 192,781.5 192,778.7v-21.3a32,32 0,0 0,-32.5 -32.4A32,32 0,0 0,128 757.3v21.3c0,64.4 52.9,117.3 117.3,117.3h21.3a32,32 0,1 0,0 -64h-21.3c-2.2,0 -4.3,-0.4 -6.4,-0.6l257.6,-249.2a21.9,21.9 0,0 1,31.1 0L785.1,831.4c-2.1,0.2 -4.2,0.6 -6.4,0.6h-21.3a32,32 0,1 0,0 64h21.3c64.4,0 117.3,-52.9 117.3,-117.3v-21.3a32,32 0,0 0,-32.5 -32.4A32,32 0,0 0,832 757.3v21.3c0,2.8 -0.4,5.5 -0.9,8.3L572.1,536.2A86.1,86.1 0,0 0,512 512.1zM159.5,532.9A32,32 0,0 0,128 565.3v85.3a32,32 0,1 0,64 0v-85.3a32,32 0,0 0,-32.5 -32.4zM863.5,532.9A32,32 0,0 0,832 565.3v85.3a32,32 0,1 0,64 0v-85.3a32,32 0,0 0,-32.5 -32.4zM373.3,832a32,32 0,1 0,0 64h85.3a32,32 0,1 0,0 -64h-85.3zM565.3,832a32,32 0,1 0,0 64h85.3a32,32 0,1 0,0 -64h-85.3z"
|
||||
android:fillColor="#ffffff"/>
|
||||
</vector>
|
||||
9
app/src/main/res/drawable/ic_wh.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="64dp"
|
||||
android:height="64dp"
|
||||
android:viewportWidth="1024"
|
||||
android:viewportHeight="1024">
|
||||
<path
|
||||
android:pathData="M148.8,921h726.5c25.3,0 45.8,-20.5 45.8,-45.8L921,148.8c0,-25.3 -20.5,-45.8 -45.8,-45.8L148.8,103c-25.3,0 -45.8,20.5 -45.8,45.8v726.5c0,25.3 20.5,45.8 45.8,45.8zM157.9,171.5c0,-7.7 6.3,-13.7 13.7,-13.7h680.7c7.7,0 13.7,6.3 13.7,13.7v680.7c0,7.7 -6.3,13.7 -13.7,13.7L171.5,865.8c-7.7,0 -13.7,-6.3 -13.7,-13.7L157.9,171.5zM457.1,241.2c0,-15.1 -12.2,-27.6 -27.6,-27.6L241.2,213.6c-15.1,0 -27.6,12.2 -27.6,27.6L213.6,429.5c0,15.1 12.2,27.6 27.6,27.6 15.1,0 27.6,-12.2 27.6,-27.6L268.8,268.5L429.5,268.5c15.4,0 27.6,-12.2 27.6,-27.3zM566.9,791.9c0,15.1 12.2,27.6 27.6,27.6h188.6c15.1,0 27.6,-12.2 27.6,-27.6v-188.6c0,-15.1 -12.2,-27.6 -27.6,-27.6 -15.1,0 -27.6,12.2 -27.6,27.6v161L594.5,764.3c-15.4,0.3 -27.6,12.5 -27.6,27.6zM566.9,241.2c0,-15.1 12.2,-27.6 27.6,-27.6h188.6c15.1,0 27.6,12.2 27.6,27.6L810.7,429.5c0,15.1 -12.2,27.6 -27.6,27.6 -15.1,0 -27.6,-12.2 -27.6,-27.6L755.5,268.5L594.5,268.5c-15.4,0 -27.6,-12.2 -27.6,-27.3zM457.1,791.9c0,15.1 -12.2,27.6 -27.6,27.6L241.2,819.5c-15.1,0 -27.6,-12.2 -27.6,-27.6v-188.6c0,-15.1 12.2,-27.6 27.6,-27.6 15.1,0 27.6,12.2 27.6,27.6v161L429.5,764.3c15.4,0.3 27.6,12.5 27.6,27.6zM457.1,791.9"
|
||||
android:fillColor="@color/text_color"/>
|
||||
</vector>
|
||||
18
app/src/main/res/drawable/icclose.xml
Normal file
@ -0,0 +1,18 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="64dp"
|
||||
android:height="64dp"
|
||||
android:viewportWidth="1024"
|
||||
android:viewportHeight="1024">
|
||||
<path
|
||||
android:pathData="M499.2,951.5c-234.7,0 -426.7,-192 -426.7,-426.7 0,-17.1 0,-38.4 4.3,-55.5 4.3,-12.8 12.8,-17.1 25.6,-17.1 12.8,4.3 17.1,12.8 17.1,25.6 -4.3,12.8 -4.3,29.9 -4.3,46.9 0,213.3 170.7,384 384,384s384,-170.7 384,-384 -170.7,-384 -384,-384c-25.6,0 -46.9,4.3 -72.5,8.5 -12.8,0 -21.3,-4.3 -25.6,-17.1 0,-12.8 4.3,-21.3 17.1,-25.6 25.6,-4.3 51.2,-8.5 81.1,-8.5 234.7,0 426.7,192 426.7,426.7s-192,426.7 -426.7,426.7z"
|
||||
android:fillColor="@color/main_bg"/>
|
||||
<path
|
||||
android:pathData="M119.5,418.1h-8.5c-8.5,-4.3 -17.1,-17.1 -12.8,-29.9 42.7,-119.5 128,-213.3 238.9,-256 12.8,-4.3 21.3,0 25.6,12.8 4.3,12.8 0,21.3 -12.8,25.6C256,213.3 174.9,298.7 140.8,405.3c-4.3,8.5 -12.8,12.8 -21.3,12.8z"
|
||||
android:fillColor="@color/main_bg"/>
|
||||
<path
|
||||
android:pathData="M392.5,657.1c-4.3,0 -12.8,0 -17.1,-4.3 -8.5,-8.5 -8.5,-21.3 0,-29.9l213.3,-213.3c8.5,-8.5 21.3,-8.5 29.9,0s8.5,21.3 0,29.9l-213.3,213.3c0,4.3 -8.5,4.3 -12.8,4.3z"
|
||||
android:fillColor="@color/main_bg"/>
|
||||
<path
|
||||
android:pathData="M605.9,657.1c-4.3,0 -12.8,0 -17.1,-4.3l-213.3,-213.3c-8.5,-8.5 -8.5,-21.3 0,-29.9s21.3,-8.5 29.9,0l213.3,213.3c8.5,8.5 8.5,21.3 0,29.9 0,4.3 -8.5,4.3 -12.8,4.3z"
|
||||
android:fillColor="@color/main_bg"/>
|
||||
</vector>
|
||||
9
app/src/main/res/drawable/love.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="1024"
|
||||
android:viewportHeight="1024">
|
||||
<path
|
||||
android:pathData="M682.7,113.8c157.1,0 284.4,127.3 284.4,284.4 0,205.3 -142,371.7 -426,499.3a71.1,71.1 0,0 1,-58.3 0C198.9,769.9 56.9,603.5 56.9,398.2 56.9,241.1 184.2,113.8 341.3,113.8c64,0 123.1,21.2 170.7,56.9A283,283 0,0 1,682.7 113.8z"
|
||||
android:fillColor="@color/love_gray"/>
|
||||
</vector>
|
||||
9
app/src/main/res/drawable/love_red.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="1024"
|
||||
android:viewportHeight="1024">
|
||||
<path
|
||||
android:pathData="M682.7,113.8c157.1,0 284.4,127.3 284.4,284.4 0,205.3 -142,371.7 -426,499.3a71.1,71.1 0,0 1,-58.3 0C198.9,769.9 56.9,603.5 56.9,398.2 56.9,241.1 184.2,113.8 341.3,113.8c64,0 123.1,21.2 170.7,56.9A283,283 0,0 1,682.7 113.8z"
|
||||
android:fillColor="@color/love_red"/>
|
||||
</vector>
|
||||
6
app/src/main/res/drawable/selector_iccategory.xml
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:drawable="@drawable/ic_cateogry_on" android:state_selected="true"/>
|
||||
<item android:drawable="@drawable/ic_cateogry"/>
|
||||
|
||||
</selector>
|
||||
6
app/src/main/res/drawable/selector_ichome.xml
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:drawable="@drawable/ic_home_on" android:state_selected="true"/>
|
||||
<item android:drawable="@drawable/ic_home"/>
|
||||
|
||||
</selector>
|
||||
6
app/src/main/res/drawable/selector_iclove.xml
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:drawable="@drawable/ic_love_on" android:state_selected="true"/>
|
||||
<item android:drawable="@drawable/ic_love"/>
|
||||
|
||||
</selector>
|
||||
6
app/src/main/res/drawable/selector_love.xml
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:drawable="@drawable/love_red" android:state_selected="true"/>
|
||||
<item android:drawable="@drawable/love"/>
|
||||
|
||||
</selector>
|
||||
6
app/src/main/res/drawable/selector_right.xml
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:drawable="@drawable/check_on" android:state_selected="true"/>
|
||||
<item android:drawable="@drawable/check"/>
|
||||
|
||||
</selector>
|
||||
34
app/src/main/res/layout/activity_info.xml
Normal file
@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@color/main_bg"
|
||||
tools:context=".InfoActivity">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/back"
|
||||
android:layout_width="34dp"
|
||||
android:layout_height="34dp"
|
||||
android:layout_alignTop="@id/tv_name"
|
||||
android:layout_alignBottom="@id/tv_name"
|
||||
android:layout_marginStart="12dp"
|
||||
android:src="@drawable/back" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:padding="12dp"
|
||||
android:textColor="@color/text_color"
|
||||
android:textSize="17sp" />
|
||||
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/recycler"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@id/tv_name" />
|
||||
</RelativeLayout>
|
||||
35
app/src/main/res/layout/activity_main.xml
Normal file
@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@color/main_bg"
|
||||
tools:context=".MainActivity">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvTitle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:padding="10dp"
|
||||
android:text="@string/app_name"
|
||||
android:textColor="@color/text_color"
|
||||
android:textSize="17sp" />
|
||||
|
||||
<com.google.android.material.tabs.TabLayout
|
||||
android:id="@+id/tab"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="60dp"
|
||||
android:layout_below="@id/tvTitle"
|
||||
android:background="@color/main_bg"
|
||||
android:layout_marginTop="10dp"
|
||||
app:tabIndicatorHeight="0dp" />
|
||||
|
||||
<androidx.viewpager2.widget.ViewPager2
|
||||
android:id="@+id/viewP2"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@id/tab" />
|
||||
|
||||
</RelativeLayout>
|
||||
165
app/src/main/res/layout/activity_wallpaper.xml
Normal file
@ -0,0 +1,165 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@color/main_bg"
|
||||
tools:context=".InfoActivity">
|
||||
|
||||
|
||||
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/image"
|
||||
android:scaleType="centerCrop"
|
||||
android:layout_above="@id/view_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
<ImageView
|
||||
android:id="@+id/back"
|
||||
android:layout_width="34dp"
|
||||
android:layout_height="34dp"
|
||||
android:layout_marginStart="12dp"
|
||||
android:layout_marginTop="22dp"
|
||||
android:src="@drawable/back" />
|
||||
<RelativeLayout
|
||||
android:id="@+id/view_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="200dp"
|
||||
android:layout_alignParentBottom="true">
|
||||
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/im1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="80dp"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="35dp"
|
||||
android:layout_height="35dp"
|
||||
android:id="@+id/check1"
|
||||
android:visibility="gone"
|
||||
android:layout_marginStart="22dp"
|
||||
android:src="@drawable/selector_right" />
|
||||
|
||||
|
||||
<ImageView
|
||||
android:layout_width="27dp"
|
||||
android:layout_height="27dp"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginStart="25dp"
|
||||
android:src="@drawable/ic_wh" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_wh1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/app_name"
|
||||
android:layout_marginStart="15dp"
|
||||
android:textSize="15sp"
|
||||
android:textColor="@color/text_color" />
|
||||
</LinearLayout>
|
||||
|
||||
<View
|
||||
android:id="@+id/line0"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_below="@id/im1"
|
||||
android:layout_marginStart="26dp"
|
||||
android:layout_marginEnd="26dp"
|
||||
android:background="@color/love_gray" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/im2"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="80dp"
|
||||
android:visibility="gone"
|
||||
android:layout_below="@id/line0"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="35dp"
|
||||
android:layout_height="35dp"
|
||||
android:id="@+id/check2"
|
||||
android:layout_marginStart="22dp"
|
||||
android:src="@drawable/selector_right" />
|
||||
|
||||
<ImageView
|
||||
android:layout_width="27dp"
|
||||
android:layout_height="27dp"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginStart="25dp"
|
||||
android:src="@drawable/ic_wh" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="15dp"
|
||||
android:textSize="15sp"
|
||||
android:id="@+id/tv_wh2"
|
||||
android:textColor="@color/text_color" />
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/im2"
|
||||
android:layout_marginTop="17dp"
|
||||
android:orientation="horizontal"
|
||||
android:paddingTop="15dp"
|
||||
android:paddingBottom="15dp">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/save"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_weight="1"
|
||||
android:src="@drawable/ic_download" />
|
||||
|
||||
<View
|
||||
android:id="@+id/line1"
|
||||
android:layout_width="1dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_toEndOf="@id/save"
|
||||
android:background="@color/love_gray" />
|
||||
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/set_wallpaper"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_toEndOf="@id/line1"
|
||||
android:layout_weight="1"
|
||||
android:src="@drawable/ic_set_wallpaper" />
|
||||
|
||||
<View
|
||||
android:id="@+id/line2"
|
||||
android:layout_width="1dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_toEndOf="@id/set_wallpaper"
|
||||
android:background="@color/love_gray" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/love"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_toEndOf="@id/line2"
|
||||
android:layout_weight="1"
|
||||
android:src="@drawable/selector_love" />
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/load"
|
||||
android:layout_width="53dp"
|
||||
android:layout_height="53dp"
|
||||
android:indeterminateTint="@color/white"
|
||||
android:layout_centerInParent="true" />
|
||||
</RelativeLayout>
|
||||
38
app/src/main/res/layout/activity_wel.xml
Normal file
@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@color/main_bg"
|
||||
tools:context=".WelActivity">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/logo"
|
||||
android:layout_width="124dp"
|
||||
android:layout_height="124dp"
|
||||
android:src="@mipmap/icon"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_marginTop="260dp" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/logo"
|
||||
android:textColor="@color/white"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_marginTop="22dp"
|
||||
android:textSize="19sp"
|
||||
android:text="@string/app_name" />
|
||||
|
||||
<ProgressBar
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/tv"
|
||||
android:indeterminateTint="@color/white"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_marginTop="85dp" />
|
||||
|
||||
|
||||
</RelativeLayout>
|
||||
14
app/src/main/res/layout/dialog_loading.xml
Normal file
@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="100dp"
|
||||
android:textSize="18sp"
|
||||
android:gravity="center"
|
||||
android:textColor="@color/black"
|
||||
android:text="@string/loading"/>
|
||||
|
||||
</RelativeLayout>
|
||||
15
app/src/main/res/layout/fragment_category.xml
Normal file
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/recycler_class"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
|
||||
|
||||
|
||||
</FrameLayout>
|
||||
79
app/src/main/res/layout/fragment_dialog_set.xml
Normal file
@ -0,0 +1,79 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="27dp"
|
||||
android:layout_marginEnd="27dp"
|
||||
android:background="@drawable/dailog_btn_shape"
|
||||
android:gravity="center_horizontal"
|
||||
android:orientation="vertical"
|
||||
android:paddingTop="15dp"
|
||||
android:paddingBottom="15dp">
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:text="@string/setWa"
|
||||
android:textColor="@color/black"
|
||||
android:textSize="18sp" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/imclose"
|
||||
android:layout_width="46dp"
|
||||
android:layout_height="46dp"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:padding="6dp"
|
||||
android:src="@drawable/icclose" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvBoth"
|
||||
android:layout_width="220dp"
|
||||
android:layout_height="50dp"
|
||||
android:layout_marginTop="12dp"
|
||||
android:background="@drawable/dailog_shape"
|
||||
android:gravity="center"
|
||||
android:text="@string/dialog_both"
|
||||
android:textColor="@color/text_color"
|
||||
android:textSize="16sp" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvhome"
|
||||
android:layout_width="220dp"
|
||||
android:layout_height="50dp"
|
||||
android:layout_marginTop="11dp"
|
||||
android:background="@drawable/dailog_shape"
|
||||
android:gravity="center"
|
||||
android:text="@string/dialog_home"
|
||||
android:textColor="@color/text_color"
|
||||
android:textSize="16sp" />
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvlock"
|
||||
android:layout_width="220dp"
|
||||
android:layout_height="50dp"
|
||||
android:layout_marginTop="11dp"
|
||||
android:background="@drawable/dailog_shape"
|
||||
android:gravity="center"
|
||||
android:text="@string/dialog_lock"
|
||||
android:textColor="@color/text_color"
|
||||
android:textSize="16sp" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</FrameLayout>
|
||||
28
app/src/main/res/layout/fragment_main.xml
Normal file
@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".MainFragment">
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/recycler"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/empty_love"
|
||||
android:textSize="17sp"
|
||||
android:layout_marginStart="44dp"
|
||||
android:layout_marginEnd="44dp"
|
||||
android:id="@+id/empty_tv"
|
||||
android:visibility="gone"
|
||||
android:gravity="center"
|
||||
android:lineSpacingExtra="5dp"
|
||||
android:layout_marginTop="180dp"
|
||||
android:textColor="@color/white"/>
|
||||
|
||||
|
||||
</FrameLayout>
|
||||
30
app/src/main/res/layout/item_cateogry_adapter.xml
Normal file
@ -0,0 +1,30 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_marginTop="6dp"
|
||||
android:id="@+id/class_item"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/covert_im"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="200dp"
|
||||
android:scaleType="fitXY"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="33dp"
|
||||
android:layout_marginBottom="44dp"
|
||||
android:text="@string/app_name"
|
||||
android:textColor="@color/text_color"
|
||||
android:textSize="16sp"
|
||||
app:layout_constraintBottom_toBottomOf="@id/covert_im"
|
||||
app:layout_constraintLeft_toLeftOf="@id/covert_im" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
31
app/src/main/res/layout/item_my_adapter.xml
Normal file
@ -0,0 +1,31 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/preview_im"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="210dp"
|
||||
android:scaleType="centerCrop"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="50dp"
|
||||
android:id="@+id/love_item"
|
||||
app:layout_constraintBottom_toBottomOf="@id/preview_im">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="28dp"
|
||||
android:layout_height="28dp"
|
||||
android:id="@+id/im_love"
|
||||
android:layout_centerInParent="true"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:src="@drawable/selector_love" />
|
||||
</RelativeLayout>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
12
app/src/main/res/layout/tab_item_view.xml
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/tabIm"
|
||||
android:layout_width="26dp"
|
||||
android:layout_height="26dp" />
|
||||
|
||||
</LinearLayout>
|
||||
6
app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@drawable/ic_launcher_background" />
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
||||
<monochrome android:drawable="@drawable/ic_launcher_foreground" />
|
||||
</adaptive-icon>
|
||||
6
app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@drawable/ic_launcher_background" />
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
||||
<monochrome android:drawable="@drawable/ic_launcher_foreground" />
|
||||
</adaptive-icon>
|
||||
BIN
app/src/main/res/mipmap-hdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
app/src/main/res/mipmap-mdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 982 B |
BIN
app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
app/src/main/res/mipmap-xhdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 7.6 KiB |
BIN
app/src/main/res/mipmap-xxxhdpi/icon.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
7
app/src/main/res/values-night/themes.xml
Normal file
@ -0,0 +1,7 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Base application theme. -->
|
||||
<style name="Base.Theme.MyWallpaper" parent="Theme.Material3.DayNight.NoActionBar">
|
||||
<!-- Customize your dark theme here. -->
|
||||
<!-- <item name="colorPrimary">@color/my_dark_primary</item> -->
|
||||
</style>
|
||||
</resources>
|
||||
15
app/src/main/res/values/colors.xml
Normal file
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="black">#FF000000</color>
|
||||
<color name="text_color">#FDfefe</color>
|
||||
<color name="white">#ffffff</color>
|
||||
<color name="main_bg">#282632</color>
|
||||
<color name="main_love_bg1">#7898a7</color>
|
||||
<color name="main_love_bg2">#88a847</color>
|
||||
<color name="main_love_bg3">#808f78</color>
|
||||
<color name="main_love_bg4">#808080</color>
|
||||
<color name="love_red">#d81e06</color>
|
||||
<color name="love_gray">#babcbd</color>
|
||||
<color name="im_right">#30a92d</color>
|
||||
<color name="trans">#00ffffff</color>
|
||||
</resources>
|
||||
16
app/src/main/res/values/strings.xml
Normal file
@ -0,0 +1,16 @@
|
||||
<resources>
|
||||
<string name="app_name">Various Wallpapers</string>
|
||||
<string name="hello_blank_fragment">Hello blank fragment</string>
|
||||
<string name="setWa">Set Wallpaper</string>
|
||||
<string name="dialog_home">Home Screen</string>
|
||||
<string name="dialog_lock">Lock Screen</string>
|
||||
<string name="dialog_both">Both</string>
|
||||
<string name="success">Set Wallpaper Success!</string>
|
||||
<string name="fail">Failed to set wallpaper, please try again!</string>
|
||||
<string name="empty_love">There is no data yet. Go and add your favorite wallpapers.</string>
|
||||
|
||||
<string name="save_success">Save album successfully!</string>
|
||||
<string name="save_fail">Failed to save the album, please try again!</string>
|
||||
<string name="load_fail">Loading failed, please try again!</string>
|
||||
<string name="loading">Loading, please wait</string>
|
||||
</resources>
|
||||
10
app/src/main/res/values/themes.xml
Normal file
@ -0,0 +1,10 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Base application theme. -->
|
||||
<style name="Base.Theme.MyWallpaper" parent="Theme.Material3.DayNight.NoActionBar">
|
||||
<!-- Customize your light theme here. -->
|
||||
<!-- <item name="colorPrimary">@color/my_light_primary</item> -->
|
||||
<item name="android:statusBarColor">@color/main_bg</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.MyWallpaper" parent="Base.Theme.MyWallpaper" />
|
||||
</resources>
|
||||
13
app/src/main/res/xml/backup_rules.xml
Normal file
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!--
|
||||
Sample backup rules file; uncomment and customize as necessary.
|
||||
See https://developer.android.com/guide/topics/data/autobackup
|
||||
for details.
|
||||
Note: This file is ignored for devices older that API 31
|
||||
See https://developer.android.com/about/versions/12/backup-restore
|
||||
-->
|
||||
<full-backup-content>
|
||||
<!--
|
||||
<include domain="sharedpref" path="."/>
|
||||
<exclude domain="sharedpref" path="device.xml"/>
|
||||
-->
|
||||
</full-backup-content>
|
||||
19
app/src/main/res/xml/data_extraction_rules.xml
Normal file
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!--
|
||||
Sample data extraction rules file; uncomment and customize as necessary.
|
||||
See https://developer.android.com/about/versions/12/backup-restore#xml-changes
|
||||
for details.
|
||||
-->
|
||||
<data-extraction-rules>
|
||||
<cloud-backup>
|
||||
<!-- TODO: Use <include> and <exclude> to control what is backed up.
|
||||
<include .../>
|
||||
<exclude .../>
|
||||
-->
|
||||
</cloud-backup>
|
||||
<!--
|
||||
<device-transfer>
|
||||
<include .../>
|
||||
<exclude .../>
|
||||
</device-transfer>
|
||||
-->
|
||||
</data-extraction-rules>
|
||||
12
app/src/main/res/xml/network_security_config.xml
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<network-security-config>
|
||||
<base-config cleartextTrafficPermitted="true">
|
||||
<trust-anchors>
|
||||
<certificates src="system" />
|
||||
</trust-anchors>
|
||||
</base-config>
|
||||
<domain-config cleartextTrafficPermitted="false">
|
||||
<domain includeSubdomains="true">https://img1.wallspic.com</domain>
|
||||
</domain-config>
|
||||
</network-security-config>
|
||||
|
||||
17
app/src/test/java/com/nature/free/test/ExampleUnitTest.java
Normal file
@ -0,0 +1,17 @@
|
||||
package com.nature.free.test;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/**
|
||||
* Example local unit test, which will execute on the development machine (host).
|
||||
*
|
||||
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
public class ExampleUnitTest {
|
||||
@Test
|
||||
public void addition_isCorrect() {
|
||||
assertEquals(4, 2 + 2);
|
||||
}
|
||||
}
|
||||
BIN
app/testVariousWallpapers.jks
Normal file
21
build.gradle.kts
Normal file
@ -0,0 +1,21 @@
|
||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||
plugins {
|
||||
id("com.android.application") version "8.1.3" apply false
|
||||
id("org.jetbrains.kotlin.android") version "1.9.0" apply false
|
||||
|
||||
id("com.google.gms.google-services") version "4.3.15" apply false
|
||||
id ("com.google.firebase.crashlytics") version "2.9.2" apply false
|
||||
}
|
||||
|
||||
buildscript {
|
||||
val objectboxVersion by extra("4.0.0") // For KTS build scripts
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
// Note: 2.9.0 and older are available on jcenter()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
classpath("io.objectbox:objectbox-gradle-plugin:$objectboxVersion")
|
||||
}
|
||||
}
|
||||
21
gradle.properties
Normal file
@ -0,0 +1,21 @@
|
||||
# Project-wide Gradle settings.
|
||||
# IDE (e.g. Android Studio) users:
|
||||
# Gradle settings configured through the IDE *will override*
|
||||
# any settings specified in this file.
|
||||
# For more details on how to configure your build environment visit
|
||||
# http://www.gradle.org/docs/current/userguide/build_environment.html
|
||||
# Specifies the JVM arguments used for the daemon process.
|
||||
# The setting is particularly useful for tweaking memory settings.
|
||||
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
|
||||
# When configured, Gradle will run in incubating parallel mode.
|
||||
# This option should only be used with decoupled projects. More details, visit
|
||||
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
|
||||
# org.gradle.parallel=true
|
||||
# AndroidX package structure to make it clearer which packages are bundled with the
|
||||
# Android operating system, and which are packaged with your app's APK
|
||||
# https://developer.android.com/topic/libraries/support-library/androidx-rn
|
||||
android.useAndroidX=true
|
||||
# Enables namespacing of each library's R class so that its R class includes only the
|
||||
# resources declared in the library itself and none from the library's dependencies,
|
||||
# thereby reducing the size of the R class for that library
|
||||
android.nonTransitiveRClass=true
|
||||
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Normal file
6
gradle/wrapper/gradle-wrapper.properties
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
#Tue Jun 18 18:15:06 CST 2024
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
185
gradlew
vendored
Normal file
@ -0,0 +1,185 @@
|
||||
#!/usr/bin/env sh
|
||||
|
||||
#
|
||||
# Copyright 2015 the original author or authors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# https://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
##############################################################################
|
||||
##
|
||||
## Gradle start up script for UN*X
|
||||
##
|
||||
##############################################################################
|
||||
|
||||
# Attempt to set APP_HOME
|
||||
# Resolve links: $0 may be a link
|
||||
PRG="$0"
|
||||
# Need this for relative symlinks.
|
||||
while [ -h "$PRG" ] ; do
|
||||
ls=`ls -ld "$PRG"`
|
||||
link=`expr "$ls" : '.*-> \(.*\)$'`
|
||||
if expr "$link" : '/.*' > /dev/null; then
|
||||
PRG="$link"
|
||||
else
|
||||
PRG=`dirname "$PRG"`"/$link"
|
||||
fi
|
||||
done
|
||||
SAVED="`pwd`"
|
||||
cd "`dirname \"$PRG\"`/" >/dev/null
|
||||
APP_HOME="`pwd -P`"
|
||||
cd "$SAVED" >/dev/null
|
||||
|
||||
APP_NAME="Gradle"
|
||||
APP_BASE_NAME=`basename "$0"`
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD="maximum"
|
||||
|
||||
warn () {
|
||||
echo "$*"
|
||||
}
|
||||
|
||||
die () {
|
||||
echo
|
||||
echo "$*"
|
||||
echo
|
||||
exit 1
|
||||
}
|
||||
|
||||
# OS specific support (must be 'true' or 'false').
|
||||
cygwin=false
|
||||
msys=false
|
||||
darwin=false
|
||||
nonstop=false
|
||||
case "`uname`" in
|
||||
CYGWIN* )
|
||||
cygwin=true
|
||||
;;
|
||||
Darwin* )
|
||||
darwin=true
|
||||
;;
|
||||
MINGW* )
|
||||
msys=true
|
||||
;;
|
||||
NONSTOP* )
|
||||
nonstop=true
|
||||
;;
|
||||
esac
|
||||
|
||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||
|
||||
|
||||
# Determine the Java command to use to start the JVM.
|
||||
if [ -n "$JAVA_HOME" ] ; then
|
||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||
# IBM's JDK on AIX uses strange locations for the executables
|
||||
JAVACMD="$JAVA_HOME/jre/sh/java"
|
||||
else
|
||||
JAVACMD="$JAVA_HOME/bin/java"
|
||||
fi
|
||||
if [ ! -x "$JAVACMD" ] ; then
|
||||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
else
|
||||
JAVACMD="java"
|
||||
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
|
||||
# Increase the maximum file descriptors if we can.
|
||||
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
|
||||
MAX_FD_LIMIT=`ulimit -H -n`
|
||||
if [ $? -eq 0 ] ; then
|
||||
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
||||
MAX_FD="$MAX_FD_LIMIT"
|
||||
fi
|
||||
ulimit -n $MAX_FD
|
||||
if [ $? -ne 0 ] ; then
|
||||
warn "Could not set maximum file descriptor limit: $MAX_FD"
|
||||
fi
|
||||
else
|
||||
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
|
||||
fi
|
||||
fi
|
||||
|
||||
# For Darwin, add options to specify how the application appears in the dock
|
||||
if $darwin; then
|
||||
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
||||
fi
|
||||
|
||||
# For Cygwin or MSYS, switch paths to Windows format before running java
|
||||
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
|
||||
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||
|
||||
JAVACMD=`cygpath --unix "$JAVACMD"`
|
||||
|
||||
# We build the pattern for arguments to be converted via cygpath
|
||||
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
||||
SEP=""
|
||||
for dir in $ROOTDIRSRAW ; do
|
||||
ROOTDIRS="$ROOTDIRS$SEP$dir"
|
||||
SEP="|"
|
||||
done
|
||||
OURCYGPATTERN="(^($ROOTDIRS))"
|
||||
# Add a user-defined pattern to the cygpath arguments
|
||||
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
|
||||
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
|
||||
fi
|
||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||
i=0
|
||||
for arg in "$@" ; do
|
||||
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
|
||||
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
|
||||
|
||||
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
|
||||
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
|
||||
else
|
||||
eval `echo args$i`="\"$arg\""
|
||||
fi
|
||||
i=`expr $i + 1`
|
||||
done
|
||||
case $i in
|
||||
0) set -- ;;
|
||||
1) set -- "$args0" ;;
|
||||
2) set -- "$args0" "$args1" ;;
|
||||
3) set -- "$args0" "$args1" "$args2" ;;
|
||||
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Escape application args
|
||||
save () {
|
||||
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
||||
echo " "
|
||||
}
|
||||
APP_ARGS=`save "$@"`
|
||||
|
||||
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
||||
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
|
||||
|
||||
exec "$JAVACMD" "$@"
|
||||
89
gradlew.bat
vendored
Normal file
@ -0,0 +1,89 @@
|
||||
@rem
|
||||
@rem Copyright 2015 the original author or authors.
|
||||
@rem
|
||||
@rem Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@rem you may not use this file except in compliance with the License.
|
||||
@rem You may obtain a copy of the License at
|
||||
@rem
|
||||
@rem https://www.apache.org/licenses/LICENSE-2.0
|
||||
@rem
|
||||
@rem Unless required by applicable law or agreed to in writing, software
|
||||
@rem distributed under the License is distributed on an "AS IS" BASIS,
|
||||
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
@rem See the License for the specific language governing permissions and
|
||||
@rem limitations under the License.
|
||||
@rem
|
||||
|
||||
@if "%DEBUG%" == "" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@rem Gradle startup script for Windows
|
||||
@rem
|
||||
@rem ##########################################################################
|
||||
|
||||
@rem Set local scope for the variables with windows NT shell
|
||||
if "%OS%"=="Windows_NT" setlocal
|
||||
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%" == "" set DIRNAME=.
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
|
||||
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if "%ERRORLEVEL%" == "0" goto execute
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:findJavaFromJavaHome
|
||||
set JAVA_HOME=%JAVA_HOME:"=%
|
||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||
|
||||
if exist "%JAVA_EXE%" goto execute
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
|
||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||
|
||||
|
||||
@rem Execute Gradle
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
|
||||
|
||||
:end
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
if "%ERRORLEVEL%"=="0" goto mainEnd
|
||||
|
||||
:fail
|
||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||
rem the _cmd.exe /c_ return code!
|
||||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
||||
exit /b 1
|
||||
|
||||
:mainEnd
|
||||
if "%OS%"=="Windows_NT" endlocal
|
||||
|
||||
:omega
|
||||
19
settings.gradle.kts
Normal file
@ -0,0 +1,19 @@
|
||||
pluginManagement {
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
gradlePluginPortal()
|
||||
}
|
||||
}
|
||||
dependencyResolutionManagement {
|
||||
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
rootProject.name = "Various Wallpapers"
|
||||
include(":app")
|
||||
|
||||