diff --git a/app/build.gradle b/app/build.gradle
index ce85458..850823b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -16,8 +16,8 @@ android {
applicationId "com.uiui.videoplayer"
minSdkVersion 24
targetSdkVersion 28
- versionCode 109
- versionName "1.0.8"
+ versionCode 114
+ versionName "1.1.3"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@@ -42,11 +42,39 @@ android {
//签名
signingConfigs {
tuixin {// 签名文件
- storeFile file("src/doc/tuixin.jks")
+ storeFile file("keystore/tuixin.jks")
storePassword "123456"
keyAlias "universal"
keyPassword "123456"
- v2SigningEnabled false
+ v1SigningEnabled true
+ v2SigningEnabled true
+ }
+ }
+
+ //多版本
+ productFlavors {
+ uiui {
+ flavorDimensions "default"
+ }
+
+ uiuios {
+ flavorDimensions "default"
+ }
+ }
+
+ sourceSets {
+ uiui {
+ java {
+ srcDirs += ['uiui/java'] // 5 添加
+ }
+ aidl.srcDirs 'src/uiui/aidl'
+ }
+
+ uiuios {
+ java {
+ srcDirs += ['uiuios/java'] // 5 添加
+ }
+ aidl.srcDirs 'src/uiuios/aidl'
}
}
@@ -103,6 +131,7 @@ dependencies {
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
+ implementation 'androidx.legacy:legacy-support-v4:1.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
diff --git a/app/src/doc/tuixin.jks b/app/keystore/tuixin.jks
similarity index 100%
rename from app/src/doc/tuixin.jks
rename to app/keystore/tuixin.jks
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 2090a3f..b20ee4e 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -15,6 +15,7 @@
>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("getHomeSpaceInfo", "onSubscribe: ");
+ }
+
+ @Override
+ public void onNext(@NonNull BaseResponse spaceInfoBaseResponse) {
+ Log.e("getHomeSpaceInfo", "onNext: " + spaceInfoBaseResponse);
+ if (spaceInfoBaseResponse.code == 200) {
+ SpaceInfo spaceInfo = spaceInfoBaseResponse.data;
+ String home_video_grade = spaceInfo.getHome_video_grade();
+ long quota = spaceInfo.getQuota();
+ long use_quota = spaceInfo.getUse_quota();
+ tv_rank.setText(home_video_grade);
+ tv_space.setText(Utils.formatFileSize(use_quota) + "/" + Utils.formatFileSize(quota));
+ } else {
+ tv_rank.setText("普通");
+ tv_space.setText("0GB/0GB");
+ }
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("getHomeSpaceInfo", "onError: " + e.getMessage());
+ onComplete();
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("getHomeSpaceInfo", "onComplete: ");
+ }
+ });
+ }
+
+ // 切换显示内容
+ public void switchContent(int index) {
+ switchPic(index);
+ FragmentTransaction transaction = mFragmentManager.beginTransaction();
+ hideFragments(transaction);
+ try {
+ switch (index) {
+ case 0:
+ if (mFragments[0] == null) {
+ mFragments[0] = new PictureFragment();
+ transaction.add(R.id.content, mFragments[0], 0 + "");
+ } else {
+ transaction.show(mFragments[0]);
+ }
+ break;
+ case 1:
+ if (mFragments[1] == null) {
+ mFragments[1] = new VideoFragment();
+ transaction.add(R.id.content, mFragments[1], 1 + "");
+ } else {
+ transaction.show(mFragments[1]);
+ }
+ break;
+ case 2:
+ if (mFragments[2] == null) {
+ mFragments[2] = new DocFragment();
+ transaction.add(R.id.content, mFragments[2], 2 + "");
+ } else {
+ transaction.show(mFragments[2]);
+ }
+ break;
+ default:
+ }
+ transaction.commit();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ private void switchPic(int index) {
+// iv_pic.setImageDrawable(getDrawable(R.drawable.home_icon_picture_normal));
+// iv_video.setImageDrawable(getDrawable(R.drawable.home_icon_video_normal));
+// iv_doc.setImageDrawable(getDrawable(R.drawable.home_icon_doc_normal));
+// Animation animation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.anim_small);
+ cl_pic.setBackground(null);
+ cl_video.setBackground(null);
+ cl_doc.setBackground(null);
+ switch (index) {
+ case 0:
+// iv_pic.startAnimation(animation);
+ iv_pic.setImageDrawable(getDrawable(R.drawable.home_icon_picture_pressed));
+ iv_video.setImageDrawable(getDrawable(R.drawable.home_icon_video_normal));
+ cl_pic.setBackground(getDrawable(R.drawable.alarm_pressed_background));
+ break;
+ case 1:
+// iv_video.startAnimation(animation);
+ iv_pic.setImageDrawable(getDrawable(R.drawable.home_icon_picture_normal));
+ iv_video.setImageDrawable(getDrawable(R.drawable.home_icon_video_pressed));
+ cl_video.setBackground(getDrawable(R.drawable.alarm_pressed_background));
+ break;
+ case 2:
+// iv_doc.startAnimation(animation);
+// iv_doc.setImageDrawable(getDrawable(R.drawable.home_icon_doc_checked));
+ cl_doc.setBackground(getDrawable(R.drawable.alarm_pressed_background));
+ break;
+ default:
+ }
+ }
+
+ // 将所有的Fragment都置为隐藏状态。
+ private void hideFragments(FragmentTransaction transaction) {
+ if (mFragments != null) {
+ for (Fragment fragment : mFragments) {
+ if (fragment != null) {
+ transaction.hide(fragment);
+ }
+ }
+ }
+ }
+
private void getThumbnail() {
long s1 = System.currentTimeMillis();
List picFileList = new ArrayList<>();
@@ -215,49 +346,49 @@ public class MainActivity extends BaseLightActivity {
Log.e("getThumbnail", "videoFileList: " + videoFileList);
Log.e("getThumbnail", "picFileList size = " + picFileList.size());
Log.e("getThumbnail", "videoFileList size = " + videoFileList.size());
- if (picFileList.size() == 0) {
- nv_pic.setImageDrawable(getDrawable(R.drawable.icon_pic));
- } else {
- nv_pic.setImageDrawable(path2Drawable(picFileList.get(0)));
- }
- if (videoFileList.size() == 0) {
- nv_video.setImageDrawable(getDrawable(R.drawable.icon_video));
- } else {
- Observable.create(new ObservableOnSubscribe() {
- @Override
- public void subscribe(ObservableEmitter emitter) throws Exception {
- FFmpegMediaMetadataRetriever mmr = new FFmpegMediaMetadataRetriever();
- mmr.setDataSource(videoFileList.get(0));
- Bitmap bitmap = mmr.getFrameAtTime();//获得视频第一帧的Bitmap对象.
- mmr.release();
- emitter.onNext(bitmap);
- }
- }).subscribeOn(Schedulers.newThread())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(new Observer() {
- @Override
- public void onSubscribe(Disposable d) {
- Log.e("VideoResult", "onSubscribe: ");
- }
-
- @Override
- public void onNext(Bitmap result) {
- Log.e("VideoResult", "onNext: " + result);
- nv_video.setImageBitmap(result);
-// Glide.with(nv_video).load(result).error(R.drawable.icon_video).into(nv_video);
- }
-
- @Override
- public void onError(Throwable e) {
- Log.e("VideoResult", "onError: " + e.getMessage());
- }
-
- @Override
- public void onComplete() {
- Log.e("VideoResult", "onComplete: ");
- }
- });
- }
+// if (picFileList.size() == 0) {
+// nv_pic.setImageDrawable(getDrawable(R.drawable.icon_pic));
+// } else {
+// nv_pic.setImageDrawable(path2Drawable(picFileList.get(0)));
+// }
+// if (videoFileList.size() == 0) {
+// nv_video.setImageDrawable(getDrawable(R.drawable.icon_video));
+// } else {
+// Observable.create(new ObservableOnSubscribe() {
+// @Override
+// public void subscribe(ObservableEmitter emitter) throws Exception {
+// FFmpegMediaMetadataRetriever mmr = new FFmpegMediaMetadataRetriever();
+// mmr.setDataSource(videoFileList.get(0));
+// Bitmap bitmap = mmr.getFrameAtTime();//获得视频第一帧的Bitmap对象.
+// mmr.release();
+// emitter.onNext(bitmap);
+// }
+// }).subscribeOn(Schedulers.newThread())
+// .observeOn(AndroidSchedulers.mainThread())
+// .subscribe(new Observer() {
+// @Override
+// public void onSubscribe(Disposable d) {
+// Log.e("VideoResult", "onSubscribe: ");
+// }
+//
+// @Override
+// public void onNext(Bitmap result) {
+// Log.e("VideoResult", "onNext: " + result);
+// nv_video.setImageBitmap(result);
+//// Glide.with(nv_video).load(result).error(R.drawable.icon_video).into(nv_video);
+// }
+//
+// @Override
+// public void onError(Throwable e) {
+// Log.e("VideoResult", "onError: " + e.getMessage());
+// }
+//
+// @Override
+// public void onComplete() {
+// Log.e("VideoResult", "onComplete: ");
+// }
+// });
+// }
Log.e("getThumbnail", "videoFileList size = " + videoFileList.size());
// CombineBitmap.init(this)
// .setLayoutManager(new DingLayoutManager()) // 必选, 设置图片的组合形式,支持WechatLayoutManager、DingLayoutManager
diff --git a/app/src/main/java/com/uiui/videoplayer/adapter/PicAdapter.java b/app/src/main/java/com/uiui/videoplayer/adapter/PicAdapter.java
index 95eb7c2..eed18ff 100644
--- a/app/src/main/java/com/uiui/videoplayer/adapter/PicAdapter.java
+++ b/app/src/main/java/com/uiui/videoplayer/adapter/PicAdapter.java
@@ -2,8 +2,11 @@ package com.uiui.videoplayer.adapter;
import android.content.Context;
import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.TextUtils;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -11,20 +14,25 @@ import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
+import com.bumptech.glide.request.RequestOptions;
+import com.bumptech.glide.request.target.CustomTarget;
+import com.bumptech.glide.request.transition.Transition;
+import com.shehuan.niv.NiceImageView;
import com.uiui.videoplayer.R;
import com.uiui.videoplayer.activity.preview.PreviewActivity;
import com.uiui.videoplayer.bean.PhotoInfo;
-import com.uiui.videoplayer.gson.GsonUtils;
import com.uiui.videoplayer.utils.JGYUtils;
+import com.uiui.videoplayer.utils.ScreenUtils;
import com.uiui.videoplayer.utils.VideoUtils;
import java.util.ArrayList;
-import java.util.List;
public class PicAdapter extends RecyclerView.Adapter {
@@ -44,10 +52,10 @@ public class PicAdapter extends RecyclerView.Adapter {
ViewGroup.LayoutParams params = holder.itemView.getLayoutParams();
ConstraintLayout.LayoutParams layoutParams = (ConstraintLayout.LayoutParams) holder.iv_pic.getLayoutParams();
//动态计算,设置item的宽高一致,总宽度-左右margin-左右padding /总列数-item左右margin-item左右padding
- params.height =
- (mGridLayoutManager.getWidth() - layoutParams.leftMargin
- - layoutParams.rightMargin - holder.iv_pic.getPaddingStart() - holder.iv_pic.getPaddingEnd()) / mGridLayoutManager.getSpanCount()
- - 2 * holder.itemView.getPaddingLeft() - 2 * ((ViewGroup.MarginLayoutParams) params).leftMargin;
+// params.height =
+// (mGridLayoutManager.getWidth() - layoutParams.leftMargin
+// - layoutParams.rightMargin - holder.iv_pic.getPaddingStart() - holder.iv_pic.getPaddingEnd()) / mGridLayoutManager.getSpanCount()
+// - 2 * holder.itemView.getPaddingLeft() - 2 * ((ViewGroup.MarginLayoutParams) params).leftMargin;
return holder;
}
@@ -61,10 +69,13 @@ public class PicAdapter extends RecyclerView.Adapter {
} else {
holder.tv_name.setText(fileName);
}
+ RequestOptions options = RequestOptions.bitmapTransform(new RoundedCorners(ScreenUtils.dip2px(mContext, 4F)));
if (!JGYUtils.getInstance().fileExists(photoInfo.getFile())) {
- Glide.with(mContext).load(fileUrl).into(holder.iv_pic);
+// Glide.with(mContext).load(fileUrl).into(holder.iv_pic);
+ loadImg(fileUrl, holder.iv_pic);
} else {
- Glide.with(mContext).load(JGYUtils.getInstance().getUrlLocalPath(photoInfo.getFile())).into(holder.iv_pic);
+// Glide.with(mContext).load(JGYUtils.getInstance().getUrlLocalPath(photoInfo.getFile())).into(holder.iv_pic);
+ loadImg(JGYUtils.getInstance().getUrlLocalPath(photoInfo.getFile()), holder.iv_pic);
}
holder.root.setOnClickListener(new View.OnClickListener() {
@Override
@@ -79,6 +90,27 @@ public class PicAdapter extends RecyclerView.Adapter {
});
}
+ private void loadImg(String path, ImageView imageView) {
+ Glide.with(imageView).asBitmap().load(path).into(new CustomTarget() {
+ @Override
+ public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition super Bitmap> transition) {
+ int imgWidth = resource.getWidth();
+ int imgHeight = resource.getHeight();
+ imageView.setImageBitmap(resource);
+// Log.e("into", "onResourceReady: width = " + imgWidth + "height = " + imgHeight);
+// ViewGroup.LayoutParams layoutParams = iv_img.getLayoutParams();
+// int width = iv_img.getWidth();
+// layoutParams.height = (int) (imgHeight * (1.0f * width /imgWidth ));
+// iv_img.setLayoutParams(layoutParams);
+ }
+
+ @Override
+ public void onLoadCleared(@Nullable Drawable placeholder) {
+
+ }
+ });
+ }
+
@Override
public int getItemCount() {
return mPhotoInfos == null ? 0 : mPhotoInfos.size();
@@ -91,7 +123,7 @@ public class PicAdapter extends RecyclerView.Adapter {
class Holder extends RecyclerView.ViewHolder {
ConstraintLayout root;
- ImageView iv_pic;
+ NiceImageView iv_pic;
TextView tv_name;
public Holder(@NonNull View itemView) {
diff --git a/app/src/main/java/com/uiui/videoplayer/adapter/RecyclerViewSpacesItemDecoration.java b/app/src/main/java/com/uiui/videoplayer/adapter/RecyclerViewSpacesItemDecoration.java
new file mode 100644
index 0000000..73f883a
--- /dev/null
+++ b/app/src/main/java/com/uiui/videoplayer/adapter/RecyclerViewSpacesItemDecoration.java
@@ -0,0 +1,41 @@
+package com.uiui.videoplayer.adapter;
+
+import android.graphics.Rect;
+import android.view.View;
+
+import androidx.recyclerview.widget.RecyclerView;
+
+import java.util.HashMap;
+
+public class RecyclerViewSpacesItemDecoration extends RecyclerView.ItemDecoration {
+
+ private final HashMap mSpaceValueMap;
+
+ public static final String TOP_DECORATION = "top_decoration";
+ public static final String BOTTOM_DECORATION = "bottom_decoration";
+ public static final String LEFT_DECORATION = "left_decoration";
+ public static final String RIGHT_DECORATION = "right_decoration";
+
+ public RecyclerViewSpacesItemDecoration(final HashMap mSpaceValueMap) {
+ this.mSpaceValueMap = mSpaceValueMap;
+ }
+
+ @Override
+ public void getItemOffsets(final Rect outRect, final View view, final RecyclerView parent,
+ final RecyclerView.State state) {
+ if (mSpaceValueMap.get(TOP_DECORATION) != null) {
+ outRect.top = mSpaceValueMap.get(TOP_DECORATION);
+ }
+ if (mSpaceValueMap.get(LEFT_DECORATION) != null) {
+ outRect.left = mSpaceValueMap.get(LEFT_DECORATION);
+ }
+ if (mSpaceValueMap.get(RIGHT_DECORATION) != null) {
+ outRect.right = mSpaceValueMap.get(RIGHT_DECORATION);
+ }
+ if (mSpaceValueMap.get(BOTTOM_DECORATION) != null) {
+ outRect.bottom = mSpaceValueMap.get(BOTTOM_DECORATION);
+ }
+
+ }
+
+}
diff --git a/app/src/main/java/com/uiui/videoplayer/base/BaseApplication.java b/app/src/main/java/com/uiui/videoplayer/base/BaseApplication.java
index 21f1b37..ac3d807 100644
--- a/app/src/main/java/com/uiui/videoplayer/base/BaseApplication.java
+++ b/app/src/main/java/com/uiui/videoplayer/base/BaseApplication.java
@@ -5,8 +5,8 @@ import android.util.Log;
import com.arialyy.aria.core.Aria;
import com.tencent.mmkv.MMKV;
+import com.uiui.sn.manager.RemoteManager;
import com.uiui.videoplayer.manager.ConnectManager;
-import com.uiui.videoplayer.manager.RemoteManager;
import com.uiui.videoplayer.network.NetInterfaceManager;
import com.uiui.videoplayer.utils.JGYUtils;
import com.uiui.videoplayer.utils.ToastUtil;
diff --git a/app/src/main/java/com/uiui/videoplayer/base/BaseFragment.java b/app/src/main/java/com/uiui/videoplayer/base/BaseFragment.java
new file mode 100644
index 0000000..e2315af
--- /dev/null
+++ b/app/src/main/java/com/uiui/videoplayer/base/BaseFragment.java
@@ -0,0 +1,155 @@
+package com.uiui.videoplayer.base;
+
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.CallSuper;
+import androidx.annotation.CheckResult;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+
+import com.trello.rxlifecycle4.LifecycleProvider;
+import com.trello.rxlifecycle4.LifecycleTransformer;
+import com.trello.rxlifecycle4.RxLifecycle;
+import com.trello.rxlifecycle4.android.FragmentEvent;
+import com.trello.rxlifecycle4.android.RxLifecycleAndroid;
+
+import io.reactivex.rxjava3.core.Observable;
+import io.reactivex.rxjava3.subjects.BehaviorSubject;
+
+public abstract class BaseFragment extends Fragment implements LifecycleProvider {
+ public final BehaviorSubject lifecycleSubject = BehaviorSubject.create();
+
+ protected boolean isViewInitiated;
+ protected boolean isVisibleToUser;
+ protected boolean isDataInitiated;
+
+ @Override
+ @NonNull
+ @CheckResult
+ public final Observable lifecycle() {
+ return lifecycleSubject.hide();
+ }
+
+ @Override
+ @NonNull
+ @CheckResult
+ public final LifecycleTransformer bindUntilEvent(@NonNull FragmentEvent event) {
+ return RxLifecycle.bindUntilEvent(lifecycleSubject, event);
+ }
+
+ @Override
+ @NonNull
+ @CheckResult
+ public final LifecycleTransformer bindToLifecycle() {
+ return RxLifecycleAndroid.bindFragment(lifecycleSubject);
+ }
+
+ @Override
+ @CallSuper
+ public void onAttach(android.app.Activity activity) {
+ super.onAttach(activity);
+ lifecycleSubject.onNext(FragmentEvent.ATTACH);
+ }
+
+ @Override
+ @CallSuper
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ lifecycleSubject.onNext(FragmentEvent.CREATE);
+ }
+
+ @Nullable
+ @Override
+ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ return super.onCreateView(inflater, container, savedInstanceState);
+ }
+
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+ isViewInitiated = true;
+ prepareFetchData();
+ }
+
+ @Override
+ public void setUserVisibleHint(boolean isVisibleToUser) {
+ super.setUserVisibleHint(isVisibleToUser);
+ this.isVisibleToUser = isVisibleToUser;
+ prepareFetchData();
+ }
+
+ public abstract void fetchData();
+
+ public boolean prepareFetchData() {
+ return prepareFetchData(false);
+ }
+
+ public boolean prepareFetchData(boolean forceUpdate) {
+ if (isVisibleToUser && isViewInitiated && (!isDataInitiated || forceUpdate)) {
+ fetchData();
+ isDataInitiated = true;
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ @CallSuper
+ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ lifecycleSubject.onNext(FragmentEvent.CREATE_VIEW);
+ }
+
+ @Override
+ @CallSuper
+ public void onStart() {
+ super.onStart();
+ lifecycleSubject.onNext(FragmentEvent.START);
+ }
+
+ @Override
+ @CallSuper
+ public void onResume() {
+ super.onResume();
+ lifecycleSubject.onNext(FragmentEvent.RESUME);
+ }
+
+ @Override
+ @CallSuper
+ public void onPause() {
+ lifecycleSubject.onNext(FragmentEvent.PAUSE);
+ super.onPause();
+ }
+
+ @Override
+ @CallSuper
+ public void onStop() {
+ lifecycleSubject.onNext(FragmentEvent.STOP);
+ super.onStop();
+ }
+
+ @Override
+ @CallSuper
+ public void onDestroyView() {
+ lifecycleSubject.onNext(FragmentEvent.DESTROY_VIEW);
+ super.onDestroyView();
+ }
+
+ @Override
+ @CallSuper
+ public void onDestroy() {
+ lifecycleSubject.onNext(FragmentEvent.DESTROY);
+ super.onDestroy();
+ }
+
+ @Override
+ @CallSuper
+ public void onDetach() {
+ lifecycleSubject.onNext(FragmentEvent.DETACH);
+ super.onDetach();
+ }
+}
diff --git a/app/src/main/java/com/uiui/videoplayer/bean/SpaceInfo.java b/app/src/main/java/com/uiui/videoplayer/bean/SpaceInfo.java
new file mode 100644
index 0000000..dabdbbb
--- /dev/null
+++ b/app/src/main/java/com/uiui/videoplayer/bean/SpaceInfo.java
@@ -0,0 +1,35 @@
+package com.uiui.videoplayer.bean;
+
+import java.io.Serializable;
+
+public class SpaceInfo implements Serializable {
+ private static final long serialVersionUID = -1299818908870523156L;
+
+ String home_video_grade;
+ long quota;
+ long use_quota;
+
+ public String getHome_video_grade() {
+ return home_video_grade;
+ }
+
+ public void setHome_video_grade(String home_video_grade) {
+ this.home_video_grade = home_video_grade;
+ }
+
+ public long getQuota() {
+ return quota;
+ }
+
+ public void setQuota(long quota) {
+ this.quota = quota;
+ }
+
+ public long getUse_quota() {
+ return use_quota;
+ }
+
+ public void setUse_quota(long use_quota) {
+ this.use_quota = use_quota;
+ }
+}
diff --git a/app/src/main/java/com/uiui/videoplayer/fragment/doc/DocContact.java b/app/src/main/java/com/uiui/videoplayer/fragment/doc/DocContact.java
new file mode 100644
index 0000000..a5f150f
--- /dev/null
+++ b/app/src/main/java/com/uiui/videoplayer/fragment/doc/DocContact.java
@@ -0,0 +1,14 @@
+package com.uiui.videoplayer.fragment.doc;
+
+import com.uiui.videoplayer.base.BasePresenter;
+import com.uiui.videoplayer.base.BaseView;
+
+public class DocContact {
+ public interface Presenter extends BasePresenter {
+
+ }
+
+ public interface DocView extends BaseView {
+
+ }
+}
diff --git a/app/src/main/java/com/uiui/videoplayer/fragment/doc/DocFragment.java b/app/src/main/java/com/uiui/videoplayer/fragment/doc/DocFragment.java
new file mode 100644
index 0000000..516e58f
--- /dev/null
+++ b/app/src/main/java/com/uiui/videoplayer/fragment/doc/DocFragment.java
@@ -0,0 +1,95 @@
+package com.uiui.videoplayer.fragment.doc;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.fragment.app.Fragment;
+
+import com.uiui.videoplayer.R;
+import com.uiui.videoplayer.base.BaseFragment;
+
+import butterknife.ButterKnife;
+
+/**
+ * A simple {@link Fragment} subclass.
+ * Use the {@link DocFragment#newInstance} factory method to
+ * create an instance of this fragment.
+ */
+public class DocFragment extends BaseFragment implements DocContact.DocView {
+ private static final String TAG = DocFragment.class.getSimpleName();
+
+ private View rootView;// 设置为全局的
+ private Activity mContext;
+
+ // TODO: Rename parameter arguments, choose names that match
+ // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
+ private static final String ARG_PARAM1 = "param1";
+ private static final String ARG_PARAM2 = "param2";
+
+ // TODO: Rename and change types of parameters
+ private String mParam1;
+ private String mParam2;
+
+ public DocFragment() {
+ // Required empty public constructor
+ }
+
+ /**
+ * Use this factory method to create a new instance of
+ * this fragment using the provided parameters.
+ *
+ * @param param1 Parameter 1.
+ * @param param2 Parameter 2.
+ * @return A new instance of fragment PictureFragment.
+ */
+ // TODO: Rename and change types and number of parameters
+ public static DocFragment newInstance(String param1, String param2) {
+ DocFragment fragment = new DocFragment();
+ 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
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Inflate the layout for this fragment
+ Log.e(TAG, "onCreateView: ");
+ if (null != rootView) {
+ ViewGroup parent = (ViewGroup) rootView.getParent();
+ if (null != parent) {
+ parent.removeView(rootView);
+ }
+ } else { // 如ongoing果rootView为空 ,就实例化该视图
+ rootView = inflater.inflate(R.layout.fragment_doc, container, false);
+ mContext = (Activity) rootView.getContext();
+ ButterKnife.bind(this, rootView);
+ initView();
+ }
+ return rootView;
+ }
+
+ @Override
+ public void fetchData() {
+
+ }
+
+ private void initView() {
+
+ }
+}
diff --git a/app/src/main/java/com/uiui/videoplayer/fragment/doc/DocPresenter.java b/app/src/main/java/com/uiui/videoplayer/fragment/doc/DocPresenter.java
new file mode 100644
index 0000000..734607f
--- /dev/null
+++ b/app/src/main/java/com/uiui/videoplayer/fragment/doc/DocPresenter.java
@@ -0,0 +1,43 @@
+package com.uiui.videoplayer.fragment.doc;
+
+import android.content.Context;
+
+import com.trello.rxlifecycle4.android.FragmentEvent;
+import com.uiui.videoplayer.disklrucache.CacheHelper;
+
+import io.reactivex.rxjava3.annotations.NonNull;
+import io.reactivex.rxjava3.subjects.BehaviorSubject;
+
+public class DocPresenter implements DocContact.Presenter {
+ private static final String TAG = DocPresenter.class.getSimpleName();
+ private DocContact.DocView mView;
+ private Context mContext;
+ private CacheHelper mCacheHelper;
+
+ public DocPresenter(Context context) {
+ this.mContext = context;
+ this.mCacheHelper = new CacheHelper(context);
+ }
+
+ private BehaviorSubject lifecycle;
+
+ void setLifecycle(BehaviorSubject lifecycle) {
+ this.lifecycle = lifecycle;
+ }
+
+ public BehaviorSubject getLifecycle() {
+ return lifecycle;
+ }
+
+ @Override
+ public void attachView(@NonNull DocContact.DocView view) {
+ this.mView = view;
+ }
+
+ @Override
+ public void detachView() {
+ this.mView = null;
+ }
+
+
+}
diff --git a/app/src/main/java/com/uiui/videoplayer/fragment/pic/PictureContact.java b/app/src/main/java/com/uiui/videoplayer/fragment/pic/PictureContact.java
new file mode 100644
index 0000000..3f1b027
--- /dev/null
+++ b/app/src/main/java/com/uiui/videoplayer/fragment/pic/PictureContact.java
@@ -0,0 +1,18 @@
+package com.uiui.videoplayer.fragment.pic;
+
+import com.uiui.videoplayer.base.BasePresenter;
+import com.uiui.videoplayer.base.BaseView;
+import com.uiui.videoplayer.bean.PhotoInfo;
+
+import java.util.ArrayList;
+
+public class PictureContact {
+ public interface Presenter extends BasePresenter {
+ void getHomePhoto();
+ }
+
+ public interface PictureView extends BaseView {
+ void setHomePhoto(ArrayList photoInfos);
+ void getHomePhotoFinish();
+ }
+}
diff --git a/app/src/main/java/com/uiui/videoplayer/fragment/pic/PictureFragment.java b/app/src/main/java/com/uiui/videoplayer/fragment/pic/PictureFragment.java
new file mode 100644
index 0000000..9ad1f0a
--- /dev/null
+++ b/app/src/main/java/com/uiui/videoplayer/fragment/pic/PictureFragment.java
@@ -0,0 +1,173 @@
+package com.uiui.videoplayer.fragment.pic;
+
+import android.app.Activity;
+import android.content.Context;
+import android.os.Bundle;
+
+import androidx.constraintlayout.widget.ConstraintLayout;
+import androidx.fragment.app.Fragment;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
+
+import android.util.DisplayMetrics;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.WindowManager;
+import android.widget.ImageView;
+
+import com.uiui.videoplayer.R;
+import com.uiui.videoplayer.activity.pic.GalleryPresenter;
+import com.uiui.videoplayer.adapter.PicAdapter;
+import com.uiui.videoplayer.adapter.RecyclerViewSpacesItemDecoration;
+import com.uiui.videoplayer.base.BGAGridDivider;
+import com.uiui.videoplayer.base.BaseFragment;
+import com.uiui.videoplayer.bean.PhotoInfo;
+import com.uiui.videoplayer.utils.ToastUtil;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+
+/**
+ * A simple {@link Fragment} subclass.
+ * Use the {@link PictureFragment#newInstance} factory method to
+ * create an instance of this fragment.
+ */
+public class PictureFragment extends BaseFragment implements PictureContact.PictureView {
+ private static final String TAG = PictureFragment.class.getSimpleName();
+
+ @BindView(R.id.swipeRefreshLayout)
+ SwipeRefreshLayout swipeRefreshLayout;
+ @BindView(R.id.recyclerView)
+ RecyclerView recyclerView;
+ @BindView(R.id.cl_nodata)
+ ConstraintLayout cl_nodata;
+
+ private View rootView;// 设置为全局的
+ private Activity mContext;
+
+ private PicturePresenter mPresenter;
+ private PicAdapter mPicAdapter;
+ private static final int SPAN_COUNT = 3;
+
+ // TODO: Rename parameter arguments, choose names that match
+ // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
+ private static final String ARG_PARAM1 = "param1";
+ private static final String ARG_PARAM2 = "param2";
+
+ // TODO: Rename and change types of parameters
+ private String mParam1;
+ private String mParam2;
+
+ public PictureFragment() {
+ // Required empty public constructor
+ }
+
+ /**
+ * Use this factory method to create a new instance of
+ * this fragment using the provided parameters.
+ *
+ * @param param1 Parameter 1.
+ * @param param2 Parameter 2.
+ * @return A new instance of fragment PictureFragment.
+ */
+ // TODO: Rename and change types and number of parameters
+ public static PictureFragment newInstance(String param1, String param2) {
+ PictureFragment fragment = new PictureFragment();
+ 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
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Inflate the layout for this fragment
+ Log.e(TAG, "onCreateView: ");
+ if (null != rootView) {
+ ViewGroup parent = (ViewGroup) rootView.getParent();
+ if (null != parent) {
+ parent.removeView(rootView);
+ }
+ } else { // 如ongoing果rootView为空 ,就实例化该视图
+ rootView = inflater.inflate(R.layout.fragment_picture, container, false);
+ mContext = (Activity) rootView.getContext();
+ ButterKnife.bind(this, rootView);
+ initView();
+ }
+ return rootView;
+ }
+
+ @Override
+ public void fetchData() {
+ Log.e(TAG, "fetchData: ");
+
+ }
+
+ private void initView() {
+ mPresenter = new PicturePresenter(mContext);
+ mPresenter.setLifecycle(lifecycleSubject);
+ mPresenter.attachView(this);
+
+ GridLayoutManager layoutManager = new GridLayoutManager(mContext, SPAN_COUNT, LinearLayoutManager.VERTICAL, false);
+ HashMap stringIntegerHashMap = new HashMap<>();
+ WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
+ DisplayMetrics dm = new DisplayMetrics();
+ wm.getDefaultDisplay().getRealMetrics(dm);
+ float density = dm.density; // 屏幕密度(0.75 / 1.0 / 1.5)
+ stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.TOP_DECORATION, (int) (density * 1));//top间距
+ stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.BOTTOM_DECORATION, (int) (density * 1));//底部间距
+ stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.LEFT_DECORATION, (int) (density * 20));//左间距
+ stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.RIGHT_DECORATION, (int) (density * 20));//右间距
+ recyclerView.addItemDecoration(new RecyclerViewSpacesItemDecoration(stringIntegerHashMap));
+
+ mPicAdapter = new PicAdapter(layoutManager);
+ recyclerView.setLayoutManager(layoutManager);
+ recyclerView.addItemDecoration(BGAGridDivider.newInstanceWithSpaceRes(R.dimen.dp_2));
+ recyclerView.setAdapter(mPicAdapter);
+ swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
+ @Override
+ public void onRefresh() {
+ mPresenter.getHomePhoto();
+ swipeRefreshLayout.setRefreshing(true);
+ }
+ });
+ mPresenter.getHomePhoto();
+ swipeRefreshLayout.setRefreshing(true);
+ }
+
+ @Override
+ public void setHomePhoto(ArrayList photoInfos) {
+ mPicAdapter.setPhotoInfos(photoInfos);
+ if (photoInfos == null || photoInfos.size() == 0) {
+ cl_nodata.setVisibility(View.VISIBLE);
+ recyclerView.setVisibility(View.GONE);
+ ToastUtil.show("没有数据");
+ } else {
+ cl_nodata.setVisibility(View.GONE);
+ recyclerView.setVisibility(View.VISIBLE);
+ }
+ }
+
+ @Override
+ public void getHomePhotoFinish() {
+ swipeRefreshLayout.setRefreshing(false);
+ }
+}
diff --git a/app/src/main/java/com/uiui/videoplayer/fragment/pic/PicturePresenter.java b/app/src/main/java/com/uiui/videoplayer/fragment/pic/PicturePresenter.java
new file mode 100644
index 0000000..c4e098d
--- /dev/null
+++ b/app/src/main/java/com/uiui/videoplayer/fragment/pic/PicturePresenter.java
@@ -0,0 +1,60 @@
+package com.uiui.videoplayer.fragment.pic;
+
+import android.content.Context;
+
+import com.trello.rxlifecycle4.android.FragmentEvent;
+import com.uiui.videoplayer.bean.PhotoInfo;
+import com.uiui.videoplayer.disklrucache.CacheHelper;
+import com.uiui.videoplayer.network.NetInterfaceManager;
+
+import java.util.ArrayList;
+
+import io.reactivex.rxjava3.annotations.NonNull;
+import io.reactivex.rxjava3.subjects.BehaviorSubject;
+
+public class PicturePresenter implements PictureContact.Presenter {
+ private static final String TAG = PicturePresenter.class.getSimpleName();
+ private PictureContact.PictureView mView;
+ private Context mContext;
+ private CacheHelper mCacheHelper;
+
+ public PicturePresenter(Context context) {
+ this.mContext = context;
+ this.mCacheHelper = new CacheHelper(context);
+ }
+
+ private BehaviorSubject lifecycle;
+
+ void setLifecycle(BehaviorSubject lifecycle) {
+ this.lifecycle = lifecycle;
+ }
+
+ public BehaviorSubject getLifecycle() {
+ return lifecycle;
+ }
+
+ @Override
+ public void attachView(@NonNull PictureContact.PictureView view) {
+ this.mView = view;
+ }
+
+ @Override
+ public void detachView() {
+ this.mView = null;
+ }
+
+ @Override
+ public void getHomePhoto() {
+ NetInterfaceManager.getInstance().getHomePhotoFragment( getLifecycle(), new NetInterfaceManager.onPhotoCallback() {
+ @Override
+ public void setPhotoList(ArrayList photoList) {
+ mView.setHomePhoto(photoList);
+ }
+
+ @Override
+ public void onComplete() {
+ mView.getHomePhotoFinish();
+ }
+ });
+ }
+}
diff --git a/app/src/main/java/com/uiui/videoplayer/fragment/video/VideoContact.java b/app/src/main/java/com/uiui/videoplayer/fragment/video/VideoContact.java
new file mode 100644
index 0000000..a532f50
--- /dev/null
+++ b/app/src/main/java/com/uiui/videoplayer/fragment/video/VideoContact.java
@@ -0,0 +1,18 @@
+package com.uiui.videoplayer.fragment.video;
+
+import com.uiui.videoplayer.base.BasePresenter;
+import com.uiui.videoplayer.base.BaseView;
+import com.uiui.videoplayer.bean.LocalVideoInfo;
+
+import java.util.ArrayList;
+
+public class VideoContact {
+ public interface Presenter extends BasePresenter {
+ void getHomeVideo();
+ }
+
+ public interface VideoView extends BaseView {
+ void setHomeVideo(ArrayList video);
+ void getHomeVideoFinish();
+ }
+}
diff --git a/app/src/main/java/com/uiui/videoplayer/fragment/video/VideoFragment.java b/app/src/main/java/com/uiui/videoplayer/fragment/video/VideoFragment.java
new file mode 100644
index 0000000..1bcf329
--- /dev/null
+++ b/app/src/main/java/com/uiui/videoplayer/fragment/video/VideoFragment.java
@@ -0,0 +1,271 @@
+package com.uiui.videoplayer.fragment.video;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.res.Configuration;
+import android.os.Bundle;
+import android.util.DisplayMetrics;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.WindowManager;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.constraintlayout.widget.ConstraintLayout;
+import androidx.fragment.app.Fragment;
+import androidx.recyclerview.widget.DefaultItemAnimator;
+import androidx.recyclerview.widget.RecyclerView;
+import androidx.recyclerview.widget.SimpleItemAnimator;
+import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
+
+import com.arialyy.annotations.Download;
+import com.arialyy.aria.core.Aria;
+import com.arialyy.aria.core.task.DownloadTask;
+import com.google.gson.JsonObject;
+import com.uiui.videoplayer.R;
+import com.uiui.videoplayer.activity.video.VideoActivity;
+import com.uiui.videoplayer.adapter.RecyclerViewSpacesItemDecoration;
+import com.uiui.videoplayer.adapter.VideoAdapter;
+import com.uiui.videoplayer.base.BaseFragment;
+import com.uiui.videoplayer.base.CustomDialog;
+import com.uiui.videoplayer.base.RecycleGridLayoutManager;
+import com.uiui.videoplayer.base.SpacesItemDecoration;
+import com.uiui.videoplayer.bean.LocalVideoInfo;
+import com.uiui.videoplayer.gson.GsonUtils;
+import com.uiui.videoplayer.utils.ToastUtil;
+import com.uiui.videoplayer.utils.VideoUtils;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+
+/**
+ * A simple {@link Fragment} subclass.
+ * Use the {@link VideoFragment#newInstance} factory method to
+ * create an instance of this fragment.
+ */
+public class VideoFragment extends BaseFragment implements VideoContact.VideoView {
+ private static final String TAG = VideoFragment.class.getSimpleName();
+
+ @BindView(R.id.recyclerView)
+ RecyclerView recyclerView;
+ @BindView(R.id.cl_nodata)
+ ConstraintLayout cl_nodata;
+ @BindView(R.id.swipeRefreshLayout)
+ SwipeRefreshLayout refreshLayout;
+
+ private View rootView;// 设置为全局的
+ private Activity mContext;
+
+ private VideoPresenter mPresenter;
+ private RecycleGridLayoutManager mManager;
+ private VideoAdapter adapter;
+
+ // TODO: Rename parameter arguments, choose names that match
+ // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
+ private static final String ARG_PARAM1 = "param1";
+ private static final String ARG_PARAM2 = "param2";
+
+ // TODO: Rename and change types of parameters
+ private String mParam1;
+ private String mParam2;
+
+ public VideoFragment() {
+ // Required empty public constructor
+ }
+
+ /**
+ * Use this factory method to create a new instance of
+ * this fragment using the provided parameters.
+ *
+ * @param param1 Parameter 1.
+ * @param param2 Parameter 2.
+ * @return A new instance of fragment PictureFragment.
+ */
+ // TODO: Rename and change types and number of parameters
+ public static VideoFragment newInstance(String param1, String param2) {
+ VideoFragment fragment = new VideoFragment();
+ 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
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Inflate the layout for this fragment
+ Log.e(TAG, "onCreateView: ");
+ if (null != rootView) {
+ ViewGroup parent = (ViewGroup) rootView.getParent();
+ if (null != parent) {
+ parent.removeView(rootView);
+ }
+ } else { // 如ongoing果rootView为空 ,就实例化该视图
+ rootView = inflater.inflate(R.layout.fragment_video, container, false);
+ mContext = (Activity) rootView.getContext();
+ ButterKnife.bind(this, rootView);
+ initView();
+ }
+ return rootView;
+ }
+
+ @Override
+ public void fetchData() {
+
+ }
+
+ private void initView() {
+ mPresenter = new VideoPresenter(mContext);
+ mPresenter.setLifecycle(lifecycleSubject);
+ mPresenter.attachView(this);
+
+ Aria.download(this).register();
+
+ refreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
+ @Override
+ public void onRefresh() {
+ mPresenter.getHomeVideo();
+ refreshLayout.setRefreshing(true);
+ }
+ });
+// ((SimpleItemAnimator) recyclerView.getItemAnimator()).setSupportsChangeAnimations(false);
+// int orientation = getResources().getConfiguration().orientation;
+// if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
+// mManager = new RecycleGridLayoutManager(mContext, 4);
+// } else if (orientation == Configuration.ORIENTATION_PORTRAIT) {
+ mManager = new RecycleGridLayoutManager(mContext, 3);
+// }
+
+ HashMap stringIntegerHashMap = new HashMap<>();
+ WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
+ DisplayMetrics dm = new DisplayMetrics();
+ wm.getDefaultDisplay().getRealMetrics(dm);
+ float density = dm.density; // 屏幕密度(0.75 / 1.0 / 1.5)
+ stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.TOP_DECORATION, (int) (density * 1));//top间距
+ stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.BOTTOM_DECORATION, (int) (density * 1));//底部间距
+ stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.LEFT_DECORATION, (int) (density * 20));//左间距
+ stringIntegerHashMap.put(RecyclerViewSpacesItemDecoration.RIGHT_DECORATION, (int) (density * 20));//右间距
+ recyclerView.addItemDecoration(new RecyclerViewSpacesItemDecoration(stringIntegerHashMap));
+
+ recyclerView.setLayoutManager(mManager);
+ recyclerView.setNestedScrollingEnabled(false);
+ recyclerView.addItemDecoration(new SpacesItemDecoration(getResources().getDimensionPixelSize(R.dimen.PX1x), getResources().getDimensionPixelSize(R.dimen.PX1x),
+ getResources().getDimensionPixelSize(R.dimen.PX1x), getResources().getDimensionPixelSize(R.dimen.PX1x)));
+ ((DefaultItemAnimator) recyclerView.getItemAnimator()).setSupportsChangeAnimations(false);
+ adapter = new VideoAdapter(mContext);
+ adapter.setOnLongClickListener(new VideoAdapter.onItemLongClickListener() {
+ @Override
+ public void onItemLongClick(String path, int position) {
+ showDialog(path, position);
+ }
+ });
+ recyclerView.setAdapter(adapter);
+
+ mPresenter.getHomeVideo();
+ refreshLayout.setRefreshing(true);
+ }
+
+ private void showDialog(String path, int position) {
+ CustomDialog dialog = new CustomDialog(mContext);
+ 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()) {
+ adapter.removeItem(position);
+ ToastUtil.show("删除成功");
+ } else {
+ ToastUtil.show("删除失败,检查权限是否开启");
+ }
+ }
+
+ @Override
+ public void onNegtiveClick() {
+ dialog.dismiss();
+ }
+ });
+ dialog.show();
+ }
+
+
+ @Override
+ public void setHomeVideo(ArrayList video) {
+ if (video == null || video.size() == 0) {
+ cl_nodata.setVisibility(View.VISIBLE);
+ recyclerView.setVisibility(View.GONE);
+ ToastUtil.show("没有数据");
+ } else {
+ cl_nodata.setVisibility(View.GONE);
+ recyclerView.setVisibility(View.VISIBLE);
+ adapter.setData(video);
+ }
+ refreshLayout.setRefreshing(false);
+ }
+
+ @Override
+ public void getHomeVideoFinish() {
+ refreshLayout.setRefreshing(false);
+ }
+
+
+
+
+
+
+ //在这里处理任务执行中的状态,如进度进度条的刷新
+ @Download.onTaskRunning
+ void running(DownloadTask task) {
+ Log.e("aria running", "正在下载:" + task.getState() + "-" + task.getPercent() + "--" + task.getExtendField());
+ try {
+ String jsonString = task.getExtendField();
+ JsonObject jsonObject = GsonUtils.getJsonObject(jsonString);
+ } catch (Exception e) {
+ Log.e("running", "running: " + e.getMessage());
+ }
+ }
+
+ @Download.onTaskComplete
+ void taskComplete(DownloadTask task) {
+ //在这里处理任务完成的状态
+ Log.e("taskComplete", task.getExtendField());
+// Aria.download(this).load(task.getDownloadEntity().getId()).cancel();
+ mPresenter.getHomeVideo();
+ }
+
+ @Download.onTaskFail
+ void taskFail(DownloadTask task, Exception e) {
+ Aria.download(this).resumeAllTask();
+ final String filepath = task.getFilePath();
+ final String packageName = task.getExtendField();
+ try {
+ Aria.download(this).load(task.getDownloadEntity().getId()).cancel(true);
+ Log.e(TAG, "taskFail: " + "Exception: " + e.getLocalizedMessage());
+ } catch (Exception ex) {
+
+ }
+ Log.e(TAG, "taskFail: " + packageName + "filepath: " + filepath);
+ mPresenter.getHomeVideo();
+ }
+}
diff --git a/app/src/main/java/com/uiui/videoplayer/fragment/video/VideoPresenter.java b/app/src/main/java/com/uiui/videoplayer/fragment/video/VideoPresenter.java
new file mode 100644
index 0000000..abc0e66
--- /dev/null
+++ b/app/src/main/java/com/uiui/videoplayer/fragment/video/VideoPresenter.java
@@ -0,0 +1,61 @@
+package com.uiui.videoplayer.fragment.video;
+
+import android.content.Context;
+
+import com.trello.rxlifecycle4.android.FragmentEvent;
+import com.uiui.videoplayer.bean.LocalVideoInfo;
+import com.uiui.videoplayer.disklrucache.CacheHelper;
+import com.uiui.videoplayer.network.NetInterfaceManager;
+
+import java.util.ArrayList;
+
+import io.reactivex.rxjava3.annotations.NonNull;
+import io.reactivex.rxjava3.subjects.BehaviorSubject;
+
+public class VideoPresenter implements VideoContact.Presenter {
+ private static final String TAG = VideoPresenter.class.getSimpleName();
+ private VideoContact.VideoView mView;
+ private Context mContext;
+ private CacheHelper mCacheHelper;
+
+ public VideoPresenter(Context context) {
+ this.mContext = context;
+ this.mCacheHelper = new CacheHelper(context);
+ }
+
+ private BehaviorSubject lifecycle;
+
+ void setLifecycle(BehaviorSubject lifecycle) {
+ this.lifecycle = lifecycle;
+ }
+
+ public BehaviorSubject getLifecycle() {
+ return lifecycle;
+ }
+
+ @Override
+ public void attachView(@NonNull VideoContact.VideoView view) {
+ this.mView = view;
+ }
+
+ @Override
+ public void detachView() {
+ this.mView = null;
+ }
+
+
+ @Override
+ public void getHomeVideo() {
+ NetInterfaceManager.getInstance().getHomeVideoFragment( lifecycle, new NetInterfaceManager.onVideoPathCallback() {
+ @Override
+ public void setVideoList(ArrayList videoList) {
+ mView.setHomeVideo(videoList);
+ }
+
+ @Override
+ public void onComplete() {
+ mView.getHomeVideoFinish();
+ }
+ });
+ }
+}
diff --git a/app/src/main/java/com/uiui/videoplayer/network/NetInterfaceManager.java b/app/src/main/java/com/uiui/videoplayer/network/NetInterfaceManager.java
index 8061cb6..55bf950 100644
--- a/app/src/main/java/com/uiui/videoplayer/network/NetInterfaceManager.java
+++ b/app/src/main/java/com/uiui/videoplayer/network/NetInterfaceManager.java
@@ -3,7 +3,6 @@ package com.uiui.videoplayer.network;
import android.annotation.SuppressLint;
import android.content.ContentResolver;
import android.content.Context;
-import android.graphics.Bitmap;
import android.os.Environment;
import android.util.Log;
@@ -12,8 +11,11 @@ import com.google.gson.reflect.TypeToken;
import com.tencent.mmkv.MMKV;
import com.trello.rxlifecycle4.RxLifecycle;
import com.trello.rxlifecycle4.android.ActivityEvent;
+import com.trello.rxlifecycle4.android.FragmentEvent;
+import com.uiui.sn.manager.RemoteManager;
import com.uiui.videoplayer.bean.BaseResponse;
import com.uiui.videoplayer.bean.PhotoInfo;
+import com.uiui.videoplayer.bean.SpaceInfo;
import com.uiui.videoplayer.bean.VideoInfo;
import com.uiui.videoplayer.bean.LocalVideoInfo;
import com.uiui.videoplayer.config.CommonConfig;
@@ -21,8 +23,8 @@ import com.uiui.videoplayer.disklrucache.CacheHelper;
import com.uiui.videoplayer.gson.GsonUtils;
import com.uiui.videoplayer.manager.ConnectManager;
import com.uiui.videoplayer.manager.ConnectMode;
-import com.uiui.videoplayer.manager.RemoteManager;
import com.uiui.videoplayer.network.api.HomePhotoApi;
+import com.uiui.videoplayer.network.api.HomeSpaceInfoApi;
import com.uiui.videoplayer.network.api.HomeVideoApi;
import com.uiui.videoplayer.network.interceptor.RepeatRequestInterceptor;
import com.uiui.videoplayer.utils.JGYUtils;
@@ -52,7 +54,6 @@ import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
-import wseemann.media.FFmpegMediaMetadataRetriever;
public class NetInterfaceManager {
private static final String TAG = NetInterfaceManager.class.getSimpleName();
@@ -165,6 +166,13 @@ public class NetInterfaceManager {
.observeOn(AndroidSchedulers.mainThread());
}
+ public Observable> getHomeSpaceInfoControl() {
+ return mRetrofit.create(HomeSpaceInfoApi.class)
+ .getHomeSpaceInfo(RemoteManager.getInstance().getSerial())
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
+ }
+
public interface onVideoPathCallback {
void setVideoList(ArrayList videoList);
@@ -221,6 +229,12 @@ public class NetInterfaceManager {
.subscribe(getHomeVideoObserver(callback));
}
+ public void getHomeVideoFragment(BehaviorSubject lifecycle, onVideoPathCallback callback) {
+ getHomeVideoControl()
+ .compose(RxLifecycle.bindUntilEvent(lifecycle, FragmentEvent.DESTROY))
+ .subscribe(getHomeVideoObserver(callback));
+ }
+
public void getHomeVideo(onVideoPathCallback callback) {
getHomeVideoControl()
.subscribe(getHomeVideoObserver(callback));
@@ -446,6 +460,12 @@ public class NetInterfaceManager {
.subscribe(getHomePhotoObserver(callback));
}
+ public void getHomePhotoFragment(BehaviorSubject lifecycle, onPhotoCallback callback) {
+ getHomePhotoControl()
+ .compose(RxLifecycle.bindUntilEvent(lifecycle, FragmentEvent.DESTROY))
+ .subscribe(getHomePhotoObserver(callback));
+ }
+
public void getHomePhoto(onPhotoCallback callback) {
getHomePhotoControl()
.subscribe(getHomePhotoObserver(callback));
diff --git a/app/src/main/java/com/uiui/videoplayer/network/UrlAddress.java b/app/src/main/java/com/uiui/videoplayer/network/UrlAddress.java
index 90bb098..9084143 100644
--- a/app/src/main/java/com/uiui/videoplayer/network/UrlAddress.java
+++ b/app/src/main/java/com/uiui/videoplayer/network/UrlAddress.java
@@ -8,4 +8,8 @@ public class UrlAddress {
public static final String HOME_VIDEO ="File/getHomeVideo";
/*获取家庭照片*/
public static final String HOME_PHOTO ="File/getHomePhoto";
+ /*获取家庭空间信息*/
+ public static final String GET_HOME_SPACE_INFO ="File/getHomeSpaceInfo";
+
+
}
diff --git a/app/src/main/java/com/uiui/videoplayer/network/api/HomeSpaceInfoApi.java b/app/src/main/java/com/uiui/videoplayer/network/api/HomeSpaceInfoApi.java
new file mode 100644
index 0000000..2e885f7
--- /dev/null
+++ b/app/src/main/java/com/uiui/videoplayer/network/api/HomeSpaceInfoApi.java
@@ -0,0 +1,16 @@
+package com.uiui.videoplayer.network.api;
+
+import com.uiui.videoplayer.bean.BaseResponse;
+import com.uiui.videoplayer.bean.SpaceInfo;
+import com.uiui.videoplayer.network.UrlAddress;
+
+import io.reactivex.rxjava3.core.Observable;
+import retrofit2.http.GET;
+import retrofit2.http.Query;
+
+public interface HomeSpaceInfoApi {
+ @GET(UrlAddress.GET_HOME_SPACE_INFO)
+ Observable> getHomeSpaceInfo(
+ @Query("sn") String sn
+ );
+}
diff --git a/app/src/main/java/com/uiui/videoplayer/utils/Utils.java b/app/src/main/java/com/uiui/videoplayer/utils/Utils.java
index 5144767..2e3a28b 100644
--- a/app/src/main/java/com/uiui/videoplayer/utils/Utils.java
+++ b/app/src/main/java/com/uiui/videoplayer/utils/Utils.java
@@ -1,5 +1,7 @@
package com.uiui.videoplayer.utils;
+import java.text.DecimalFormat;
+
public class Utils {
public static String TimeFormat(long millisecond) {
int ss = 1000;
@@ -19,4 +21,23 @@ public class Utils {
return strMinute + ":" + strSecond;
}
}
+
+
+ /**
+ * 转换文件大小 MB
+ */
+ public static String formatFileSize(long fileS) {
+ DecimalFormat df = new DecimalFormat("#");
+ String fileSizeString;
+ String wrongSize = "0GB";
+ if (fileS == 0) {
+ return wrongSize;
+ }
+ if (fileS < 1048576) {
+ fileSizeString = df.format((double) fileS / 1024) + "GB";
+ } else {
+ fileSizeString = df.format((double) fileS / 1048576) + "TB";
+ }
+ return fileSizeString;
+ }
}
diff --git a/app/src/main/res/drawable-hdpi/back.png b/app/src/main/res/drawable-hdpi/back.png
index 519aedb..7cdbd1c 100644
Binary files a/app/src/main/res/drawable-hdpi/back.png and b/app/src/main/res/drawable-hdpi/back.png differ
diff --git a/app/src/main/res/drawable-hdpi/home_icon_doc_normal.png b/app/src/main/res/drawable-hdpi/home_icon_doc_normal.png
new file mode 100644
index 0000000..f527d41
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/home_icon_doc_normal.png differ
diff --git a/app/src/main/res/drawable-hdpi/home_icon_picture_normal.png b/app/src/main/res/drawable-hdpi/home_icon_picture_normal.png
new file mode 100644
index 0000000..00831e1
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/home_icon_picture_normal.png differ
diff --git a/app/src/main/res/drawable-hdpi/home_icon_picture_pressed.png b/app/src/main/res/drawable-hdpi/home_icon_picture_pressed.png
new file mode 100644
index 0000000..7f8bad7
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/home_icon_picture_pressed.png differ
diff --git a/app/src/main/res/drawable-hdpi/home_icon_video_normal.png b/app/src/main/res/drawable-hdpi/home_icon_video_normal.png
new file mode 100644
index 0000000..26dce1e
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/home_icon_video_normal.png differ
diff --git a/app/src/main/res/drawable-hdpi/home_icon_video_pressed.png b/app/src/main/res/drawable-hdpi/home_icon_video_pressed.png
new file mode 100644
index 0000000..4f7b2cc
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/home_icon_video_pressed.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_dropdown.png b/app/src/main/res/drawable-hdpi/icon_dropdown.png
new file mode 100644
index 0000000..6b84a68
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_dropdown.png differ
diff --git a/app/src/main/res/drawable-hdpi/no_data.png b/app/src/main/res/drawable-hdpi/no_data.png
index e1eb6e3..5fcfa66 100644
Binary files a/app/src/main/res/drawable-hdpi/no_data.png and b/app/src/main/res/drawable-hdpi/no_data.png differ
diff --git a/app/src/main/res/drawable/alarm_pressed_background.xml b/app/src/main/res/drawable/alarm_pressed_background.xml
new file mode 100644
index 0000000..1aa7340
--- /dev/null
+++ b/app/src/main/res/drawable/alarm_pressed_background.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/space_background.xml b/app/src/main/res/drawable/space_background.xml
new file mode 100644
index 0000000..ffe2cc5
--- /dev/null
+++ b/app/src/main/res/drawable/space_background.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index e769175..b426d7f 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -7,129 +7,261 @@
tools:context=".activity.main.MainActivity">
-
-
-
-
-
-
-
+ android:layout_height="match_parent">
+ android:id="@+id/constraintLayout3"
+ android:layout_width="@dimen/dp_120"
+ android:layout_height="match_parent"
+ android:background="@color/white"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+ app:layout_constraintBottom_toBottomOf="@+id/imageView"
+ app:layout_constraintEnd_toStartOf="@+id/imageView"
+ app:layout_constraintTop_toTopOf="@+id/imageView" />
-
+ android:src="@drawable/icon_dropdown"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_doc.xml b/app/src/main/res/layout/fragment_doc.xml
new file mode 100644
index 0000000..4b05766
--- /dev/null
+++ b/app/src/main/res/layout/fragment_doc.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_picture.xml b/app/src/main/res/layout/fragment_picture.xml
new file mode 100644
index 0000000..253ee09
--- /dev/null
+++ b/app/src/main/res/layout/fragment_picture.xml
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_video.xml b/app/src/main/res/layout/fragment_video.xml
new file mode 100644
index 0000000..f74d4fe
--- /dev/null
+++ b/app/src/main/res/layout/fragment_video.xml
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_pic.xml b/app/src/main/res/layout/item_pic.xml
index 1379d2b..9caa44a 100644
--- a/app/src/main/res/layout/item_pic.xml
+++ b/app/src/main/res/layout/item_pic.xml
@@ -6,13 +6,13 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content">
-
@@ -26,8 +26,8 @@
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png
index 7c35ff7..b872538 100644
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png
index 7c35ff7..b872538 100644
Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png
index 7c35ff7..b872538 100644
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
index 7c35ff7..b872538 100644
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
index 7c35ff7..b872538 100644
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index adc2439..b0e237e 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -13,6 +13,9 @@
#d0d0d0
#9F9F9F
+ #efefef
+ #3D54D9
+
#00000000
#FFE2C59B
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 86db884..d99a010 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,4 +1,7 @@
家庭空间
正在下载%s
+
+
+ Hello blank fragment
diff --git a/app/src/main/aidl/com/uiui/sn/IGetInfoInterface.aidl b/app/src/uiui/aidl/com/uiui/sn/IGetInfoInterface.aidl
similarity index 100%
rename from app/src/main/aidl/com/uiui/sn/IGetInfoInterface.aidl
rename to app/src/uiui/aidl/com/uiui/sn/IGetInfoInterface.aidl
diff --git a/app/src/main/java/com/uiui/videoplayer/manager/RemoteManager.java b/app/src/uiui/java/com/uiui/sn/manager/RemoteManager.java
similarity index 97%
rename from app/src/main/java/com/uiui/videoplayer/manager/RemoteManager.java
rename to app/src/uiui/java/com/uiui/sn/manager/RemoteManager.java
index bd907d6..e7e594b 100644
--- a/app/src/main/java/com/uiui/videoplayer/manager/RemoteManager.java
+++ b/app/src/uiui/java/com/uiui/sn/manager/RemoteManager.java
@@ -1,4 +1,4 @@
-package com.uiui.videoplayer.manager;
+package com.uiui.sn.manager;
import android.annotation.SuppressLint;
import android.content.ComponentName;
@@ -49,6 +49,7 @@ public class RemoteManager {
String sn = mIGetInfoInterface.getSerial();
if (!TextUtils.isEmpty(sn)) {
mMMKV.encode(serialKey, sn);
+ Log.e(TAG, "onServiceConnected: sn = " + sn);
}
} catch (RemoteException e) {
e.printStackTrace();
diff --git a/app/src/uiuios/aidl/com/uiuios/sn/IGetInfoInterface.aidl b/app/src/uiuios/aidl/com/uiuios/sn/IGetInfoInterface.aidl
new file mode 100644
index 0000000..685c726
--- /dev/null
+++ b/app/src/uiuios/aidl/com/uiuios/sn/IGetInfoInterface.aidl
@@ -0,0 +1,30 @@
+// IGetInfoInterface.aidl
+package com.uiuios.sn;
+
+// Declare any non-default types here with import statements
+
+interface IGetInfoInterface {
+ /**
+ * Demonstrates some basic types that you can use as parameters
+ * and return values in AIDL.
+ */
+ void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
+ double aDouble, String aString);
+
+ /*获取sn*/
+ String getSerial();
+ /*获取定位结果*/
+ String getMapResult();
+ /*获取WiFi名*/
+ String getWifiSsid();
+ /*获取蓝牙名*/
+ String getBluetoothSsid();
+ /*写入系统数据库*/
+ boolean SystemPutInt(String name, int value);
+ /*结束进程*/
+ void killBackgroundProcesses(String pkg);
+ /*设置launcher3为默认*/
+ void openLauncher3();
+ /*设置默认桌面*/
+ void setDefaultDesktop(String pkgName, String className);
+}
\ No newline at end of file
diff --git a/app/src/uiuios/java/com/uiui/sn/manager/RemoteManager.java b/app/src/uiuios/java/com/uiui/sn/manager/RemoteManager.java
new file mode 100644
index 0000000..daa687d
--- /dev/null
+++ b/app/src/uiuios/java/com/uiui/sn/manager/RemoteManager.java
@@ -0,0 +1,139 @@
+package com.uiui.sn.manager;
+
+import android.annotation.SuppressLint;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.tencent.mmkv.MMKV;
+import com.uiui.videoplayer.config.CommonConfig;
+import com.uiuios.sn.IGetInfoInterface;
+
+import java.util.HashSet;
+import java.util.Set;
+
+public class RemoteManager {
+ private static final String TAG = RemoteManager.class.getSimpleName();
+
+ public static final String serialKey = "SERIAL_KEY";
+ public static final String hidePackageKey = "HIDE_PACKAGE_NAME";
+ public static final String disablePackageKey = "DISABLE_PACKAGE_NAME";
+
+ @SuppressLint("StaticFieldLeak")
+ private static RemoteManager sInstance;
+ private Context mContext;
+ private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
+ private IGetInfoInterface mIGetInfoInterface;
+ private ServiceConnection mServiceConnection;
+
+ private RemoteManager(Context context) {
+ if (context == null) {
+ throw new RuntimeException("Context is NULL");
+ }
+ this.mContext = context;
+ this.mServiceConnection = new ServiceConnection() {
+ @Override
+ public void onServiceConnected(ComponentName name, IBinder service) {
+ Log.e(TAG, "onServiceConnected: " + name);
+ mIGetInfoInterface = IGetInfoInterface.Stub.asInterface(service);
+ try {
+ for (ConnectedListener listener : mListeners) {
+ listener.onConnected();
+ }
+ String sn = mIGetInfoInterface.getSerial();
+ if (!TextUtils.isEmpty(sn)) {
+ mMMKV.encode(serialKey, sn);
+ Log.e(TAG, "onServiceConnected: sn = " + sn);
+ }
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ Log.e(TAG, "onServiceConnected: " + e.getMessage());
+ }
+ }
+
+ @Override
+ public void onServiceDisconnected(ComponentName name) {
+ Log.e(TAG, "onServiceDisconnected: " + name);
+ mIGetInfoInterface = null;
+ bindinfoService();
+ }
+ };
+ if (mIGetInfoInterface == null) {
+ bindinfoService();
+ }
+ }
+
+ public static void init(Context context) {
+ if (sInstance == null) {
+ Log.e(TAG, "init: ");
+ sInstance = new RemoteManager(context);
+ }
+ }
+
+ public static RemoteManager getInstance() {
+ if (sInstance == null) {
+ throw new IllegalStateException("You must be init RemoteManager first");
+ }
+ return sInstance;
+ }
+
+
+ private static final String AOLEYUNINFO_PACKAGE_NAME = "com.uiuios.sn";
+ private static final String AOLEYUNINFO_CLASS_NAME = "com.uiuios.sn.service.RemoteService";
+ private static final String AOLEYUNINFO_ACTION = "com.uiuios.sn.IGetInfoInterface";
+
+ public void checkAvailable() {
+ if (mIGetInfoInterface == null) {
+ bindinfoService();
+ }
+ }
+
+ public interface ConnectedListener {
+ void onConnected();
+ }
+
+ private Set mListeners = new HashSet<>();
+
+ public void setListener(ConnectedListener listener) {
+ mListeners.add(listener);
+ }
+
+ public void removeListener(ConnectedListener listener) {
+ mListeners.remove(listener);
+ }
+
+ private void bindinfoService() {
+ //这是连接aidl服务的代码
+ Intent intent = new Intent();
+ intent.setAction(AOLEYUNINFO_ACTION);
+ intent.setPackage(AOLEYUNINFO_PACKAGE_NAME);
+ intent.setComponent(new ComponentName(AOLEYUNINFO_PACKAGE_NAME, AOLEYUNINFO_CLASS_NAME));
+ mContext.bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE);
+ }
+
+ public String getSerial() {
+// if (BuildConfig.DEBUG) {
+// return "ah01201058819872";
+// }
+ String sn = mMMKV.decodeString(serialKey, "");
+ Log.e(TAG, "sn: " + sn);
+ if (mIGetInfoInterface == null) {
+ bindinfoService();
+ return sn;
+ }
+ try {
+ String serial = mIGetInfoInterface.getSerial();
+ Log.e(TAG, "getSerial: " + serial);
+ return serial;
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ return sn;
+ }
+ }
+
+}
diff --git a/settings.gradle b/settings.gradle
index 30718e8..783af2e 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,2 +1,2 @@
-rootProject.name='UIUI播放器'
+rootProject.name='UIUI家庭空间'
include ':app', ':JZVideo', ':niceimageview'