diff --git a/app/build.gradle b/app/build.gradle index 5331162..8a1f065 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,7 +9,7 @@ static def releaseTime() { } android { - compileSdkVersion 28 + compileSdkVersion 29 buildToolsVersion "30.0.3" defaultConfig { @@ -17,7 +17,7 @@ android { //There are no CERT files because If the mini sdk version is 23+, the AGP will ignore the V1 scheme signature. minSdkVersion 23 - targetSdkVersion 28 + targetSdkVersion 29 versionCode 1 versionName "1.0.0" @@ -127,7 +127,8 @@ android { } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) +// implementation fileTree(dir: 'libs', include: ['*.jar']) + compileOnly files('libs/framework.jar') implementation project(path: ':FlycoTabLayoutZ_Lib') implementation project(path: ':JZVideo') @@ -199,7 +200,7 @@ dependencies { // implementation 'com.github.wuao:FlycoTabLayout2:Tag1.1.3' //autosize会改变第三方view的大小 //https://github.com/JessYanCoding/AndroidAutoSize - //implementation 'me.jessyan:autosize:1.2.1' + implementation 'me.jessyan:autosize:1.2.1' // 权限请求框架:https://github.com/getActivity/XXPermissions implementation 'com.github.getActivity:XXPermissions:20.0' } diff --git a/app/libs/framework.jar b/app/libs/framework.jar new file mode 100644 index 0000000..fefe7ec Binary files /dev/null and b/app/libs/framework.jar differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 03af9f3..8dd111b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -15,31 +15,24 @@ android:theme="@style/AppTheme"> + android:stateNotNeeded="true"> - + + - - - - - - - - + android:launchMode="singleTask" /> + \ No newline at end of file diff --git a/app/src/main/java/com/hainaos/vc/activity/category/CategoryActivity.java b/app/src/main/java/com/hainaos/vc/activity/category/CategoryActivity.java new file mode 100644 index 0000000..e6503bb --- /dev/null +++ b/app/src/main/java/com/hainaos/vc/activity/category/CategoryActivity.java @@ -0,0 +1,114 @@ +package com.hainaos.vc.activity.category; + +import android.content.Intent; +import android.view.View; + +import androidx.lifecycle.Observer; +import androidx.recyclerview.widget.DefaultItemAnimator; + +import com.hainaos.vc.R; +import com.hainaos.vc.adapter.VideoAdapter; +import com.hainaos.vc.base.mvvm.BaseMvvmActivity; +import com.hainaos.vc.bean.LocalVideoInfo; +import com.hainaos.vc.databinding.ActivityCategoryBinding; +import com.hainaos.vc.utils.ScreenUtils; +import com.hainaos.vc.utils.VideoUtils; +import com.hainaos.vc.view.CustomDialog; +import com.hainaos.vc.view.EquallyDividedItemDecoration; +import com.hainaos.vc.view.RecycleGridLayoutManager; + +import java.io.File; +import java.util.ArrayList; + +public class CategoryActivity extends BaseMvvmActivity { + + private static final String TAG = "CategoryActivity"; + private String mTitle; + + private VideoAdapter mVideoAdapter; + + private static final int SPAN_COUNT = 3; + + @Override + protected int getLayoutId() { + return R.layout.activity_category; + } + + @Override + protected void initDataBinding() { + mViewModel.setCtx(this); + mViewModel.setVDBinding(mViewDataBinding); + mViewModel.setLifecycle(getLifecycleSubject()); + mViewDataBinding.setClick(new BtnClick()); + } + + @Override + protected void initView() { + RecycleGridLayoutManager manager = new RecycleGridLayoutManager(CategoryActivity.this, SPAN_COUNT); + mViewDataBinding.rvVideo.setLayoutManager(manager); + + EquallyDividedItemDecoration equallyDividedItemDecoration = new EquallyDividedItemDecoration(SPAN_COUNT, ScreenUtils.dip2px(CategoryActivity.this, 1)); + mViewDataBinding.rvVideo.addItemDecoration(equallyDividedItemDecoration); + mViewDataBinding.rvVideo.setNestedScrollingEnabled(false); + + ((DefaultItemAnimator) mViewDataBinding.rvVideo.getItemAnimator()).setSupportsChangeAnimations(false); + mVideoAdapter = new VideoAdapter(CategoryActivity.this); + mVideoAdapter.setOnLongClickListener(new VideoAdapter.onItemLongClickListener() { + @Override + public void onItemLongClick(String path, int position) { + showDialog(path, position); + } + }); + mViewDataBinding.rvVideo.setAdapter(mVideoAdapter); + } + + @Override + protected void initData() { + Intent intent = getIntent(); + mTitle = intent.getStringExtra("title"); + mViewDataBinding.setTitle(mTitle); + + + mViewModel.mLocalVideoInfosData.observe(this, new Observer>() { + @Override + public void onChanged(ArrayList localVideoInfos) { + mVideoAdapter.setData(localVideoInfos); + } + }); + mViewModel.getViedoList(); + + } + + private void showDialog(String path, int position) { + CustomDialog dialog = new CustomDialog(CategoryActivity.this); + dialog.setTitle("删除文件") + .setMessage("确定要删除文件 " + VideoUtils.getFileNameWithoutExtension(path) + "吗") + .setPositive("确定") + .setNegtive("取消") + .setOnClickBottomListener(new CustomDialog.OnClickBottomListener() { + @Override + public void onPositiveClick() { + dialog.dismiss(); + File file = new File(path); +// if (file.delete()) { +// mVideoAdapter.removeItem(position); +// ToastUtil.show("删除成功"); +// } else { +// ToastUtil.show("删除失败,检查权限是否开启"); +// } + } + + @Override + public void onNegtiveClick() { + dialog.dismiss(); + } + }); + dialog.show(); + } + + public class BtnClick { + public void exit(View view) { + finish(); + } + } +} diff --git a/app/src/main/java/com/hainaos/vc/activity/category/CategoryViewModel.java b/app/src/main/java/com/hainaos/vc/activity/category/CategoryViewModel.java new file mode 100644 index 0000000..5144cd8 --- /dev/null +++ b/app/src/main/java/com/hainaos/vc/activity/category/CategoryViewModel.java @@ -0,0 +1,44 @@ +package com.hainaos.vc.activity.category; + +import androidx.lifecycle.MutableLiveData; + +import com.hainaos.vc.base.mvvm.BaseViewModel; +import com.hainaos.vc.bean.LocalVideoInfo; +import com.hainaos.vc.databinding.ActivityCategoryBinding; +import com.trello.rxlifecycle4.android.ActivityEvent; + +import java.util.ArrayList; + +public class CategoryViewModel extends BaseViewModel { + + @Override + public ActivityCategoryBinding getVDBinding() { + return binding; + } + + @Override + public void onDestroy() { + + } + + public MutableLiveData> mLocalVideoInfosData = new MutableLiveData<>(); + + public void getViedoList() { + LocalVideoInfo localVideoInfo = new LocalVideoInfo(); + localVideoInfo.setFile_name("test_video_1"); + localVideoInfo.setLocalPath("/storage/emulated/0/Movies/test_video_1.mp4"); + ArrayList localVideoInfos = new ArrayList<>(); + localVideoInfos.add(localVideoInfo); + localVideoInfos.add(localVideoInfo); + localVideoInfos.add(localVideoInfo); + localVideoInfos.add(localVideoInfo); + localVideoInfos.add(localVideoInfo); + localVideoInfos.add(localVideoInfo); + localVideoInfos.add(localVideoInfo); + localVideoInfos.add(localVideoInfo); + localVideoInfos.add(localVideoInfo); + localVideoInfos.add(localVideoInfo); + + mLocalVideoInfosData.setValue(localVideoInfos); + } +} diff --git a/app/src/main/java/com/hainaos/vc/activity/main/MainActivity.java b/app/src/main/java/com/hainaos/vc/activity/main/MainActivity.java index b1fcb44..c66f134 100644 --- a/app/src/main/java/com/hainaos/vc/activity/main/MainActivity.java +++ b/app/src/main/java/com/hainaos/vc/activity/main/MainActivity.java @@ -8,29 +8,28 @@ import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.net.Uri; +import android.os.Build; import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.widget.Toast; import androidx.core.app.ActivityCompat; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import com.hainaos.vc.BuildConfig; import com.hainaos.vc.R; -import com.hainaos.vc.activity.vip.VipActivity; -import com.hainaos.vc.base.BaseFragmentPagerAdapter; +import com.hainaos.vc.activity.category.CategoryActivity; import com.hainaos.vc.base.mvvm.BaseMvvmActivity; +import com.hainaos.vc.config.CommonConfig; import com.hainaos.vc.databinding.ActivityMainBinding; import com.hainaos.vc.dialog.PermissionsDialog; -import com.hainaos.vc.fragment.pic.PictureFragment; -import com.hainaos.vc.fragment.video.VideoFragment; +import com.hainaos.vc.dialog.PrivacyPolicyDialog; import com.hainaos.vc.utils.JgyUtils; import com.hainaos.vc.utils.ToastUtil; +import com.hainaos.vc.utils.Utils; import com.hainaos.vc.utils.VideoUtils; import com.hjq.permissions.OnPermissionCallback; import com.hjq.permissions.XXPermissions; +import com.tencent.mmkv.MMKV; import java.io.File; import java.io.FileInputStream; @@ -44,29 +43,23 @@ import io.reactivex.rxjava3.annotations.NonNull; public class MainActivity extends BaseMvvmActivity { private static final String TAG = "MainActivity"; + private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE); + private static final int REQUEST_PERMISSION_CODE = 200; - private String[] title = new String[]{"视频", "照片"}; - - private BaseFragmentPagerAdapter mPagerAdapter; - private FragmentManager mFragmentManager; - private List mFragments; - private PictureFragment mPictureFragment; - private VideoFragment mVideoFragment; - String[] permissions = new String[]{ Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE }; @Override - public int getLayoutId() { - return R.layout.activity_main; + public boolean setNightMode() { + return true; } @Override - public boolean setNightMode() { - return false; + public int getLayoutId() { + return R.layout.activity_main; } @Override @@ -74,37 +67,33 @@ public class MainActivity extends BaseMvvmActivity(); - if (mVideoFragment == null) { - mVideoFragment = new VideoFragment(); - } - if (mPictureFragment == null) { - mPictureFragment = new PictureFragment(); - } - mFragments.add(mVideoFragment); - mFragments.add(mPictureFragment); - mFragmentManager = getSupportFragmentManager(); - mPagerAdapter = new BaseFragmentPagerAdapter(mFragmentManager, mFragments); - mViewDataBinding.viewPager.setAdapter(mPagerAdapter); - mViewDataBinding.mainSlidingTabLayout.setViewPager(mViewDataBinding.viewPager, title); + Log.e(TAG, "initView: getSerial = " + Utils.getSerial()); } @Override public void initData() { + } + + private void initDatas() { + Log.e(TAG, "initDatas: "); + + JgyUtils.getInstance().setDefaultDesktop(getPackageName(), getClass().getCanonicalName()); + + } @Override protected void onResume() { super.onResume(); - checkSelfPermission(); + Log.e(TAG, "onResume: "); + checkEULA(); } @Override @@ -129,6 +118,59 @@ public class MainActivity extends BaseMvvmActivity= 31) { + setDefaultLauncher(mContext, pkg, className); + } else { + + } + + } + + public void setRoleHolderAsUser(Context context, String packageName) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + String roleName = "android.app.role.HOME"; + boolean add = true; + int flags = 0; + UserHandle user = Process.myUserHandle(); + Log.i("setRoleHolderAsUser", (add ? "Adding" : "Removing") + " package as role holder, role: " + + roleName + ", package: " + packageName); + RoleManager roleManager = context.getSystemService(RoleManager.class); + Executor executor = context.getMainExecutor(); + Consumer callback = successful -> { + if (successful) { + Log.d("setRoleHolderAsUser", "Package " + (add ? "added" : "removed") + + " as role holder, role: " + roleName + ", package: " + packageName); + } else { + Log.d("setRoleHolderAsUser", "Failed to " + (add ? "add" : "remove") + + " package as role holder, role: " + roleName + ", package: " + + packageName); + } + }; + roleManager.addRoleHolderAsUser(roleName, packageName, flags, user, executor, callback); + Log.i("setRoleHolderAsUser", "addRoleHolderAsUser done"); + } + } + + public void setDefaultLauncher(Context context, String defPackageName, String defClassName) { + try { + if (!TextUtils.isEmpty(defPackageName) && !TextUtils.isEmpty(defClassName)) { + IntentFilter filter = new IntentFilter(); + filter.addAction("android.intent.action.MAIN"); + filter.addCategory("android.intent.category.HOME"); + filter.addCategory("android.intent.category.DEFAULT"); + Intent intent = new Intent(Intent.ACTION_MAIN); + intent.addCategory(Intent.CATEGORY_HOME); + // 返回给定条件的所有ResolveInfo对象(本质上是Activity) + List list = context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); + int bestMatch = 0; + final int size = list.size(); + ComponentName[] set = new ComponentName[size]; + for (int i = 0; i < size; i++) { + ResolveInfo ri = list.get(i); + set[i] = new ComponentName(ri.activityInfo.packageName, ri.activityInfo.name); + if (ri.match > bestMatch) { + bestMatch = ri.match; + } + } + ComponentName preActivity = new ComponentName(defPackageName, defClassName); + context.getPackageManager().addPreferredActivity(filter, bestMatch, set, preActivity); + } + } catch (java.lang.SecurityException e) { + e.printStackTrace(); + Log.e(TAG, "setDefaultLauncher: " + e.getMessage()); + } + } + } diff --git a/app/src/main/res/drawable-hdpi/back.png b/app/src/main/res/drawable-hdpi/back.png deleted file mode 100644 index 7cdbd1c..0000000 Binary files a/app/src/main/res/drawable-hdpi/back.png and /dev/null differ diff --git a/app/src/main/res/drawable-hdpi/icon_avatar_female.png b/app/src/main/res/drawable-hdpi/icon_avatar_female.png new file mode 100644 index 0000000..56c7f72 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_avatar_female.png differ diff --git a/app/src/main/res/drawable-hdpi/icon_avatar_male.png b/app/src/main/res/drawable-hdpi/icon_avatar_male.png new file mode 100644 index 0000000..93a8a87 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_avatar_male.png differ diff --git a/app/src/main/res/drawable-hdpi/icon_back.png b/app/src/main/res/drawable-hdpi/icon_back_white.png similarity index 100% rename from app/src/main/res/drawable-hdpi/icon_back.png rename to app/src/main/res/drawable-hdpi/icon_back_white.png diff --git a/app/src/main/res/drawable-hdpi/icon_main_card_bg1.png b/app/src/main/res/drawable-hdpi/icon_main_card_bg1.png new file mode 100644 index 0000000..d419c04 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_main_card_bg1.png differ diff --git a/app/src/main/res/drawable-hdpi/icon_main_card_bg2.png b/app/src/main/res/drawable-hdpi/icon_main_card_bg2.png new file mode 100644 index 0000000..36eb036 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_main_card_bg2.png differ diff --git a/app/src/main/res/drawable-hdpi/icon_main_card_bg3.png b/app/src/main/res/drawable-hdpi/icon_main_card_bg3.png new file mode 100644 index 0000000..49b00ef Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_main_card_bg3.png differ diff --git a/app/src/main/res/drawable-hdpi/icon_main_login.png b/app/src/main/res/drawable-hdpi/icon_main_login.png new file mode 100644 index 0000000..e9963a7 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_main_login.png differ diff --git a/app/src/main/res/drawable/bg_main.xml b/app/src/main/res/drawable/bg_main.xml new file mode 100644 index 0000000..6f8476c --- /dev/null +++ b/app/src/main/res/drawable/bg_main.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_main_login.xml b/app/src/main/res/drawable/bg_main_login.xml new file mode 100644 index 0000000..873b943 --- /dev/null +++ b/app/src/main/res/drawable/bg_main_login.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_beauty_industry.xml b/app/src/main/res/drawable/ic_beauty_industry.xml new file mode 100644 index 0000000..a084d93 --- /dev/null +++ b/app/src/main/res/drawable/ic_beauty_industry.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_download_manager.xml b/app/src/main/res/drawable/ic_download_manager.xml new file mode 100644 index 0000000..2c07140 --- /dev/null +++ b/app/src/main/res/drawable/ic_download_manager.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_exit_desktop.xml b/app/src/main/res/drawable/ic_exit_desktop.xml new file mode 100644 index 0000000..467ffb8 --- /dev/null +++ b/app/src/main/res/drawable/ic_exit_desktop.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_category.xml b/app/src/main/res/layout/activity_category.xml new file mode 100644 index 0000000..8867b95 --- /dev/null +++ b/app/src/main/res/layout/activity_category.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_gallery.xml b/app/src/main/res/layout/activity_gallery.xml index 2b23b85..509cc02 100644 --- a/app/src/main/res/layout/activity_gallery.xml +++ b/app/src/main/res/layout/activity_gallery.xml @@ -31,7 +31,7 @@ android:layout_marginStart="4dp" android:adjustViewBounds="true" android:scaleType="centerCrop" - android:src="@drawable/back" + android:src="@drawable/icon_back_white" android:onClick="@{click::exit}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index eede549..75df650 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -8,116 +8,644 @@ + type="com.hainaos.vc.activity.main.MainActivity.BtnClick" /> - + + - + - - - + + + + - - - - - + android:layout_height="match_parent" + android:orientation="vertical"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_privacya.xml b/app/src/main/res/layout/activity_privacya.xml index 1fcc8f8..1e569bf 100644 --- a/app/src/main/res/layout/activity_privacya.xml +++ b/app/src/main/res/layout/activity_privacya.xml @@ -30,7 +30,7 @@ android:adjustViewBounds="true" android:onClick="@{click::exit}" android:scaleType="centerCrop" - android:src="@drawable/icon_back" + android:src="@drawable/icon_back_white" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> diff --git a/app/src/main/res/layout/activity_video.xml b/app/src/main/res/layout/activity_video.xml index 358036a..281781a 100644 --- a/app/src/main/res/layout/activity_video.xml +++ b/app/src/main/res/layout/activity_video.xml @@ -32,7 +32,7 @@ android:adjustViewBounds="true" android:onClick="@{click::exie}" android:scaleType="centerCrop" - android:src="@drawable/back" + android:src="@drawable/icon_back_white" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> diff --git a/app/src/main/res/layout/item_videofile.xml b/app/src/main/res/layout/item_video_file.xml similarity index 90% rename from app/src/main/res/layout/item_videofile.xml rename to app/src/main/res/layout/item_video_file.xml index 9cd6d52..481c1b7 100644 --- a/app/src/main/res/layout/item_videofile.xml +++ b/app/src/main/res/layout/item_video_file.xml @@ -2,13 +2,13 @@ + app:layout_constraintEnd_toEndOf="@+id/video_image" /> #efefef #3D54D9 + #D0A65E + #FFFFFF + + #00000000 #FFE2C59B diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 06f02f3..3e2f669 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -1,4 +1,10 @@ 2dp + + 40dp + 40dp + 16sp + 12dp + 4dp \ No newline at end of file diff --git a/build.gradle b/build.gradle index c0ea398..c8f080f 100644 --- a/build.gradle +++ b/build.gradle @@ -33,6 +33,11 @@ allprojects { maven { url 'https://maven.aliyun.com/repository/public' } maven { url 'https://maven.aliyun.com/repository/google' } } + gradle.projectsEvaluated { + tasks.withType(JavaCompile) { + options.compilerArgs.add('-Xbootclasspath/p:app/libs/framework.jar') + } + } } task clean(type: Delete) {