analysis: full official-app reverse artifacts (jadx sources, ghidra libcxsdk decomp, authoritative protocol conclusions) + docs

This commit is contained in:
ZXCLI
2026-09-10 02:51:37 +08:00
parent 623d62b641
commit 4ba98f62cd
68 changed files with 69493 additions and 5 deletions
@@ -0,0 +1,411 @@
package cn.com.magnity.magnitycx;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.content.FileProvider;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.Toast;
import cn.com.magnity.magnitycx.MediaActivity;
import cn.com.magnity.magnitycx.QueryDialogFragment;
import cn.com.magnity.magnitycx.sdk.DelegateMediaStatusChanged;
import cn.com.magnity.magnitycx.sdk.GlobalFunc;
import cn.com.magnity.magnitycx.sdk.MagParameter;
import cn.com.magnity.magnitycx.sdk.SharedPreferencesManager;
import com.baidu.mobstat.StatService;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/* loaded from: classes.dex */
public class FragmentMedia extends Fragment implements MediaActivity.DelegateBackPressed, QueryDialogFragment.DelegateQueryResult, AbsListView.OnScrollListener {
private static final int MODE_NORMAL = 0;
private static final int MODE_SELECTION = 1;
private Button btnDelete_;
private Button btnSelectAll_;
private Button btnSocialShare_;
private ArrayList<String> fileNames_;
private int firstVisiblePos_;
private GridView gridView_;
private int index_;
private Map mapSelStatus_;
private MediaGridViewAdapter mediaGridViewAdapter_;
private MediaItemClickListener mediaItemClickListener_;
private MediaItemLongClickListener mediaItemLongClickListener_;
private MediaMenuClickListener mediaMenuClickListener_;
private ViewGroup menu_;
private int mode_ = 0;
private int visibleItemCount_;
@Override // android.support.v4.app.Fragment
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
this.fileNames_ = new ArrayList<>();
this.mediaMenuClickListener_ = new MediaMenuClickListener();
this.mediaItemClickListener_ = new MediaItemClickListener();
this.mediaItemLongClickListener_ = new MediaItemLongClickListener();
this.mapSelStatus_ = new HashMap();
}
@Override // android.support.v4.app.Fragment
@Nullable
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_media, (ViewGroup) null);
initViews(rootView);
return rootView;
}
private void initViews(View rootView) {
this.menu_ = (ViewGroup) rootView.findViewById(R.id.id_media_menu);
if (this.mode_ == 0) {
this.menu_.setVisibility(8);
} else if (this.mode_ == 1) {
this.menu_.setVisibility(0);
}
this.btnSocialShare_ = (Button) rootView.findViewById(R.id.id_btn_social_share);
this.btnSocialShare_.setOnClickListener(this.mediaMenuClickListener_);
this.btnDelete_ = (Button) rootView.findViewById(R.id.id_btn_delete);
this.btnDelete_.setOnClickListener(this.mediaMenuClickListener_);
this.btnSelectAll_ = (Button) rootView.findViewById(R.id.id_btn_select_all);
this.btnSelectAll_.setOnClickListener(this.mediaMenuClickListener_);
this.gridView_ = (GridView) rootView.findViewById(R.id.id_photowall);
this.gridView_.setOnScrollListener(this);
this.gridView_.setOnItemClickListener(this.mediaItemClickListener_);
this.gridView_.setOnItemLongClickListener(this.mediaItemLongClickListener_);
setAdapter();
}
private void setAdapter() {
updateFileList();
this.mediaGridViewAdapter_ = new MediaGridViewAdapter(getActivity(), this.gridView_, this.fileNames_, this.mapSelStatus_);
this.mediaGridViewAdapter_.setMode(this.mode_);
this.gridView_.setAdapter((ListAdapter) this.mediaGridViewAdapter_);
}
private void updateFileList() {
GlobalFunc globalFunc = MagApplication.globalFunc;
GlobalFunc.updateFileList(this.fileNames_);
}
/* JADX INFO: Access modifiers changed from: private */
public void updateGridView() {
this.mediaGridViewAdapter_.notifyDataSetChanged();
this.gridView_.setSelection(this.index_);
this.gridView_.invalidateViews();
}
@Override // android.support.v4.app.Fragment
public void onResume() {
super.onResume();
updateFileList();
updateGridView();
StatService.onPageStart(getActivity(), "媒体");
if (this.mode_ == 0) {
getActivity().setTitle(String.format(getResources().getString(R.string.mediaTitle), Integer.valueOf(this.fileNames_.size())));
} else {
getActivity().setTitle(String.format(getResources().getString(R.string.mediaSelectedNum), Integer.valueOf(getSelectedItemCount())));
}
int num = MagApplication.magParameter.onceTipMediaLongClick;
int num2 = num - 1;
if (num != 0) {
MagApplication.magParameter.onceTipMediaLongClick = num2;
SharedPreferencesManager.putIntWithCommit(MagParameter.KEY_ONCETIPMEDIALONGCLICK, num2);
Toast.makeText(getContext(), R.string.onceTipMediaLongClick, 1).show();
}
}
/* JADX INFO: Access modifiers changed from: private */
public int getSelectedItemCount() {
int num = 0;
for (Object value : this.mapSelStatus_.values()) {
if (((Boolean) value).booleanValue()) {
num++;
}
}
return num;
}
@Override // android.support.v4.app.Fragment
public void onPause() {
this.index_ = this.gridView_.getFirstVisiblePosition();
StatService.onPageEnd(getActivity(), "媒体");
super.onPause();
}
@Override // android.support.v4.app.Fragment
public void onDestroy() {
super.onDestroy();
this.mediaGridViewAdapter_.cancelAllTasks();
}
@Override // android.widget.AbsListView.OnScrollListener
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override // android.widget.AbsListView.OnScrollListener
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
this.firstVisiblePos_ = firstVisibleItem;
this.visibleItemCount_ = visibleItemCount;
if (this.visibleItemCount_ > 0) {
this.mediaGridViewAdapter_.loadBitmap(this.firstVisiblePos_, this.visibleItemCount_);
}
}
@Override // cn.com.magnity.magnitycx.MediaActivity.DelegateBackPressed
public boolean onActivityBackPressed() {
if (this.mode_ == 0) {
return true;
}
this.mode_ = 0;
unselectAllFiles();
this.mediaGridViewAdapter_.cancelAllTasks();
this.menu_.setVisibility(8);
if (!this.mapSelStatus_.isEmpty()) {
this.mapSelStatus_.clear();
}
if (getActivity() instanceof DelegateMediaStatusChanged) {
((DelegateMediaStatusChanged) getActivity()).onModeChanged(1, 0, this.fileNames_.size());
}
this.mediaGridViewAdapter_.setMode(0);
return false;
}
@Override // android.support.v4.app.Fragment
public void onActivityResult(int requestCode, int resultCode, Intent data) {
getActivity().setTitle(Integer.toString(this.fileNames_.size()) + getResources().getString(R.string.mediaTitle));
updateGridView();
}
@Override // cn.com.magnity.magnitycx.QueryDialogFragment.DelegateQueryResult
public void onQueryResult(int result) {
if (result == 1) {
deleteSelectedFiles();
updateButtons();
}
}
private void deleteSelectedFiles() {
Iterator iter = this.mapSelStatus_.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
boolean val = ((Boolean) entry.getValue()).booleanValue();
if (val) {
String pathName = MagApplication.magParameter.mediaDir + File.separator + ((String) entry.getKey());
File file = new File(pathName);
if (file != null && file.isFile()) {
if (file.delete()) {
iter.remove();
}
File file2 = new File(pathName.replace(".jpg", ".ddt"));
if (file2 != null && file2.isFile()) {
file2.delete();
}
}
}
}
updateFileList();
updateGridView();
if (this.fileNames_.isEmpty()) {
onActivityBackPressed();
} else if (getActivity() instanceof DelegateMediaStatusChanged) {
((DelegateMediaStatusChanged) getActivity()).onSelChanged(0, this.fileNames_.size());
}
}
/* JADX INFO: Access modifiers changed from: private */
public void socialShare() {
Intent intent;
boolean hasVideo = false;
ArrayList<Uri> lst = new ArrayList<>();
for (Map.Entry entry : this.mapSelStatus_.entrySet()) {
boolean val = ((Boolean) entry.getValue()).booleanValue();
if (val) {
String pathName = MagApplication.magParameter.mediaDir + File.separator + ((String) entry.getKey());
File f = new File(pathName);
if (f != null && f.isFile()) {
GlobalFunc globalFunc = MagApplication.globalFunc;
int type = GlobalFunc.guessMediaTypeBySuffix(pathName);
if (type == 0) {
lst.add(FileProvider.getUriForFile(getContext(), "cn.com.magnity.magnitycx.fileprovider", f));
} else if (type == 1) {
lst.add(FileProvider.getUriForFile(getContext(), "cn.com.magnity.magnitycx.fileprovider", f));
hasVideo = true;
}
}
}
}
if (lst.size() > 1) {
intent = new Intent("android.intent.action.SEND_MULTIPLE");
intent.putParcelableArrayListExtra("android.intent.extra.STREAM", lst);
} else if (lst.size() == 1) {
intent = new Intent("android.intent.action.SEND");
intent.putExtra("android.intent.extra.STREAM", lst.get(0));
} else {
return;
}
intent.setType(hasVideo ? "video/*" : "image/*");
intent.addFlags(1);
startActivity(Intent.createChooser(intent, getResources().getString(R.string.mediaSocialShare)));
}
/* JADX INFO: Access modifiers changed from: private */
public void selectAllFiles() {
Iterator<String> it = this.fileNames_.iterator();
while (it.hasNext()) {
String name = it.next();
this.mapSelStatus_.put(name, true);
}
if (getActivity() instanceof DelegateMediaStatusChanged) {
int num = this.fileNames_.size();
((DelegateMediaStatusChanged) getActivity()).onSelChanged(num, num);
}
updateGridView();
}
/* JADX INFO: Access modifiers changed from: private */
public void unselectAllFiles() {
Iterator<String> it = this.fileNames_.iterator();
while (it.hasNext()) {
String name = it.next();
this.mapSelStatus_.put(name, false);
}
if (getActivity() instanceof DelegateMediaStatusChanged) {
((DelegateMediaStatusChanged) getActivity()).onSelChanged(0, this.fileNames_.size());
}
updateGridView();
}
/* JADX INFO: Access modifiers changed from: private */
public boolean isAllItemSelected() {
return this.fileNames_.size() == this.mapSelStatus_.size() && !this.mapSelStatus_.containsValue(false);
}
private boolean isNoItemSelected() {
return !this.mapSelStatus_.containsValue(true);
}
/* JADX INFO: Access modifiers changed from: private */
public void updateButtons() {
if (isNoItemSelected()) {
this.btnSocialShare_.setEnabled(false);
this.btnDelete_.setEnabled(false);
this.btnSelectAll_.setText(R.string.mediaSelectAll);
Drawable drawable = getResources().getDrawable(R.drawable.button_unselect_all_select);
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
this.btnSelectAll_.setCompoundDrawables(null, drawable, null, null);
return;
}
this.btnSocialShare_.setEnabled(true);
this.btnDelete_.setEnabled(true);
if (isAllItemSelected()) {
this.btnSelectAll_.setText(R.string.mediaUnselectAll);
Drawable drawable2 = getResources().getDrawable(R.drawable.button_select_all_select);
drawable2.setBounds(0, 0, drawable2.getMinimumWidth(), drawable2.getMinimumHeight());
this.btnSelectAll_.setCompoundDrawables(null, drawable2, null, null);
return;
}
this.btnSelectAll_.setText(R.string.mediaSelectAll);
Drawable drawable3 = getResources().getDrawable(R.drawable.button_unselect_all_select);
drawable3.setBounds(0, 0, drawable3.getMinimumWidth(), drawable3.getMinimumHeight());
this.btnSelectAll_.setCompoundDrawables(null, drawable3, null, null);
}
private class MediaMenuClickListener implements View.OnClickListener {
private MediaMenuClickListener() {
}
@Override // android.view.View.OnClickListener
public void onClick(View v) {
switch (v.getId()) {
case R.id.id_btn_social_share /* 2131624072 */:
FragmentMedia.this.socialShare();
break;
case R.id.id_btn_delete /* 2131624143 */:
QueryDialogFragment dlg = QueryDialogFragment.newInstance(R.layout.dialog_fragment_query_delete_media);
if (dlg != null) {
dlg.show(FragmentMedia.this.getActivity().getSupportFragmentManager(), "deleteMedia");
break;
}
break;
case R.id.id_btn_select_all /* 2131624144 */:
if (FragmentMedia.this.isAllItemSelected()) {
FragmentMedia.this.unselectAllFiles();
} else {
FragmentMedia.this.selectAllFiles();
}
FragmentMedia.this.updateButtons();
break;
}
}
}
private class MediaItemClickListener implements AdapterView.OnItemClickListener {
private MediaItemClickListener() {
}
@Override // android.widget.AdapterView.OnItemClickListener
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (FragmentMedia.this.mode_ != 0) {
String name = (String) FragmentMedia.this.fileNames_.get(position);
ImageView v = (ImageView) view.findViewById(R.id.id_photo_selected);
ImageView vimg = (ImageView) view.findViewById(R.id.id_wallphoto);
Object val = FragmentMedia.this.mapSelStatus_.get(name);
if (val == null || !((Boolean) val).booleanValue()) {
v.setImageResource(R.mipmap.media_selected);
vimg.setAlpha(0.6f);
FragmentMedia.this.mapSelStatus_.put(name, true);
} else {
v.setImageResource(R.mipmap.media_unselected);
vimg.setAlpha(1.0f);
FragmentMedia.this.mapSelStatus_.put(name, false);
}
if (FragmentMedia.this.getActivity() instanceof DelegateMediaStatusChanged) {
((DelegateMediaStatusChanged) FragmentMedia.this.getActivity()).onSelChanged(FragmentMedia.this.getSelectedItemCount(), FragmentMedia.this.fileNames_.size());
}
FragmentMedia.this.updateButtons();
return;
}
Intent intent = new Intent(FragmentMedia.this.getActivity(), (Class<?>) MediaSingleActivity.class);
intent.putExtra(MediaSingleActivity.MEDIAWINDOWFLAG, 1);
intent.putExtra(MediaSingleActivity.MEDIAINDEX, position);
intent.putStringArrayListExtra(MediaSingleActivity.MEDIANAMELIST, FragmentMedia.this.fileNames_);
FragmentMedia.this.startActivityForResult(intent, 0);
}
}
private class MediaItemLongClickListener implements AdapterView.OnItemLongClickListener {
private MediaItemLongClickListener() {
}
@Override // android.widget.AdapterView.OnItemLongClickListener
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
if (FragmentMedia.this.mode_ != 1) {
String name = (String) FragmentMedia.this.fileNames_.get(position);
FragmentMedia.this.mapSelStatus_.put(name, true);
FragmentMedia.this.updateButtons();
FragmentMedia.this.menu_.setVisibility(0);
FragmentMedia.this.mode_ = 1;
if (FragmentMedia.this.getActivity() instanceof DelegateMediaStatusChanged) {
((DelegateMediaStatusChanged) FragmentMedia.this.getActivity()).onModeChanged(0, 1, FragmentMedia.this.fileNames_.size());
}
FragmentMedia.this.mediaGridViewAdapter_.setMode(1);
FragmentMedia.this.updateGridView();
}
return true;
}
}
}